Продолжаем серию, посвященную извлечению информации из Civil3D, и сегодня я расскажу про обработку безнапорных сетей (в напорку пока не лез), там отдельные классы и отдельные правила.
1. О проблеме классов IFC для инфраструктуры
Проблема, которая существует давно, связана с недостатком IFC классов для описания инфраструктуры и того что "снаружи" здания. По этой причине многие элементы в IFC-сборках часто фигурируют как IfcBuildingElementProxy (универсальный элемент геометрии). Тем не менее, выражение таким классом неприемлемо для сдачи модели в экспертизу, поэтому применяются разные ухищрения (маппинг и т.д.). На текущий момент понимания как это происходит на программном уровне нет, поэтому я оставим все элементы в этой "условной структуре". Надо сказать, что выражение элементов в классы IFC изменяет код от силы на 5%, так как львиная доля кода - это логика обработки данных, получения геометрии, получения свойств, а присвоить выбранному классу геометрию (Representation) можно вне зависимости от выбранного класса.
2. Безнапорные трубопроводные сети в Civil3D
Структура типовой безнапорной сети в Civil3D простая - есть трубы, есть колодцы. Несмотря на "классовое различие", они обладают похожими программными методами для извлечения геометрии и свойств.
Так как в общем случае и трубы, и колодцы - это параметризированные семейства со сложной геометрией, они в любом случае будут иметь геометрическое представление как сводимое к IfcShapeRepresentation (наследник IfcShapeModel), которое и является основной формой геометрического представления объекта класса IFC.
Ложка дёгтя - используемый вариант генерации геометрии объекта через 3d-тело не всегда дает нормальный результат. К примеру часть нулевых колодцев не имеет геометрию, что приводит к ошибкам обработки (и появлению условных конструкций на их месте). Пока решил это условной сущностью IfcPoint на месте такой геометрии.
3. Цвет объекта AutoCAD
Этот пункт немного выбивается из общей логики, но на проблемы передачи цвета я тоже потратил часа 3. Вопрос состоял в том, чтобы присвоить геометрическому представлению объекта стиль с цветом, и проблема была у меня в получении цвета.
Вообще, в AutoCAD объект может либо иметь собственный цвет, либо ссылаться на цвет слоя. С точки зрения формирования информационной со строгими правилами, объекты имеют цвет слоя - поэтому данный вариант и был выбран мной.
Каждый объект модели конкретного класса (ну, не всякого типа DBObject) имеет свойство LayerId - то есть идентификатор (ObjectId) слоя чертежа, в котором он лежит.
Узнав идентификатор слоя - я смотрю, какой из слоев из Таблицы слоев чертежа (Database.LayerTableId) совпадает с данным, и у найденного слоя LayerTableRecord получаю Color.ColorValue (объект System.Drawing), из которого легко получить буквенный код цвета RGB (который надо разделить на 256 для IFC-файла).
4. 3D-тела AutoCAD
Самые простые сущности, которые экспортировались прежним модулем. Здесь даже нечего комментировать :).
Исходный код по-прежнему доступен на репозитории плагина здесь. Сам плагин доступен в разделе Realeses (обновлен (версия 1.1.0) под обработку сетей и 3д-тел). Для всех объектов также применяются наборы характеристик при наличии.
Не пропускайте публикации, подписывайтесь на Telegram-канал с тизерами статей.
#civil3d #autodesk #ifc #geometrygym