isicad.ru :: портал САПР, PLM и ERP :: версия для печати

Статьи

16 августа 2018

Представление 3D-моделей в DWG

Александр Спиваков, математик-программист C3D Labs

Александр Спиваков

Статья подготовлена к конференции разработчиков Альянса по открытому проектированию (Open Design Alliance, ODA), которая пройдет 10-11 сентября в Праге. На конференции компания C3D Labs, партнер ODA, проведет собственную сессию для заказчиков и партнеров.

Когда мы говорим о 3D-модели в математическом смысле, то обычно имеем в виду граничное представление твёрдых тел. Твёрдых – в том смысле, что форму их можно считать постоянной; материал, из которого они изготовлены, считается однородным.

Пройдёмся предельно кратко по граничному представлению в стиле Авраам родил Исаака, Исаак родил Иакова. Я буду вводить некие понятия, не давая им строгих определений, ограничиваясь иллюстрациями. Более точное описание можно найти в специализированной литературе.

В граничном представлении тел предметом описания является граница: некий объект, по свойствам очень похожий на поверхность. Граница тела представляется в виде набора граней.

C3D Teigha

Грань – фрагмент поверхности, ориентированный так, как надо, и связанный с другими гранями строго определённым образом. Способ связи заключается в следующем: граница каждой грани разбивается на рёбра, и переход с одной грани на другую осуществляется, как минимум, по одному из рёбер. На каждой грани рёбра группируются в замкнутые ориентированные цепочки, которые называются циклами. Рёбра в циклах выстраиваются таким образом, чтобы обеспечить правильное направление обхода грани: грань должна быть слева в случае внешнего цикла и справа в случае внутреннего. Рёбра, помимо того что соединяют две грани, соединяют две вершины: собственно, проход по цепочке ориентированных рёбер от вершины к вершине и определяет цикл: какую бы его вершину мы ни взяли в качестве начала, в конце будет она же.
C3D Teigha

Оболочки, грани, циклы, рёбра и вершины, иными словами, объекты, с помощью которых описывается взаимное расположение элементов геометрии, называются топологическими объектами.

Вряд ли найдётся конструктор, который вручную станет описывать в явном виде геометрию своего изделия, все взаимосвязи между гранями и вершинами. Тем более он не обязан знать об особенностях хранения модели в файлах, с которыми работает САПР.

Например, в файлах DWG/DXF, работа с которыми есть хлеб Open Design Alliance (ODA), трёхмерные данные хранятся в разделе ModelSpace. За хранение тел в граничном представлении отвечают объекты типа Db3dSolid. В них содержится описание объёмных тел в формате SAT, что расшифровывается как save as text; формат разработан для обмена данными с геометрическим ядром ACIS компании Spatial.

Современные САПР предоставляют проектировщикам богатый набор инструментов, в основе которых лежит сравнительно небольшое число операций. Их правильная комбинация позволяет формировать изделия сложной формы. Команды консоли или сложный графический интерфейс делает удобным обращение к функциям модуля САПР, именуемого геометрическим ядром или моделером.

Именно тот небольшой набор операций, который моделер или платформа предоставляет разработчикам конечно-пользовательских приложений, и будет в фокусе внимания.

Создание 3D-моделей с помощью булевых операций в Teigha

Конструктор, проектируя изделие, не описывает его форму с явным использованием того математического аппарата, который лежит в основе представления моделей, записанных в файлах формата DWG. В свою очередь, пользовательский интерфейс приложения в соответствии с логикой, заложенной разработчиками САПР, обращается к функциям моделера.

Одним из интерфейсов, который в платформе Teigha отвечает за 3D-моделирование, является интерфейс OdDb3dSolid. Набор методов, с помощью которых осуществляется моделирование, можно разделить на две большие группы: булевы операции над телами, операции над топологическими элементами и методы создания тел.

Булевы операции
Булевы операции над телами – очень мощный инструмент моделирования, наглядный, интуитивно понятный и применимый для многих практических задач. Вместе с тем соответствующий раздел API платформы Teigha является наиболее лаконичным, он представлен всего одним методом:

OdResult OdDb3dSolid::booleanOper(OdDb::BoolOperType operation, OdDb3dSolid* solid);

Последний аргумент операции определяет её тип: объединение, пересечение или вычитание.

namespace OdDb
{
enum BoolOperType
{
kBoolUnite = 0,
kBoolIntersect = 1,
kBoolSubtract = 2
};
}

C3D Teigha

Если каким-то образом решён вопрос с тем, что может являться аргументом булевых операций, дерево булевых операций является самодостаточным для описания формы тел.

На этом принципе основан целый раздел моделирования, который называется конструктивной твердотельной геометрией (CSG). Суть этого подхода состоит в том, что листьями графа построения являются элементарные тела: параллелепипеды, цилиндры, шары и другие.

