Создание Дополнения 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
      • Устаревшие и неиспользуемые методы

    Подключение STGeomFile.dll

    С помощью STGeomFile.dll осуществляется доступ к интерфейсу ISTGeomFiler. Библиотека расположена в составе Дополнения (см. Файлы дистрибуции). Также понадобятся два TLB-файла — они описывают интерфейсы (ISTGeomFiler, ISTGeomReceiver) и перечисления, что даёт типизированный доступ к API:

    • STGeomApiTypes.tlb;
    • STTypes.tlb.

    Библиотека экспортирует функцию CreateGeomFiler, которая возвращает ссылку на интерфейс ISTGeomFiler.

    Пример загрузки библиотеки.

    [DllImport("kernel32.dll")]
    public static extern IntPtr LoadLibrary(string dllToLoad);
    [DllImport("kernel32.dll")]
    public static extern IntPtr GetProcAddress(IntPtr hModule, string procedureName);
    [DllImport("kernel32.dll")]
    public static extern bool FreeLibrary(IntPtr hModule);
    
    // Сигнатура экспортируемой функции CreateGeomFiler
    [UnmanagedFunctionPointer(CallingConvention.StdCall)]
    private delegate ISTGeomFiler TCreateGeomFiler();
    
    private IntPtr            hDLL;
    protected ISTGeomFiler    sgf;   // формирование файла: StartFile / CloseFile (см. «Формирование файла SGF»)
    protected ISTGeomReceiver sgr;   // запись геометрии: методы в разделах геометрии и далее
    
    public bool ConnectToGeomFiler(string DLLPath)
    {
        hDLL = IntPtr.Zero;
        sgf  = null;
        sgr  = null;
    
        // освобождает уже захваченные ресурсы и сигнализирует о неудаче
        bool Fail()
        {
            sgr = null;
            sgf = null;
            if (hDLL != IntPtr.Zero) { FreeLibrary(hDLL); hDLL = IntPtr.Zero; }
            return false;
        }
    
        try
        {
            if (!File.Exists(DLLPath))
                return Fail();
    
            hDLL = LoadLibrary(DLLPath);
            if (hDLL == IntPtr.Zero)
                return Fail();
    
            IntPtr pCreateGeomFiler = GetProcAddress(hDLL, "CreateGeomFiler");
            if (pCreateGeomFiler == IntPtr.Zero)
                return Fail();
    
            var CreateGeomFiler = (TCreateGeomFiler)Marshal.GetDelegateForFunctionPointer(
                pCreateGeomFiler, typeof(TCreateGeomFiler));
    
            sgf = CreateGeomFiler();
            if (sgf == null)
                return Fail();
    
            // тот же объект отдаёт интерфейс записи геометрии (в C# QueryInterface — это приведение типа)
            sgr = sgf as ISTGeomReceiver;
            if (sgr == null)
                return Fail();
    
            return true;
        }
        catch
        {
            return Fail();
        }
    }
    

    Таким образом, sgf и sgr — это один и тот же COM-объект (см. Интерфейсы импорта).

    In this article
    Back to top Generated by DocFX