Структура CAD-модели
Это условная (вымышленная) структура. Классы
CADxxx, описанные ниже, — не часть API CAM-системы и не относятся к какой-либо конкретной CAD-системе. Это упрощённая модель данных «гипотетической» CAD, введённая лишь для того, чтобы в примерах кода было видно, откуда берутся исходные данные и как они отображаются на вызовы SGF. В реальном Дополнении на её месте будут типы вашей CAD-системы (или её API), а логика преобразования останется той же.
CAD-модель — это иерархия связанных объектов: от документа в целом до отдельных точек. Импорт в SGF, по сути, и есть обход этой иерархии с трансляцией каждого объекта в соответствующий вызов ISTGeomReceiver.
Сущности модели (сверху вниз — от сборочного уровня к геометрическим примитивам):
| Сущность | Что это | Импортируется через |
|---|---|---|
| CADDocument | Корень модели — весь CAD-документ. Флаг IsDetail определяет содержимое: деталь (CADPart) либо сборка (CADAssembly). |
дерево модели |
| CADAssembly | Сборка: дерево компонентов. Для каждого компонента флаг IsDetail выбирает деталь (CADPart) или вложенную сборку (CADAssembly); положение задаётся матрицей (CADMatrix). |
Blocks / инстансы |
| CADMatrix | Матрица размещения: положение и ориентация компонента сборки в системе координат родителя. | матрица размещения |
| CADPart | Деталь: одно или несколько тел плюс атрибуты (имя, цвет). | детали и тела |
| CADBody | Тело: оболочка из граней, описывающая топологию (грани, рёбра, вершины). | ComboSolid |
| CADFace | Грань: участок несущей поверхности, ограниченный контурами. | обрезанная поверхность |
| CADSurface | Несущая поверхность грани: плоскость, цилиндр, конус, сфера, тор, NURBS, сетка и др. | поверхности |
| CADLoop | Контур грани — замкнутая последовательность рёбер. Внешний контур задаёт границу, внутренние — отверстия. | петли грани |
| CADEdge | Ребро: участок несущей кривой (CADCurve) между двумя вершинами (CADVertex). |
обрезанная кривая / ребро |
| CADVertex | Вершина — концевая точка ребра; её положение задаётся точкой (CADPoint). |
тело (ComboSolid) |
| CADCurve | Несущая кривая ребра: отрезок, дуга, эллипс, NURBS, кривая пересечения и др. | кривые |
| CADPoint | Точка в 3D (координаты X/Y/Z) — базовый примитив: положение вершин (CADVertex), контрольные и опорные точки кривых и поверхностей. |
как параметр прочих вызовов |
Связи между сущностями:
- CADDocument → CADPart | CADAssembly — по флагу
IsDetail: документ — это либо одна деталь, либо сборка; - CADAssembly → CADPart | CADAssembly — по флагу
IsDetailкомпонент сборки — деталь либо вложенная сборка (отсюда рекурсия дерева); - CADAssembly → CADMatrix — сборка хранит матрицу размещения компонента;
- CADPart → CADBody — деталь состоит из тел;
- CADBody → CADFace — тело ограничено набором граней;
- CADFace → CADSurface (1) + CADLoop (1..*) — у грани одна несущая поверхность и один или несколько контуров;
- CADLoop → CADEdge — контур состоит из рёбер;
- CADEdge → CADCurve (1) + CADVertex (2) — ребро опирается на одну несущую кривую и ограничено двумя вершинами;
- CADVertex → CADPoint — вершина задаётся точкой-положением;
- CADCurve / CADSurface → CADPoint — точки служат контрольными (для NURBS) и опорными.
В последующих главах примеры оформлены как методы SaveXxx, которые получают такой CADxxx-объект и транслируют его в SGF.