Manifold Geometry // Многообразная Геометрия

Data Interoperability

Подписаться на эту рубрику по RSS

Обзор OpenCascade

Someone develops code with OCC in a FOSS project so I can peak his code to see what he/she has done right and so can do all the other with my code. That's the big advantage of the game. An advantage a big company like Autodesk or Dassault will never have. That will make us win in the long run! (Jürgen Riegel, founder of FreeCAD // https://forum.freecadweb.org/viewtopic.php?t=98)

Введение

О библиотеке Open CASCADE Technology (сокращенно OCCT) в России известно довольно мало. В то же время, OCCT предоставляет широчайшие возможности для разработки инженерного программного обеспечения, притом совершенно бесплатно. Принято считать, что бесплатные компоненты серьезно уступают коммерческим продуктам, а потому их применение в реальном производственном секторе может быть чревато разного рода проблемами: от никудышной надежности до неприемлемо низкого быстродействия. Но это не всегда так. В данной статье мы расскажем о библиотеке OCCT, которая успешно совмещает в себе индустриальную зрелость и конкурентную производительность вычислений. Мы сделаем краткий обзор функциональности Open CASCADE Technology, не вдаваясь глубоко в детали и останавливаясь лишь на основных компонентах платформы. Прочитав эту статью, вы получите общее представление о библиотеке OCCT и сферах ее возможного применения.

Несмотря на то, что в каких-то аспектах библиотека Open CASCADE Technology уступает своим коммерческим собратьям (например, в OCCT нет своего открытого решателя ограничений), у нее имеется много сильных сторон, среди которых:

  1. Индустриальная надежность — за свою долгую историю библиотека OCCT была многократно использована в проектах разработки самого разнообразного ПО для таких отраслей промышленности, как автомобилестроение, судостроение, космонавтика, атомная энергетика, и пр. Результатом этого опыта стала постоянно наращиваемая база нерегрессионного тестирования.
  2. Открытость — код библиотеки находится в полном распоряжении программиста. Это дает разработчику известную независимость от компании-поставщика.

Что такое OCCT

Open CASCADE Technology — это прежде всего библиотека геометрического моделирования или, проще говоря, геометрическое ядро. OCCT «исповедует» подход B-Rep (Boundary Representation) для представления трехмерных моделей. Это ставит библиотеку в один ряд с такими продуктами как ACIS, Parasolid, CGM, C3D и RGK. Технически OCCT состоит из множества связанных модулей, отвечающих за выполнение разного рода задач (Рис. 1). Основными компонентами библиотеки являются:

  • Foundation Classes — базовый инструментарий OCCT, включающий «умные указатели», коллекции и все прочие средства, обеспечивающие инфраструктуру библиотеки.
  • Modeling — собственно моделирование.
  • Mesh — встроенные средства для триангуляции CAD-моделей. Как правило, эта функциональность используется для визуализации в 3D.
  • Data Exchange — обмен данными (STEP, IGES и т.д.).
  • Visualization — интегрированная подсистема визуализации CAD-моделей, сеток и произвольных данных приложения.
  • Application Framework (OCAF) — компоненты для быстрой разработки приложений с использованием OCCT.

Рис. 1. Компоненты Open CASCADE Technology.

Историческая справка

Поддержкой и развитием ядра занимается компания с одноименным названием — OPEN CASCADE S.A.S. Головной офис компании находится во Франции, в то время как собственно команда разработчиков трудится в России, в Нижнем Новгороде.

Исторически ОССТ является наследником математического ядра CAD-системы EUCLID, созданием которой занималась компания Matra Datavision, начиная с 1980-х годов. В 1993 году была выпущена платформа CAS.CADE (Computer Aided Software for Computer Aided Design and Engineering), на базе которой велась разработка системы EUCLID QUANTUM — нового поколения EUCLID. Официальный релиз системы EUCLID QUANTUM состоялся в 1996 году. Однако спустя несколько лет (в 1998 году) компания Matra Datavision изменила свою бизнес-модель и сосредоточилась на оказании сервисных услуг. Одновременно с этим, известный гигант Dassault Systemes приобрел у Matra Datavision некоторые продукты из линейки EUCLID (Styler, Machinist и др.).

