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

Вопросы от читателей, часть 3

/ Просмотров: 2252
Следуя примеру из документации OCCT (Tutorial) я обнаружил, что функция MakeBottle возвращает объект типа TopoDS_Shape, который представляет собой структуру данных модели. Но мне непонятно, каким образом получить геометрические данные из объекта. По-видимому, существует механизм извлечения геометрических данных, но какой именно?

OpenCascade, в отличие от, например, ACIS, очень скрупулезно отделяет геометрию от топологии. На практике это проявляется в том, что геометрические примитивы (наследники Geom_Geometry) нельзя получить из топологических носителей (наследников TopoDS_Shape) напрямую. Верно и обратное: из геометрии нет прямого доступа к топологии. Чтобы извлечь геометрию граничного элемента (грани, ребра или вершины) нужно использовать специальный инструмент: BRep_Tool. Например, в нем есть метод, возвращающий поверхность: BRep_Tool::Surface().

Взять геометрию всей модели «сразу» — нет, так не получится. Геометрия распределена по граничным элементам (TopoDS_Face, TopoDS_Edge и TopoDS_Vertex). Все прочие топологические элементы геометрии не содержат, но они, тем не менее, нужны, так как их вложенность друг в друга формирует структуру модели. Например, «сплошное тело» (TopoDS_Solid) может содержать несколько «оболочек» (TopoDS_Shell).

Правильно ли я понимаю, что определение объекта TopoDS_Shape эквивалентно определению Solid в топологии модели OCCT?

Нет, TopoDS_Shape — это абстрактный базовый тип для всех топологических элементов. По сути это указатель на абсолютно любую модель B-Rep в вашем приложении. Посмотрите на первую диаграмму по этой ссылке. Каждый светло-серый прямоугольник в ней отвечает тому или иному наследнику TopoDS_Shape.

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

Комментариев: 1 RSS

Посты Roman Lygin о топологии в Open Cascade (часть 1 из 5):

http://opencascade.blogspot.ru/2009/02/topology-and-geometry-in-open-cascade.html