Конструктора и инженеры привыкли работать в КОМПАС, вручную строя чертежи, 3D-модели и сборки. Однако система КОМПАС предоставляет богатый набор функций, позволяющих автоматизировать их работу. При желании весь процесс построения сложного чертежа, 3D-модели или сборки можно свести к нажатию на одну кнопку. Правда для этого придется поработать нам, программистам.

В рамках одной статьи невозможно описать все возможности КОМПАС по автоматизации. Для этого не хватит даже книги. К счастью для нас в комплект поставки КОМПАС входит документация, заголовочные файлы для различных языков программирования и ряд примеров.



Рассказывает Сергей Александрович Норсеев — инженер-программист, АО «ВНИИ «Сигнал», Ковров. Автор книги «Разработка приложений под КОМПАС в Delphi»

Документация и примеры.

Документация оформлена в виде одного chm файла. Он расположен в каталоге SDK каталога КОМПАС. На моем домашнем компьютере, например, полный путь к нему выглядит так: «C:\Program Files\ASCON\KOMPAS-3D v17\SDK\SDK.chm». На рисунке ниже представлено содержимое этого файла.



В этом файле представлено полное описание всех интерфейсов, их свойств и методов. В данной статье мы дадим лишь краткий обзор взаимодействия с КОМПАС посредством COM интерфейсов версии 5.

Дополнительно к документации в комплект поставки КОМПАС входит большое количество примеров программирования под эту систему на разных языках программирования. Они расположены в том же каталоге, что и документация. Открыв каталог «SDK», вы увидите несколько архивов, названия которых соответствуют языкам программирования: «Basic», «C#», «С++» и «Pascal». В них и располагаются примеры. Мы будем использовать язык С++, распакуйте соответствующий архив в любое удобное вам место.



Заголовочные файлы

Перед началом работы нам понадобятся заголовочные файлы. Они находятся в каталоге «SDK\Include\». Нам нужны следующие файлы.

«Ks_TLB.h» и «Ks_TLB.cpp». Они содержат объявления всех основных интерфейсов. Это основные файлы.

«ksConstants.h» и «ldefin2D.h». Это необязательные файлы, задающие различные константы.
После того как эти файлы подключены к нашему проекту, мы можем начать работать.



Подключение к КОМПАСу

Сама система КОМПАС в «API интерфейсов версии 5» описывается интерфейсом KompasObject. Соответствующий ему COM-объект задается строкой «KOMPAS.Application.5». Ниже приводится пример подключения к КОМПАСу.

KompasObjectPtr kompas;
//Запускаем КОМПАС
kompas.CreateInstance(L"KOMPAS.Application.5");
//Делаем его видимым
kompas->Visible = true;
//Отключаемся от него
kompas.Unbind();

Тип данных «KompasObjectPtr» задает указатель на интерфейс KompasObject.

В результате работы данной программы на экране появится главное окно программы КОМПАС. В ней не будет открыто ни одного документа.



Для закрытия программы КОМПАС используется метод Quit() интерфейса KompasObject. Одним из самых важных методов интерфейса KompasObject является метод GetParamStruct. Он возвращает указатель на интерфейс параметров объекта того или иного типа. Запрашиваемый тип объекта передается в метод в качестве значения единственного параметра. Всего, согласно документации КОМПАС, через данный метод можно получить 129 интерфейсов параметров для объектов различных типов.

Чертеж и фрагмент

Создание чертежа и фрагмента происходит в два этапа. На первом этапе подготавливаются параметры создаваемого документа. На втором – создается сам документ. Такой двухэтапный подход используется при создании практически всех объектов в системе КОМПАС.

Параметры документа описываются интерфейсом ksDocumentParam. Для получения указателя на него используется метод GetParamStruct интерфейса KompasObject с параметром ko_DocumentParam. Главным свойством этого интерфейса является свойство type, в котором указывается тип описываемого данным интерфейсом документа.

Чертеж и фрагмент описываются интерфейсом ksDocument2D. Получить на него указатель можно с помощью метода Document2D интерфейса KompasObject. Ниже приводится пример программы, создающей новый чертеж.

KompasObjectPtr kompas;
//Запускаем КОМПАС
kompas.CreateInstance(L"KOMPAS.Application.5");

//Подготавливаем параметры документа
DocumentParamPtr DocumentParam;
DocumentParam=(DocumentParamPtr)kompas->GetParamStruct(ko_DocumentParam);
DocumentParam->Init();
DocumentParam->type = lt_DocSheetStandart; //Тип: чертеж

//Создаем чертеж
Document2DPtr Document2D;
Document2D = (Document2DPtr)kompas->Document2D();
Document2D->ksCreateDocument(DocumentParam);

//Делаем КОМПАС видимым
kompas->Visible = true;
kompas.Unbind();

В результате работы этой программы на экране появится главное окно программы КОМПАС с новым чертежом. Данный чертеж не будет иметь ни рамки, ни основной надписи, так как мы их не настроили.



Для создания фрагмента в поле type интерфейса ksDocumentParam необходимо указать значение lt_DocFragment. Во всем остальном процесс создания нового фрагмента аналогичен процессу создания чертежа.

Спецификация

Создание спецификации похоже на создание чертежа и фрагмента. Здесь тоже используется интерфейс ksDocumentParam. Но есть и ряд отличий. Во-первых, спецификация описывается интерфейсом ksSpcDocument. Указатель на этот интерфейс возвращает метод SpcDocument() интерфейса KompasObject. Во-вторых, в случае создания спецификации необходимо указать полный путь к библиотеке стилей. Если он не указан, то система не создаст спецификацию. Библиотека стилей – это файл «graphic.lyt». Он находится в каталоге Sys\ каталога КОМПАС. Ниже приводится пример программы, создающей спецификацию.

