¬аше окно в мир —јѕ–
 
Ќовости —татьи јвторы —обыти€ ¬акансии Ёнциклопеди€ –екламодател€м
—татьи

9 августа 2015

ядерные технологии в CAD

–оман  олесников

–оман  олесников

ќт редакции isicad.ru: ≈щЄ в €нваре 2013 года стало известно, что геометрическое €дро C3D компании ј— ќЌ лицензировал разработчик мебельных —јѕ– Ч фирма Ѕазис-÷ентр. ƒанна€ стать€ написана на основе опыта, приобретЄнного в Ѕазис-÷ентр после указанного лицензировани€, и, при этом, €вл€етс€ компактной справкой о наиболее известных на мировом рынке 3D-€драх.

¬полне возможно, что дл€ более глубокого понимани€ проблем, представленных в работе –.  олесникова, нашим читател€м будет полезно вспомнить статью Ђ«ачем мебельщикам геометрическое €дро?ї, ставшую одной из последних и, в то же врем€, одной из самых попул€рных публикаций ¬ладимира ћалюха (1966 - 2013).

ƒанна€ публикаци€ с незначительными поправками воспроизводит, с разрешени€ автора, оригинал статьи, опубликованный на habrahabr.

–оман  олесников Ч разработчик в компании ЂЅазис-÷ентрї. — 2005 года занимаетс€ трехмерным моделированием и визуализацией.

ядра и мебель Ѕј«»— ¬ этой статье € предлагаю краткий обзор библиотек геометрического моделировани€ с точки зрени€ разработчика специализированной CAD системы и делюсь опытом интеграции €дра C3D в —јѕ– ЂЅазис-ћебельщикї.

≈сли рынок Ђбольшихї программ проектировани€ давно поделен между несколькими крупными игроками вроде AutoCAD, SolidWorks, NX, Creo Elements и CATIA и т.п., то рынок специализированных программ проектировани€ всего и вс€ Ц окон и лестниц, корпусной и м€гкой мебели, трубопроводов и корпусов весьма широк и динамичен. ѕричин дл€ этого, на мой взгл€д, две: во-первых, это высока€ стоимость покупки крупной —јѕ– и сотрудника, умеющего в ней эффективно работать. ј, во-вторых, отсутствие адаптации дл€ проектировани€ конкретных изделий в крупной —јѕ– приводит к тому, что скорость проектировани€ специализированных изделий в них низка€.

—пециализированные —јѕ– €вл€ютс€ ответом на указанные проблемы и перед программистом сто€т два пути их создани€. ѕервый Ц доработка крупной —јѕ– с использованием предоставл€емых API, плагинов и всевозможных скриптов. Ётот подход не всегда оправдан, т.к. в результате стоимость —јѕ– возрастает дл€ пользовател€ (нужно платить как за большую —јѕ–, так и за адаптацию), а требуема€ квалификаци€ инженера (а, следовательно, и затраты на его обучение и содержание) дл€ работы с таким комбайном достаточно высоки. ¬торой путь Ц создание системы Ђс нул€ї. Ётот путь, несомненно, значительно сложнее, т.к. огромный функционал нужно разработать с самого начала. Ќо несмотр€ на это он может оказатьс€ значительно дешевле и удобнее в использовании дл€ конечного пользовател€, который и определ€ет успех продукта.

—оздание нишевой —јѕ–, несомненно, очень затратна€ разработка, в которой огромную сложность несут алгоритмы геометрического моделировани€ трехмерных моделей. ќ библиотеках которые помогут вам в решении этой задачи и пойдет речь дальше.

Ќо прежде чем начать обзор, € хочу определить функционал, который мы хотели получить от геометрического €дра. ѕоскольку наша CAD предназначена дл€ проектировани€ мебели, то требовани€ сформировались следующие: возможность моделировани€ плоских пластин произвольной формы с вырезами, профилей с посто€нным сечением, тел вращени€ и, так называемых гнутых панелей и операции конструктивной геометрии над этими телами, построение на основе созданных тел проекций и сечений.

