Интерфейсы импорта
Импорт геометрии опирается на два интерфейса одного и того же COM-объекта библиотеки STGeomFile.dll (как его получить — см. Подключение STGeomFile.dll): ISTGeomFiler (sgf) управляет самим файлом, а ISTGeomReceiver (sgr) записывает в него геометрию.
ISTGeomFiler
Указатель на интерфейс ISTGeomFiler возвращает экспортируемая функция CreateGeomFiler (см. Подключение STGeomFile.dll); этот интерфейс управляет файлом:
| Метод | Описание |
|---|---|
StartFile(FileName: string) |
Начать формирование SGF-файла (открыть на запись). Вложенный вызов StartFile при уже открытом файле недопустим. |
CloseFile() |
Закрыть SGF-файл. Именно при этом вызове файл физически формируется (записывается на диск). |
OpenFile(FileName: string; Receiver: ISTGeomReceiver) |
Открыть SGF-файл на чтение; команды воспроизводятся в указанный ISTGeomReceiver. Данный метод используется CAM-системой. |
Порядок работы с файлом описан в главе Формирование файла SGF.
ISTGeomReceiver
Основной интерфейс импорта: принимает геометрию в виде последовательности команд. Все методы возвращают boolean — статус успешности (в сигнатурах далее он опущен). Объекты создаются под уникальным строковым идентификатором ID — по нему на них ссылаются последующие вызовы. Типы параметров (STFloat, TST3DPoint, TST2DPoint и др.) описаны в Структуры данных.
Локальная система координат объекта обычно задаётся тройкой точек: vT — положение (начало координат), vZ — ось Z, vX — ось X. Если ось Y среди параметров не передаётся, то она вычисляется внутри как векторное произведение vZ × vX, что автоматически даёт правую систему координат. При этом vZ и vX должны быть взаимно перпендикулярны, иначе ориентация осей определяется неоднозначно.
Часть методов парные: метод с префиксом Start… открывает составной объект, внутри которого вызываются вложенные методы (например, добавление точек, рёбер, узлов), а в конце объект обязательно закрывается одноимённым методом с префиксом Close…. Например: StartNurbsCurve → SetNurbsCurveControlPoint / SetNurbsCurveKnot / … → CloseNurbsCurve; StartFace → StartFaceLoop → AddFaceEdge2d → CloseFaceLoop → CloseFace. Такие пары могут быть вложенными. Если открытый Start… не закрыть парным Close…, в лучшем случае объект сформируется некорректно, а в худшем — структура файла SGF будет нарушена, а чтение невозможно.
Опорный объект — раньше зависимого. Независимо от порядка изложения, при записи в SGF каждый объект должен быть создан раньше того, что на него ссылается: кривая — раньше ребра, поверхность — раньше грани, грани — раньше тела. В примерах это обеспечивается рекурсией: метод верхнего уровня (
SaveClosedShell,SaveTrimmedFace, …) сначала сохраняет дочерние объекты, а затем оформляет составной объект поверх них.