//Запускаем КОМПАС
KompasObjectPtr kompas;
kompas.CreateInstance(L"KOMPAS.Application.5");

//Подготавливаем параметры документа
DocumentParamPtr DocumentParam;
DocumentParam=(DocumentParamPtr)kompas->GetParamStruct(ko_DocumentParam);
DocumentParam->Init();
DocumentParam->type = lt_DocSpc; //Тип: спецификация

//Формируем полный путь к библиотеке стилей
BSTR str;
str = kompas->ksSystemPath(sptSYSTEM_FILES);
SysReAllocString(&str, SysAllocString(L"\graphic.lyt"));

//Устанавливаем путь к библиотеке стилей
SheetParPtr SheetPar;
SheetPar = (SheetParPtr)DocumentParam->GetLayoutParam();
SheetPar->Init();
SheetPar->layoutName = str;

//Создаем спецификацию
SpcDocumentPtr SpcDocument;
SpcDocument = (SpcDocumentPtr)kompas->SpcDocument();
SpcDocument->ksCreateDocument(DocumentParam);

//Делаем КОМПАС видимым
kompas->Visible = true;
kompas.Unbind();

Сделаю два важных замечания к приведенному выше примеру.

1. Для получения пути к каталогу Sys мы используем метод ksSystemPath интерфейса KompasObject. Данный метод возвращает путь к заданному каталогу КОМПАС.

2. КОМПАС, впрочем, как и все объекты COM, оперирует строками типа BSTR. Эти строки, точно так же, как и строки типа wchar_t*, состоят из символов Unicode, но имеют более сложное строение. Попытка передать в КОМПАС обычную строку Unicode (wchar_t*) закончится ошибкой.

3. Путь к библиотеке стилей указывается в интерфейсе ksSheetPar. Данный интерфейс задает параметры оформления чертежа и/или спецификации.

В результате работы этой программы на экране появится окно КОМПАСа с созданной в нем спецификацией.



Деталь и сборка

Деталь и сборка в КОМПАС описываются интерфейсом ksDocument3D. Точнее говоря, этот интерфейс описывает файл, содержащий деталь или сборку. Для получения указателя на интерфейс ksDocument3D используется метод Document3D() интерфейса KompasObject. Ниже приводится пример создания детали.

//Запускаем КОМПАС
KompasObjectPtr kompas;
kompas.CreateInstance(L"KOMPAS.Application.5");

//Создаем деталь
Document3DPtr Document3D;
Document3D = (Document3DPtr)kompas->Document3D();
Document3D->Create(false, true);

//Делаем КОМПАС видимым
kompas->Visible = true;
kompas.Unbind();

Метод Create интерфейса ksDocument3D имеет два входных параметра. Они перечислены ниже.

1. Признак режима редактирования документа (TRUE – невидимый режим; FALSE – видимый).
2. Тип создаваемого файла (TRUE – деталь; FALSE – сборка).

Отсюда видно, что для создания сборки в приведенном выше примере нужно всего лишь изменить значение второго параметра в методе Create.



Заключение

В данной статье я показал небольшую часть вершины айсберга под названием «взаимодействие с системой КОМПАС посредством COM интерфейсов». Я лишь показал, как подключаться к КОМПАСУ и как создавать документы всех основных видов (чертеж, фрагмент, спецификация, деталь и сборка). Эти документы создаются без содержимого. О том, как их наполнять будет рассказано в следующих статьях. Следите за новостями блога.

Сергей Норсеев, автор книги «Разработка приложений под КОМПАС в Delphi».
Поделиться с друзьями
-->

Комментарии (6)


  1. dee3mon
    22.05.2017 22:14

    Когда пытаешься писать автоматизацию к САПРам хоть сколько-нибудь сложнее базовых примеров, всегда вылезает две основные проблемы:
    1. Как в справке найти то, что нужно — даже если прекрасно знаешь интересующий инструмент в собственно САПРе, то его описание в справке по автоматизации может быть крайне невнятным; а если нет хоть сколько-нибудь наглядных примеров и всяких перекрестных ссылок в документации, то в ней вообще можно никогда ничего полезного не найти
    2. Как правильно организовать отладку — надо ли ставить внешние компиляторы/интерпретаторы или можно обойтись идущим в основной поставке; если пользоваться встроенными интрументами, то как отлавливать текущее состояние переменных или там скакать по брейпойтам или как отслеживать ошибки и тд
    Собсвенно вопрос: как оно в Компасе с этими проблемами?


    1. kompas_3d
      22.05.2017 22:34

      1. Примерно как везде наверно. У нас есть SDK в папке с программой, если там чего-то нет, можно спросить на форуме:
      http://forum.ascon.ru/index.php?board=4.0
      Также надеемся, что этот цикл статей поможет лучше разобраться с API.
      2. Нужны внешние. Сергей использует C++ Builder 6.


  1. PKEv
    23.05.2017 12:06

    Компас уже 17-й версии получается сохранил поддержку api5?
    А третьей версии api не появилось? :)


    1. kompas_3d
      23.05.2017 12:09

      Сохранил.
      КОМПАС-3D v17 как и предыдущие версии поддерживает:
      — API интерфейсов версии 7
      — API интерфейсов версии 5
      — API экспортныx функций


  1. xRay
    23.05.2017 13:07

    В API появилась поддержка режима работы «сервер» когда ни каких окон Компас не отображается, но можно создавать документы или к примеру заполнять спецификации?


    1. kompas_3d
      23.05.2017 16:20

      Поддержка «слепого» режима есть и была раньше.