— прикладной точки зрени€ в CAD все решени€ геометрического моделировани€ можно разделить на три группы Ц использующие полигональное, воксельное и граничное представление. ѕолигональное моделирование объектов Ч это генераци€ объектов в виде набора полигонов, как правило, треугольников, которые в дальнейшем визуализируютс€ с помощью графических API вроде OpenGL или DirectX. Ётот способ наиболее прост в реализации. —оздание полигональных тел и конструктивные операции с ними можно написать самосто€тельно или воспользоватьс€ открытыми библиотеками, например, CGAL. ћы использовали такую самописную реализацию много лет и она вполне себ€ оправдывала: дешево и сердито. “аким образом, мы довольно долго моделировали достаточно сложные мебельные издели€, например гнутые фасады, без особых хлопот. ќднако полигональное представление имеет существенные недостатки, которые в итоге и вынудили искать альтернативные решени€. Ќедостатки эти следующие: в полигональных модел€х нет информации об ограничивающих тела кривых (дуг, окружностей, сплайнов) на поверхност€х, а это существенно осложн€ет работу конструктора, затрудн€€ точные построени€ от неплоских поверхностей (например цилиндрических, конусных, сферических, парабалоидных), снижаетс€ качество геометрии при конструктивных CSG операци€х, делает невозможным создание корректных чертежей спроектированных объектов, расчет точных площадей поверхностей, объемов тел и т.п. ¬оксельное моделирование также достаточно специфично и не предназначено дл€ решени€ типичных задач конструировани€.

јльтернативным решением €вл€етс€ моделирование объектов с помощью граничного представлени€ BREP. BREP Ц это представление трехмерных тел, которое описывает границу этих тел в виде набора св€занных граней, а кажда€ грань €вл€етс€ контуром на поверхности (например плоской, цилиндрической, сферической, конической или NURBS).

ядра и мебель Ѕј«»—

Ётот способ свободен от недостатков полигональных моделей (хот€ использует полигональные модели как промежуточный этап дл€ визуализации или расчетов) и именно он используетс€ в абсолютном большинстве CAD систем. ќднако математический аппарат дл€ такого моделировани€ несоизмеримо сложнее, и выбор библиотек достаточно ограничен. Ѕольшинство из них написаны на —++ и некоторые имеют врапперы дл€ использовани€ в других €зыках.

Ћидеры в этой области Ц €дра Parasolid и ACIS. ќни используютс€ в подавл€ющем большинстве CAD. Ќар€ду с ними известны CGM и Granite, компоненты крупных —јѕ– CATIA и Creo Elements, которые сравнительно недавно стали доступны дл€ лицензировани€. ¬се они обладают мощнейшей функциональностью, хорошо оттестированы и оптимизированы. ≈динственный их недостаток дл€ нашего брата Ц цена. ќчень внушительные ежегодные выплаты вкупе с большими процентными отчислени€ми от каждой продажи делают создание небольших CAD на их основе дорогосто€щим меропри€тием.

Solids++ и SMLib Ц две не очень известные коммерческие библиотеки, и мне не удалось найти информацию о CAD-системах, построенных на их основе. —огласно описани€м на их сайтах обе они реализуют типичные дл€ геометрических €дер операции. Ќасколько стабильно и надежно они работают Ц вопрос открытый. SMLib обладает весьма весомым преимуществом Ц в отличие от всех остальных коммерческих библиотек, она продаетс€ вместе с исходными текстами.

≈динственна€ на тот момент доступна€ отечественна€ разработка Ц €дро C3D, разработанное в ј— ќЌ дл€  омпаса. ¬ момент выбора оно только выходило на рынок и заинтересовало сбалансированным дл€ нас соотношением цены и функционала.

¬ момент выбора €дра на горизонте также по€вилс€ RGK Ц амбициозный отечественный проект, статьи о котором уже по€вл€лись на хабре (см. Ђ–оссийское 3D-€дро захабреної), однако спуст€ несколько лет никаких данных о нем невозможно получить даже на официальном сайте. ј официальна€ почта не отвечает на письма.