В 1999 году руководством Matra Datavision было принято историческое решение об открытии исходного кода библиотеки CAS.CADE, которая с этого момента стала именоваться Open CASCADE. Спустя еще некоторое время (в конце 2000 года) Matra Datavision объявила о создании дочерней компании OPEN CASCADE S.A.S. для оказания поддержки и сервиса на базе нового геометрического ядра. В 2003 году компания Matra Datavision была приобретена корпорацией IBM, в то время как OPEN CASCADE S.A.S. оказалась во владении другой французской компании — Principia. Более подробно с историей можно ознакомиться на официальном сайте компании.

День сегодняшний

В последние годы компания OPEN CASCADE S.A.S. прилагает существенные усилия для популяризации ядра OCCT. Так как речь идет о продукте с открытым исходным кодом, а времени с момента его публикации прошло довольно много, то вполне естественно, что вокруг ядра OCCT сформировалось сообщество пользователей. На сегодняшний день каждый заинтересованный человек может поучаствовать в развитии ядра, зарегистрировавшись на портале разработчиков, где находятся официальный баг-трекер ядра, а также Git-репозиторий.

Стоит особенно отметить, что библиотека OCCT доступна под лицензией GNU LGPL. Вы можете свободно использовать это ядро в любом ПО, не раскрывая исходного кода последнего.

Моделирование (Modeling)

Как мы отметили выше, библиотека OCCT реализует граничное представление (B-Rep) объектов в 3D. Для такого представления базовыми являются понятия геометрии и топологии, рассматриваемые в узком смысле. Так, под геометрией обычно понимается математическое описание формы, например, в виде кривых и поверхностей Безье, NURBS-представления и проч. Топология, в свою очередь, есть структура данных, позволяющая связывать геометрические объекты воедино. Рассуждая отвлеченно, можно провести аналогию между топологией B-Rep и классической топологией в математическом смысле. Как известно, математическая топология изучает гомеоморфизмы, то есть преобразования без разрезаний и склеек. С этой точки зрения бублик (Рис. 2, слева) неотличим от «кофейной чашки» (читатель с хорошим воображением может опознать ее на Рис. 2, справа). То же самое справедливо и для топологии в B-Rep: структуры данных, описывающие бублик и чашку, могут быть совершенно идентичными. Вся разница сокрыта в геометрии.

Рис. 2. Модификация тора без изменения топологических структур. Таким образом, одна топологическая структура может быть одинаково хорошо «натянута» на визуально разнородные модели.

С точки зрения программиста, топология представляет собой граф объектов, реализующий смежность вершин (vertices) и ребер (edges) для соседних граней (faces).

Рис. 3. Одна из возможных топологических структур для тора с «заплатками» из Рис. 2.

Структура геометрических и топологических примитивов OCCT во многом соответствует стандарту ISO-10303 (STEP). Особенно полезным будет ознакомление с частью 42 — «Integrated generic resource: Geometric and topological representation». Во всяком случае, знание о том, что CAD-модель представляется не как монолитная форма, а как своего рода «лоскутное одеяло», совершенно необходимо для работы с B-Rep. «Кухня» B-Rep довольно стандартна и не является чем-то присущим исключительно платформе OCCT. От ядра к ядру может меняться лишь набор используемых топологических примитивов, в то время как объекты «грань», «ребро» и «вершина» присутствуют всегда (именно эти объекты связываются с геометрическими примитивами, тогда как остальные играют чисто структурную роль).

Читателя, желающего познакомиться с принципом B-Rep более тесно, мы отсылаем к приложению Analysis Situs. Оно не только позволяет проанализовать модель на уровне отдельных граней и ребер, но и является общедоступным примером использования библиотеки OpenCascade в связке с другими компонентами (в первую очередь, Qt и VTK).

