> Vitaly
Для начала общая идея:
1. Получить все Space текущего файла (независимо от того, в какой внешней ссылке они находятся).
2. Получаем сразу же все стены, все проемы этих стен.
3. Получить координаты вершин каждого Space
4. Определить ближайшие стены к каждой вершине
5. Определить проемы, принадлежащие стене (см.п.4) "внутри" помещения (то есть у которых хотя бы одна из сторон попадает между вершинами Space).
6. Просуммировать площади проемов, вычисленных в п.5. Получаем все площади всех проемов. Вычитаем их из WallArea для Space и получаем значение "Х"
7. Через ObjectDBX открываем файл-владелец Space и в обрабатываемый Space записываем в PropertySet вычисленное значение (если надо будет формировать несколько спецификаций разной степени детализации, то это самый логичный путь).
Теперь проблемы:
1. Можно получить все стены или помещения, но с проемами не все так просто - надо попутно определять "хозяина", к которому они приякорены.
2. До координат вершин Space просто так не добраться, приходится выполнять перенос хранящихся в программном представлении координат в центр Space и выполнять дополнительный поворот.
3. С п.4 самый большой проблем. В стенах необязательно хранится их ширина, особенно если стена многокомпонентная, и ширины компонентов заданы в стиле. Приходится лезьть в стили стен. Сюда же - если один (или несколько) компонентов имеют переменную ширину, зависящую от общей ширины стены, то их надо как-то высчитывать уже для конкретного объекта стены. Этот момент лично мне решить не удалось вообще.
4. С определением проемов тоже грустно - необходимо выполнять множество преобразований, чтобы определить "попадаемость" проемов внутрь стены. Необходимо также не забыть про многоярусные стены и многоярусные же проемы. А также про проемы с непрямоугольной формой или пользовательскими профилями, которые попадают внутрь Space частично.
5. Для проемов, опять же. Это у меня все просто - всегда измерение выполняется по наружной стороне. А если по внутренней? Откуда брать данные о реальном размере проема?
Сейчас я застрял (в логике) именно на определении "попадаемости" проема внутрь помещения. Сижу уже вторую неделю.
6. Открывание через ObjectDBX файла рассматривалось не раз, но тут тоже далеко не все гладко: я не проверял, но сильно подозреваю, что указатель будет изменен. Как их согласовывать - пока не представляю.
---
P.S. Вариант с ручным назначением якоря для проема к помещению не рассматриваю из-за того, что сделать якорь от двух помещений к одной двери нереально.