Вопросы от читателей, часть 3
OpenCascade, в отличие от, например, ACIS, очень скрупулезно отделяет геометрию от топологии. На практике это проявляется в том, что геометрические примитивы (наследники Geom_Geometry) нельзя получить из топологических носителей (наследников TopoDS_Shape) напрямую. Верно и обратное: из геометрии нет прямого доступа к топологии. Чтобы извлечь геометрию граничного элемента (грани, ребра или вершины) нужно использовать специальный инструмент: BRep_Tool. Например, в нем есть метод, возвращающий поверхность: BRep_Tool::Surface().
Взять геометрию всей модели «сразу» — нет, так не получится. Геометрия распределена по граничным элементам (TopoDS_Face, TopoDS_Edge и TopoDS_Vertex). Все прочие топологические элементы геометрии не содержат, но они, тем не менее, нужны, так как их вложенность друг в друга формирует структуру модели. Например, «сплошное тело» (TopoDS_Solid) может содержать несколько «оболочек» (TopoDS_Shell).
Нет, TopoDS_Shape — это абстрактный базовый тип для всех топологических элементов. По сути это указатель на абсолютно любую модель B-Rep в вашем приложении. Посмотрите на первую диаграмму по этой ссылке. Каждый светло-серый прямоугольник в ней отвечает тому или иному наследнику TopoDS_Shape.
В целом, похоже, будет нелишне расписать модель данных OpenCascade более детально. Постараюсь сделать это в одной из будущих заметок.
2017-05-17 в 20:17:14
Посты Roman Lygin о топологии в Open Cascade (часть 1 из 5):
http://opencascade.blogspot.ru/2009/02/topology-and-geometry-in-open-cascade.html