Стоит заметить, что, помимо B-Rep, возможны (и реально используются) другие формы представления CAD-моделей, например, фасетчатые оболочки, воксели (voxel) и CSG (Constructive Solid Geometry). Тем не менее, на сегодняшний день эти способы представления являются нишевыми и используются только для решения строго очерченного круга задач (например, воксели хорошо поддаются параллельной обработке).

Точная B-Rep модель «лучше» дискретных в том смысле, что из нее всегда можно получить как воксели, так и пространственные сетки нужного качества. Обратная задача (получение точной модели по дискретной), как правило, не является тривиальной и сопряжена со многими трудностями — прежде всего, неоднозначностью восстановления геометрии граней и реконструкцией топологии. Поэтому в задачах трехмерного моделирования необходимо иметь некоторое «идеальное» представление объекта в том виде, в котором он замыслен или существует в реальности.

Природа же дискретной модели обычно определяется конкретной задачей. Например, в инженерном анализе (CAE) часто требуется соблюдать некоторые ограничения относительно формы конечных элементов (FEA), причем таковые ограничения могут меняться в зависимости от решателя (например, решатели для задач гидродинамики могут быть чувствительны к тем особенностям дискретной модели, которые игнорируются при анализе прочности и наоборот).

Геометрия в OCCT представляется в стандартном параметрическом виде. Наиболее универсальным подходом к описанию геометрической формы, как известно, является NURBS. Помимо NURBS, в библиотеке OCCT реализованы также поверхности вращения, линейчатые поверхности, кривые и поверхности первого и второго порядка и т.п. На сегодняшний день OCCT поддерживает весь «джентельменский» геометрический набор, за исключением таких технологий, как T-сплайны и поверхности подразделения (subdivision surfaces).

Рис. 4. B-сплайн поверхность в OCCT.

Геометрия обрезается и компонуется при помощи топологических ограничений. При этом мы можем наблюдать, как изменяется параметрический портрет каждой грани. Под «параметрическим портретом» понимается пространство (U, V), на котором определена интересующая нас грань, дополненная параметрическими 2D-кривыми (p-curves). Конфигурация этих кривых вместе с их ориентацией позволяет судить о том, как заданы ребра на грани и где находятся отверстия.

Рис. 5. Параметрический портрет грани с внутренними вырезами.

После краткого знакомства с общими принципами B-Rep, мы рассмотрим основные возможности OCCT, связанные с собственно CAD-моделированием. Для более глубокого изучения доступной функциональности можно обратиться к официальной документации или тестовым приложениям, поставляемым вместе с библиотекой.

Восстановление поверхности по точкам

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

Рис. 6. NURBS-поверхность, восстановленная по облаку точек.

Скиннинг поверхности (тела)

Восстановление формы модели по заданному набору сечений — стандартная задача геометрического моделирования. OCCT предоставляет средства как для поверхностного скиннинга, так и для построения твердотельных объектов с автоматическим восстановлением замыкающих граней.

Рис. 7. Модель, построенная по сечениям.

Кинематическое моделирование

Протягивание профиля вдоль заданной траектории позволяет строить трубки произвольной формы и сечения. Способ ориентации профиля вдоль направляющей кривой задается пользователем.

Рис. 8. Трубка, построенная протягиванием круглого профиля.

Булевы операции

Вычитание, объединение, взятие общего, пересечение тел и поверхностей — все эти фундаментальные алгоритмы реализованы в OCCT и «обкатаны» на множестве реальных инженерных моделей.

Рис. 9. Вычитание тела вращения из призмы.

Рис. 10. Объединение тел.

Рис. 11. Пересечение тел.

Рис. 12. Пересечение оболочек тел.

Поверхности сопряжения

Фаски и скругления также доступны в OCCT. При этом поддерживаются скругления переменного радиуса.

Рис. 13. Скругления на ребрах.

Рис. 14. Скругления переменного радиуса.

Что-то еще?

Пожалуй, наиболее конструктивный способ дать читателю представление о моделизационных возможностях библиотеки OCCT — сослаться на открытую документацию продукта. Заметим лишь, что имеющегося функционала достаточно для решения широчайшего круга задач из области CAD.

Обмен данными