C3D Teigha

Создание операндов булевых операций
Для создания элементарных тел Teigha предоставляет исчерпывающий набор методов:

void createBox( double xLen, double yLen, double zLen );

void createFrustum( double height, double xRadius, double yRadius, double topXRadius );

void createSphere( double radius );

void createWedge( double xLen, double yLen, double zLen );

void createTorus( double majorRadius, double minorRadius );

Все элементарные тела создаются в глобальной системе координат. Позиционирование в пространстве тел, над которыми требуется совершить булеву операцию, осуществляется с помощью операций параллельного переноса, поворота вокруг осей и масштабирования. Параметры операций на практике представляются в виде матрицы следующего вида: квадратная матрица поворота размера 3 как бы достраивается до матрицы размера 4: в дополнительных столбце и строке хранятся вектор смещения и коэффициенты масштабирования вдоль осей координат.

locMatr = OdGeMatrix3d::rotation( OdaPI2, OdGeVector3d::kXAxis ) * OdGeMatrix3d::translation( OdGeVector3d::kXAxis * 100.0 );
///...
pSolid->transformBy(locMatr);

Иногда подход CSG трактуется расширенно: под ним подразумевается моделирование тел с использованием булевых операций над классом тел, более широким, чем элементарные. В число операндов операций, как правило, включаются тела заметания. Тело заметания строится по двум кривым: заметаемый контур и траектория заметания. Среди траекторий заметания особое место занимают отрезок и дуга окружности, по которым строятся тела выдавливания и вращения соответственно. В Teigha для создания тел заметания предусмотрены следующие методы:

OdResult extrude(const OdDbRegion* region, double height, double taper, bool isSolid = true);

OdResult revolve(const OdDbRegion* pRegion, const OdGePoint3d& axisPoint, const OdGeVector3d& axisDir, double angleOfRevolution);

OdResult extrudeAlongPath(const OdDbRegion* region, const OdDbCurve* path, double taperAngle = 0.0, bool isSolid = true);

Я обращаю внимание на такую интересную особенность API, как наличие параметра конусности, который отвечает за плавное масштабирование заметаемого контура вдоль траектории выдавливания.

C3D Teigha

C3D Teigha

C3D Teigha

Есть и другие способы создания тел, но даже без их упоминания, на мой взгляд, видна мощь «расширенного» CSG. Это впечатляющий инструмент для создания тел сложной формы. Более того, формализм конструктивной геометрии может быть положен в основу хранения модели в том виде, в каком она создавалась конструктором. В связи с этим может возникнуть вопрос о преимуществе граничного представления перед конструктивным. В этом случае будет уместно упомянуть о таком важном аспекте 3D-моделирования, как возможность модифицировать форму тела контролируемым образом.

Локальные модификации 3D-моделей с помощью Teigha

Описание тела с помощью конструктивной твердотельной геометрии (CSG) сопряжено со значительными сложностями в тех случаях, когда возникает необходимость модифицировать форму тела. А необходимость подобного рода является скорее правилом, чем исключением, поскольку проектирование изделий носит итеративный характер. Список оснований для доработки модели весьма обширен: это могут быть результаты каких-либо расчётов или же испытаний прототипа. В ходе эксплуатации могут накопиться замечания и пожелания по совершенствованию конструкции. Переход на более совершенную технологию изготовления также может оказать влияние на форму заготовки. В общем, возможность изменить форму тела должна быть заложена в функциональность моделера и конечно-пользовательского приложения.

В контексте решения данной задачи слабым местом конструктивной геометрии оказывается необходимость учитывать взаимозависимость всех характеристик всех исходных операндов булевых операций или, по крайней мере, их части. Это особая задача; есть коммерческие продукты для её решения, которые называются параметрическими ядрами, но они, как правило, используются для решения других конструкторских задач. Кроме того, не исключено, что нужно учитывать не только взаимосвязь параметров исходных тел, но и сам их набор.

Операции скругления, фаски, создания тонкостенного тела
Примером задачи, когда нужно согласованным образом менять характеристики многих тел, является операция скругления углов параллелепипеда.
C3D Teigha

Операцию скругления можно назвать локальной в том смысле, что модификация тела происходит вблизи указанных рёбер. К локальным операциям также можно отнести создание фаски и тонкостенного тела.

Операция фаски похожа на операцию скругления с тем отличием, что поверхность между гранями, которые примыкают к рёбрам, сопрягается не по касательной, а под заданным углом.

C3D Teigha

Операция создания тонкостенного тела базируется не на рёбрах, а на грани. Из оболочки изымается грань, оставшиеся смещаются на заданное расстояние, а затем смещённые грани «подшиваются» к тем, относительно которых они были смещены.
C3D Teigha