ѕоследнее рассматриваемое €дро Ц OpenCASCADE Ц единственное бесплатное решение. Ќа его основе создан известный пакет FreeCAD. ядро, несомненно, обладает развитым функционалом и, на мой взгл€д, достаточно удобным API, но, к сожалению, и достаточно большим количеством недоработок, которые при тестировании выразились в виде неправильной геометрии при операци€х вычитани€ тел с совпадающими гран€ми и ошибках генерации проекций и силуэтов деталей. ќднако не стоит забывать, что это открытый проект, в котором при возможности вы можете поправить ошибки самосто€тельно. Ёто €дро можно использовать в коммерческих продуктах совершенно бесплатно, но не стоит забывать, что, дополнительные модули и техническа€ поддержка будут платные.

ѕолноценно сравнить вышеприведенные пакеты, конечно, невозможно без кропотливой работы с каждой из них, однако примерное представление об их функционале можно получить по CAD системам, сделанных на их основе. »сход€ из наших финансовых возможностей, у нас выбор был между либо бесплатным OpenCASCADe, либо отечественным C3D. ¬ыбор был сделан в пользу C3D по причине большей стабильности, котора€ была крайне важна, т.к. требовалось корректно импортировать огромное количество моделей созданных на своем движке. » по первому взгл€ду на OpenCASCADE сложно предсказать, сколько времени придетс€ повозитьс€ над исправлением его багов. Ќемаловажным было и наличие импорта/экспорта DXF и стабильных алгоритмов генераций проекций и силуэтов в €дре C3D. ќднако, если бы наши задачи были менее специфичны, то, возможно, OpenCASCADE оказалс€ бы более выгодным решением.

¬ результате мы решились на внедрение €дра от ј— ќЌ, которое зан€ло у нас немалое врем€ и € хочу поделитьс€ с читател€ми этим опытом. ядро C3D представл€ет набор C++ классов описывающих BREP модели, вспомогательные классы и набор алгоритмов оформленных в виде глобальных функций. Ќа первом этапе внедрени€ надо было решить, как вообще подключить —++ €дро к программе, котора€, по историческим причинам, написана на Delphi. Ќаписание —-интерфейса дл€ всех необходимых функций казалось утомительным и негибким подходом. ¬ыход нашелс€ довольно быстро Ц написать промежуточную Ђинтерфейснуюї DLL на —++ с использованием чисто абстрактных классов, которые можно напр€мую использовать в Delphi, т.к. они содержат внутри себ€ указатель на VMT, формат которой, к нашему счастью, у компил€торов от MS и Embarcadero полностью совпадает. ¬ результате € написал DLL-прослойку, котора€ предоставл€ет необходимый функционал в ќќѕ стиле и экспортирует одну лишь функцию из DLL Ц получение основного интерфейса.

—ледующий этап Ц построение всех необходимых тел в €дре C3D по исходным данным, их триангул€ци€ и получение триангул€ции обратно дл€ визуализации. ¬ этой части не было никаких сложностей. Ќа основе функций построени€ ExtrusionSolid, EvolutionSolid тела стро€тс€, а с помощью функций BooleanResult они комбинируютс€ друг с другом путем вычитани€, сложени€ и пересечени€. Ќа выходе у них образуютс€ тела MbSolid которые и содержат данные BREP Ц грани MbFace, ребра MbEdge и т.п. ¬се казалось замечательно, пока не начал тестировать более-менее сложные модели Ц строить огромное количество объектов без кешировани€ оказалось не очень быстрым Ц скорость по сравнению с самописным подходом упала раз в 10, что нас категорически не устраивало. “ут нужно отдать должное “ѕ у C3D Ц они помогли переписать функции построени€ наиболее распространенных тел Ђвручнуюї, т.е. мы стали строить некоторые тела самосто€тельно создава€ каждую грань тела и описыва€ все ребра на них и св€зыва€ их друг с другом, получа€ на выходе корректное замкнутое тело.

—ледующий этапом была визуализаци€ Ц подхватить триангул€цию из C3D и отрисовывать еЄ.  азалось задача проста (учитыва€ имеющийс€ рендер на OpenGL), однако обнаружилась неожиданна€ загвоздка: нам крайне важна визуализаци€ объектов с текстурами, а €вной поддержки текстурных координат в €дре C3D нет (видимо потому, что их нет в  омпасе 3D). ѕришлось выкручиватьс€ следующим образом: €дро позвол€ет генерировать дл€ треугольников так называемые параметрические координаты и дл€ каждой грани можно подсчитать коэффициенты масштабировани€, которые позвол€т наложить текстуру более-менее реалистично. ќднако этот способ не позвол€ет рассчитать текстурные координаты св€зано дл€ нескольких граней. ѕришлось написать дополнительные Ђкостылиї и с помощью атрибутов св€зывать координаты текстуры на гран€х друг с другом.  роме того, дл€ визуализации и редактировани€ моделей нужно передавать различные данные, которые мне также рекомендовали сохран€ть с помощью атрибутов, представл€ющие собой массивы (им€-значение), которые можно назначать на тела, грани и рЄбра.

