Создание Дополнения CAM-системы
  • Создание Дополнения CAM-системы
Search Results for

    Show / Hide Table of Contents
    • Creating a CAM-system Add-in
    • Введение
      • Глоссарий
      • Требования
    • Устройство Панели инструментов
      • Описание компонентов
        • Мастер дополнений
        • Файлы дистрибуции
        • Транслятор
        • Файл XML дополнения
        • Файл CAMInfo.ini
        • Утилита CheckLockToolbar
        • Панель инструментов
      • Сценарии взаимодействия
        • Установка Дополнения
        • Удаление Дополнения
        • Импорт из CAD-системы в CAM-систему
        • Импорт CAD-файла в CAM-систему
    • Импорт геометрии в CAM
      • Структура CAD-модели
      • Интерфейсы импорта
      • Подключение STGeomFile.dll
      • Формирование файла SGF
      • Структуры данных SGF
      • Работа со сборкой
      • Работа с деталью
      • Кривые и точки
        • Точка и аналитические кривые
          • 3D-точка
          • Система координат
          • Отрезок
          • Окружность
          • Дуга окружности
          • Эллипс
          • Дуга эллипса
          • Коническая спираль
          • NURBS-кривая
          • Составная кривая
        • Производные кривые
          • Кривая на поверхности
          • Обрезанная кривая
          • Инвертированная кривая
          • Кривая пересечения
          • Граница скругления
        • Параметризация кривых
      • Грань (обрезанная поверхность)
      • Поверхности
        • Аналитические поверхности
          • Плоскость
          • Цилиндр
          • Конус
          • Сфера
          • Тор
          • NURBS-поверхность
          • Полигональная сетка
        • Производные поверхности
          • Поверхность вращения
          • Поверхность выдавливания
          • Транспонированная UV-поверхность
          • Поверхность скругления
          • Эквидистантная поверхность
        • Параметризация поверхностей
      • PMI (Product Manufacturing Information)
        • IPMIGeomThread
      • Устаревшие и неиспользуемые методы

    Формирование файла SGF

    Это точка входа в импорт геометрии — момент, когда управление передаётся Дополнению извне. Возможны два сценария (см. Сценарии взаимодействия):

    • нажатие кнопки Панели инструментов в CAD-системе — пользователь экспортирует открытую модель (Импорт из CAD-системы в CAM-систему);
    • вызов транслятором или CAM-системой при импорте CAD-файла — Дополнение запускается на уже загруженной модели (Импорт CAD-файла в CAM-систему).

    В обоих случаях на вход поступает одно и то же: текущая модель CAD-системы (что сохранять) и путь к выходному файлу (куда). Дальше Дополнение формирует SGF-файл по единой схеме:

    1. подключиться к библиотеке импорта (см. Подключение STGeomFile.dll);
    2. обойти модель CAD сверху вниз и записать её геометрию через sgr (см. разделы «Кривые и точки»–«PMI»);
    3. освободить интерфейсы и выгрузить библиотеку (FreeLibrary).

    Глобальные настройки импорта

    Сразу после StartFile, до записи геометрии, задаются глобальные настройки импорта. Они применяются ко всему файлу и устанавливаются один раз через интерфейс ISTGeomReceiver (sgr, см. Интерфейсы импорта):

    Метод Описание
    SetModelUnits(Units: TST_LinearMeasure; MultScale: STFloat) Установить единицы измерения модели (lm_Millimetre, lm_Centimetre, lm_Decimetre, lm_Metre, lm_Inch, lm_Foot). MultScale — масштабный коэффициент. По умолчанию lm_Millimetre и MultScale = 1.
    SetArcToler(Value: STFloat) Установить допуск аппроксимации дуг. По умолчанию 0.001 (в единицах модели).
    SetImportOption(OptionType: TSTImportOption; OptionValue: boolean) Включить/выключить опцию импорта OptionType (значение OptionValue). Значения TSTImportOption и их назначение — в таблице ниже.

    Опции TSTImportOption управляют импортом контуров граней — прежде всего для инвертированных (с обратной нормалью) и циклических (замкнутых по параметру) поверхностей. Обычно менять их не требуется: значения по умолчанию подходят для большинства случаев, и опции трогают только при специфических проблемах с ориентацией или достраиванием контуров. Возможные значения:

    TSTImportOption Назначение По умолчанию
    ioCreateRectLoops Достраивать внешний контур для циклической грани, если он не задан явно: по параметрической области поверхности добавляется прямоугольная (внешняя) петля. выкл.
    ioInverse3dLoopsForInversedFaces Инвертировать направление обхода 3D-контуров (петель из пространственных рёбер) у граней с инвертированной поверхностью — чтобы сохранялось правило «тело грани слева». вкл.
    ioInverse2dLoopsForInversedFaces То же, но для 2D-контуров, заданных в UV-параметрах поверхности. выкл.

    Метаданные заголовка SGF

    SGF-файл начинается с заголовка: сигнатура, версия формата и JSON-блок метаданных. Заголовок целиком формирует библиотека при CloseFile; Дополнение только дополняет JSON-блок сведениями об источнике — из какого файла, какой CAD-системой и какой версией Дополнения сформирован SGF. CAM-система показывает эти сведения пользователю — например, имя исходной модели. Ключи originalFileName и hostName обязательны, остальные заполняются по возможности.

    Метаданные записываются через sgr.Header.MetaWriter (интерфейс ISGFMetaWriter) строго между StartFile и CloseFile — вне этого окна sgr.Header возвращает null. Корневым JSON-объектом владеет библиотека: пары добавляются сразу, без открытия корня, а каждый BeginObject/BeginArray закрывается парным EndObject/EndArray (как и геометрические Start…/Close…). Методы возвращают boolean — статус успешности:

    Метод Описание
    AddStrPair(AKey, AValue: string) Добавить пару «ключ — строковое значение». Аналогично AddIntPair (integer), AddFltPair (STFloat), AddBolPair (boolean).
    BeginObject(ObjectID: string) / EndObject() Открыть / закрыть вложенный объект с указанным ключом.
    BeginArray(ArrayID: string) / EndArray() Открыть / закрыть вложенный массив с указанным ключом.
    AddStrValue(AValue: string) Добавить значение в открытый массив. Аналогично AddIntValue, AddFltValue, AddBolValue.

    Стандартный набор ключей приведён в таблице. Имена в таблице — это ключи: CAM-система читает значения именно по ним, поэтому записывать их нужно в точности как указано, не переименовывая. Собственные ключи добавлять можно — версия формата от этого не меняется, незнакомые ключи при чтении игнорируются.

    Ключ Содержимое Обязательность
    originalFileName Полный путь к файлу проекта CAD-системы (см. Панель инструментов). обязательный
    hostName Значение тега HostApplication — строковый идентификатор CAD-системы, по которому CAM-система находит Дополнение (см. Файл XML дополнения и Глоссарий). обязательный
    sourceApp Вложенный объект: name — имя исполняемого файла CAD-системы, processFileName — его полный путь, version — версия CAD-системы. необязательный
    toolbarLibrary Вложенный объект: name, path, version — имя, путь и версия модуля Дополнения. необязательный

    Ключ _generated зарезервирован: эту секцию (timeUTC — время формирования файла, library — версия библиотеки импорта, processFileName — путь процесса, сформировавшего файл) библиотека дописывает сама при CloseFile.

    Пример записи (вызов метода — в примере точки входа импорта) и итоговый JSON-блок:

    // Метаданные заголовка: исходный файл, CAD-система, модуль Дополнения
    void WriteHeaderMeta(CADDocument doc)
    {
        var mw = sgr.Header.MetaWriter;
        mw.AddStrPair("originalFileName", doc.FileName);
        mw.AddStrPair("hostName", fHost); // тег HostApplication из Файла XML дополнения
        mw.BeginObject("sourceApp");
            mw.AddStrPair("name", "mycad.exe");
            mw.AddStrPair("processFileName", cadExePath);
            mw.AddStrPair("version", cadVersion);
        mw.EndObject();
        mw.BeginObject("toolbarLibrary");
            mw.AddStrPair("name", "MyCADToolbar.dll");
            mw.AddStrPair("path", toolbarPath);
            mw.AddStrPair("version", toolbarVersion);
        mw.EndObject();
    }
    
    {
      "originalFileName": "C:\\Models\\part.mcad",
      "hostName": "MyCAD",
      "sourceApp":      { "name": "mycad.exe", "processFileName": "C:\\MyCAD\\mycad.exe", "version": "3.2.1" },
      "toolbarLibrary": { "name": "MyCADToolbar.dll", "path": "C:\\MyCAD\\Addins\\MyCADToolbar.dll", "version": "1.4.0.12" },
      "_generated":     { "timeUTC": "2026-07-15T10:30:00Z", "library": "STGeomFile 1.0.0.0", "processFileName": "C:\\MyCAD\\mycad.exe" }
    }
    

    Пример: точка входа импорта

    // Точка входа импорта. На вход — текущая модель CAD-системы и путь к выходному SGF-файлу.
    bool ExportToSGF(CADDocument doc, string outFilePath)
    {
        if (!ConnectToGeomFiler(GetLibraryPath()))
            return false;
    
        bool ok = false;
        try
        {
            sgf.StartFile(outFilePath);         
            try
            {
                // метаданные заголовка (см. «Метаданные заголовка SGF»)
                WriteHeaderMeta(doc);
                            
                // sgr.SetModelUnits(TST_LinearMeasure.lm_Metre, 1.0);
                // sgr.SetArcToler(0.005); 
                // sgr.SetImportOption(TSTImportOption.ioCreateRectLoops, true);            
    
                // UnitMatrix3D — единичная матрица (корень без смещения)            
                if (!doc.IsDetail)
                    SaveAssembly(doc.Assembly, UnitMatrix3D);   
                else
                    SavePart(doc.Part, UnitMatrix3D);          
            }
            finally
            {
                sgf.CloseFile();
            }
            ok = true;
        }
        catch
        {
            ok = false;
        }
        finally
        {
            sgr = null;
            sgf = null;
            if (hDLL != IntPtr.Zero) { FreeLibrary(hDLL); hDLL = IntPtr.Zero; }
        }
        return ok;
    }
    
    In this article
    Back to top Generated by DocFX