В Teigha для осуществления локальных модификаций предусмотрены следующие методы:

OdResult filletEdges( const OdArray& edgeSubentIds,
const OdGeDoubleArray& radius,
const OdGeDoubleArray& startSetback,
const OdGeDoubleArray& endSetback );

OdResult chamferEdges( const OdArray& edgeSubentIds,
const OdDbSubentId& baseFaceSubentId,
double baseDist,
double otherDist );

OdResult shellBody( const OdArray& faceSubentIds,
double offsetDistance );

Это неполный список операций геометрического моделирования.

Как в Teigha реализованы операции геометрического моделирования

В самой платформе Teigha реализован только функционал создания элементарных тел. Все прочие операции реализованы «на стороне» и подключаются к платформе через модули-адаптеры.

Напомним, что моделирование как таковое не является основной задачей платформы: она предназначена для работы с файлом формата DWG. В этом отношении роль модуля-адаптера такова: получить SAT-поток из файла и сформировать исходное тело, выполнить операцию с заданными параметрами и сформировать SAT-поток результата.

До недавнего времени операции трёхмерного моделирования в Teigha могли быть реализованы только с использованием геометрического ядра компании Spatial. Модуль, который обеспечивает сопряжение платформы Teigha с геометрическим ядром, поддерживается разработчиками платформы, но моделер ACIS необходимо приобретать каждой компании самостоятельно.

В настоящее время альтернативным решением является использование связки моделера C3D Modeler и модуля обмена C3D Converter. Напомним, что формат SAT не является «родным» для геометрического ядра C3D, в отличие от ACIS. Этим и обусловлена необходимость использования конвертера. Процесс преобразования исходных данных и результатов моделирования скрыт от пользователя платформы Teigha: для того чтобы нетривиальные операции моделирования были доступны, к приложению достаточно подключить модуль C3D Modeler для Teigha. Необходимые библиотеки C3D Toolkit также могут быть загружены с сервера Open Design Alliance, а запрос лицензионного ключа осуществляется в один клик в личном кабинете. Простая процедура получения доступа к функционалу трёхмерного моделирования при использовании Teigha рассматривается командой C3D как преимущество перед ядром ACIS.

Практические примеры

Основной идеей для выбора практических примеров является возможность воспроизвести историю построения модели, спроектированной в какой-либо из САПР. Сложностей было две.

Первая – найти модель достаточно старую, при построении которой не применялись бы операции, которых нет в API Teigha. Ну, или хотя бы чтобы таких операций было минимальное число. Логично ожидать, что разработчики САПР, выпуская новую версию своего продукта, будут прикладывать демонстрационные примеры, которые содержат примеры реализации новой функциональности, новых операций. Наиболее яркий пример, с которым мы столкнулись при подготовке примеров, – операция выдавливания до объекта.

Вторая сложность уже чисто техническая: как организовать процесс построения так, чтобы получить красивую иллюстрацию «было — стало» для каждой операции. Основное противоречие, которое здесь приходится преодолевать, заключается в том, что ориентация модели и её масштаб не являются стандартными и должны совпадать до и после каждой операции. В то же время селектирование операндов булевых операций или, например, рёбер, требует изменения масштаба или вращения модели. Кстати, не исключено, что эта сложность преувеличена и возникла только из-за неполного знания возможностей тестового приложения платформы Teigha.

Как бы то ни было, история построения моделей была воплощена в двух демонстрационно-тестовых примерах.

C3D Teigha

Кроме операции непосредственно моделирования, для построения моделей был реализован функционал перебора топологических объектов, а также получения геометрии с них. В дальнейшем по мере развития системы тестирования и практического применения этот функционал был усовершенствован.
О платформе Teigha®
Платформа Teigha® предоставляет разработчикам программного обеспечения инструментарий для создания различных инженерных приложений, включая полноценные CAD-системы, программы для автоматизации и визуализации общего назначения, а также решения по управлению доступом к пользовательским данным и их редактированию.

Teigha® поддерживает работу с файлами .dwg, .dgn, .prc, .rvt, .rfa и .pdf на уровне программного обеспечения, а также обеспечивает импорт и экспорт данных из многих других форматов. Решение доступно для использования на всех основных настольных, серверных и мобильных платформах. Поддерживаются языки программирования: C++, .NET и Java.

Разработку Teigha® ведет Альянс по открытому проектированию / Open Design Alliance.

Teigha® является торговой маркой Open Design Alliance. Все другие торговые марки являются собственностью их правообладателей.

Все права защищены. © 2004-2024 Группа компаний «ЛЕДАС»

Перепечатка материалов сайта допускается с согласия редакции, ссылка на isicad.ru обязательна.
Вы можете обратиться к нам по адресу info@isicad.ru.