—амой сложной частью интеграции стало моделирование тел гнутых фасадов. ядра и мебель Ѕј«»—

ѕостроение подобного тела оказалось очень трудоемкой задачей. Ёта задача вы€вила три самых главных недостатка €дра дл€ наших задач: отсутствие операций деформации, очень нестабильно работают конструктивные операции в телах, содержащих линейчатые поверхности и проблемы с точностью, которые усугубл€лись низкой точностью самописного €дра, модели от которого необходимо поддерживать и отсутствие возможности управлени€ допусками в €дре C3D.

«авершающим этапом интеграции стали различные операции экспорта/импорта (STEP, DXF), анализа взаимного расположени€ тел и тому подобное. ќтдельное слово хочу сказать об отладке в ходе которой в €дре было вы€влено значительное количество ошибок, которые к счастью более-менее оперативно решались разработчиками. “ут € хочу суммировать основные проблемы с которыми мы столкнулись:

1. Ќедостаточно удобное и структурированное API с множеством легаси-кода, разделение всех типов на 2D/3D и неудобные и неединообразные функции в 2D, cамописные типы и структуры, повтор€ющие STL, но значительно менее удобные

2. Ќедокументированные механизмы формировани€ имен всем элементам построени€ и необходимость их передавать даже если они не используютс€

3. Ќеобходимость приводить все данные к точности пор€дка 1e-6, отсутствие управлени€ точностью и различные ошибки, происход€щие при еЄ несоблюдении

4. ќтсутствие операций построени€ пути фрезеровани€ и деформации тел

¬ целом €дра геометрического моделировани€ €вл€ютс€ очень сложным программным обеспечением и разного рода проблемы при их интеграции €вл€ютс€ неизбежными. ¬ нашем случае переход с внутреннего решени€ на полноценное €дро сэкономило огромное количество времени и решило целый пласт накопившихс€ проблем и единственное о чем стоит сожалеть нам Ц так это о том, что не озаботились поиском готовых библиотек изначально. ћожно выделить следующие плюсы от перехода на полноценное геометрическое €дро:

1. Ёкономи€ значительного объЄма времени (потраченного на создание и поддержание собственного решени€)

2. ”лучшено качество создаваемой геометрии, правильное построение криволинейных поверхностей и границ

3. ѕолучение качественных чертежей с удалением невидимых линий

4. Ёкспорт/импорт в Ђсапровскиеї 3d форматы (STEP, SAT, XT, DXF)

Ќадеюсь, если кто-то из читателей имеет опыт работы с аналогичными библиотеками, то также поделитс€ опытом их внедрени€.


„итайте также:


¬акансии:

јктуальное обсуждение

RSS-лента комментариев

ƒавид Ћевин
ƒавид Ћевин
ќт редактора: ќ некоторых принципах и вкусах редакции портала isicad.ru
ѕроект ЂЌародное —јѕ–-интервьюї

—лучайна€ стать€:

isicad Top 10

—амые попул€рные материалы

   ‘орумы isicad:

isicad-2010 isicad-2008
isicad-2006 isicad-2004

ќ проекте

ѕриглашаем публиковать на сайте isicad.ru новости и пресс-релизы о новых решени€х и продуктах, о проводимых меропри€ти€х и другую информацию. јдрес дл€ корреспонденции - info@isicad.ru

ѕроект isicad нацелен на

  • укрепление контактов между разработчиками, поставщиками и потребител€ми промышленных решений в област€х PLM и ERP...
ѕодробнее

»нформаци€ дл€ рекламодателей


¬се права защищены. © 2004-2017 √руппа компаний «Ћ≈ƒј—»

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