Open CASCADE Technology предоставляет развитые средства для обмена CAD-данными. Поддерживаются такие базовые форматы как STEP, IGES, STL и VRML. Корректность передачи данных при помощи формата STEP обеспечена не только богатой историей применения этого транслятора в индустриальных проектах, но и участием команды разработчиков в «тест-ралли» ProSTEP (1998-1999 годы, TR 8-10), а позднее в CAX-IF (2000-2002 годы, TRJ 3-10).

Надежность трансляторов во многом обеспечивается компонентой Shape Healing, которая служит для пост-обработки восстановленной CAD-модели с целью разрешить нередкие геометрические и топологические проблемы (связанные, например, с самопересечением ребер, отсутствием параметрических кривых, недостаточностью топологической информации и т.д.).

Трансляторы данных позволяют работать не только с геометрической информацией, но и с некоторыми ассоциированными атрибутами. Так, из формата STEP Open CASCADE Technology «умеет» читать цвета и имена компонентов, их вложенность в сборки, слои и некоторые другие свойства.

Рис. 15. STEP-файл с цветами, прочитанный средствами Open CASCADE Technology.

Визуализация

Библиотека Open CASCADE Technology поставляется с собственной подсистемой визуализации, основанной на OpenGL. Наличие такой подсистемы не только позволяет эффективно работать с алгоритмическими средствами библиотеки, но также является серьезным подспорьем для реализации интерактивных 3D-сцен в реальных приложениях САПР.

Рис. 16. Динамическое сечение сцены средствами OpenGL.

Рис. 17. Визуализация методом трассировки лучей (FPS реального времени).

Рис. 18. Визуализация модели насоса методом трассировки лучей с совмещением режимов shading и wireframe.

В нашем распоряжении имеются как низкоуровневые средства для работы с базовой геометрией и топологией (визуализация NURBS вместе с контрольными полигонами и узловыми точками, рендеринг изолиний для оценки скорости и качества параметризации, отрисовка параметрического портрета граней), так и высокоуровневый инструментарий для качественного рендеринга моделей путем трассировки лучей (включая тени, отражения, прозрачность, антиалиасинг и т.д.) в реальном времени. Набор доступных «примочек» постоянно растет. Пожалуй, на сегодняшний день именно эта часть библиотеки развивается наиболее динамично.

Пара слов о развитии

Ни для кого не секрет, что функциональность, связанная с геометрическим моделированием, должна работать очень надежно. Известно, что абсолютно безошибочного программного обеспечения не существует, но бывает недостаточное тестирование. Несмотря на наличие порядка 16000 тестовых сценариев, ошибки в Open CASCADE Technology обнаруживаются регулярно (и это неизбежно). Здесь особенно важно иметь в виду, что OCCT — не «мертвый» продукт. Его развитие обеспечивается согласованной работой нескольких внутренних экспертиз, среди которых моделизационная группа является основной.

Рис. 19 показывает распределение улучшений, сделанных в последних версиях библиотеки OCCT, по их функциональной принадлежности. Нетрудно заметить, что львиная доля всех исправлений и улучшений связана с геометрическим моделированием, т.е. с наиболее технологически сложной и наукоемкой частью библиотеки. Это означает, что даже с исчезновением системы EUCLID, библиотека OCCT динамично развивается в сторону наращивания геометрической функциональности и повышения ее надежности.

Рис. 19. Распределение улучшений и исправлений в OCCT за последние 3 года (версии 6.5.1, 6.5.2, 6.5.3, 6.5.4, 6.5.5, 6.6.0, 6.7.0 и 6.7.1).

Заключение

Open CASCADE Technology — это максимально открытый и совершенно бесплатный продукт, который может существенно расширить ваш инструментарий для разработки наукоемкого ПО. Стоит заметить, что применение этой библиотеки не исчерпывается исключительно задачами САПР. Развитое математическое ядро, подсистема визуализации, компоненты быстрого прототипирования приложений — все это может пригодиться не только разработчику инженерного ПО индустриального качества, но и сотрудникам учебных заведений и институтов в качестве математической «экосистемы» для научных разработок.

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

English version