1.4 Компас 3D Основные компоненты «Компас 3D» — собственно система трехмерного твердотельного моделирования, универсальная система автоматизированного проектирования «Компас – График» и модуль проектирования спецификаций.
Система «Компас–3D» предназначена для создания трехмерных ассоциативных моделей отдельных деталей и сборочных единиц, содержащих как оригинальные, так и стандартизованные конструктивные элементы.
Ключевой особенностью «Компас–3D» является использование собственного математического ядра и параметрических технологий, разработанных специалистами АСКОН.
1.5 Обзор API Компас 3D Организация взаимодействия расчетного модуля и САПР представляет большую сложность. Большинство современных САПР не поддерживают СОМ–технологию, что затрудняет управление объектами из внешней программы. Как правило, такое управление осуществляется при помощи технологии API (Application Programming Interface) [4].
API–технология предоставляет программисту набор процедур и функций для управления САПР, но не дает прямого доступа к свойствам и методам объектов внутри САПР.
Взаимодействие внешнего приложения или подключаемого модуля с системой КОМПАС (с функциями моделирования, математическими функциями ядра системы и пр.) осуществляется посредством API [5]. В КОМПАС на данный момент существуют API двух версий: API 5 и API 7. API 7 – это не усовершенствованный и не более новый вариант программных интерфейсов пятой версии. На самом деле обе версии реализуют различные функции системы и взаимно дополняют друг друга. Отсюда очевидно, что обе версии программных интерфейсов в равной мере поддерживаются и развиваются с учетом самих изменений в системе.
В основном, для создания полноценных подключаемых модулей достаточно методов и свойств интерфейсов API 5.
Главным интерфейсом API системы КОМПАС является KompasObject. Получить указатель на этот интерфейс можно с помощью экспортной функции CreateKompasObject(). Методы этого интерфейса, главные из которых представлены в таблице1.2, реализуют наиболее общие функции работы с документами системы, системными настройками, файлами, а также дают возможность получить указатели на другие интерфейсы (интерфейсы динамического массива, работы с математическими функциями, библиотек моделей или фрагментов и различных структур параметров определенного типа).
Таблица 1.2 – Методы интерфейса KompasObject
Метод
| Описание
| ActiveDocument2D
| Позволяет получить указатель на активный графический документ
| ActiveDocument3D
| Позволяет получить указатель на активный трехмерный документ
| Document2D
| Позволяет получить указатель на интерфейс графического документа (чертежа или фрагмента)
| Document3D
| Позволяет получить указатель на интерфейс трехмерного документа (детали или сборки)
| GetDynamicArray
| Возвращает указатель на интерфейс динамического массива
| GetMathematic2D
| Возвращает указатель на интерфейс для работы с математическими функциями в графическом документе
| GetParamStruct
| Позволяет получить интерфейс структуры параметров объекта определенного типа (параметры прямоугольника, эллипса и т.д.)
| ksAttachKompasLibrary
| Подключает библиотеку (добавляет ее в пункт главного меню Библиотеки)
| ksChoiceFile
| Выводит диалог для выбора файла для чтения
| ksDetachKompasLibrari
| Отключает библиотеку
| ksDrawKompasDocument
| Отрисовывает КОМПАС-документ, присланный из внешней программы или прикладного модуля, как слайд в указанном окне
| Продолжение табл.1.2
ksEnableTaskAccess
| Позволяет разрешить или запретить доступ пользователя к окну КОМПАС (применяется для работ библиотек)
| ksError
| Выдает сообщение об ошибке
| ksGetApplication7
| Возвращает указатель на интерфейс приложения API 7
| ksGetDocOptions
| Позволяет получить определенную структуру параметров настроек текущего документа
| ksSetDocOptions
| Позволяет установить определенную структуру параметров настроек текущего документа
| ksGetHWindow
| Позволяет получить дескриптор главного окна КОМПАС
| ksGetSysOptions
| Позволяет получить системные настройки по определенному типу
| ksSetSysOptions
| Позволяет установить системные настройки по определенному типу
| ksGetSystemVersion
| Позволяет получить номер версии системы
| ksMessage
| Выдает сообщение произвольного содержания в окне КОМПАС
| ksPrintKompasDocument
| Выполняет печать КОМПАС-документа
| ksPrintPreviewWindow
| Запускает окно просмотра документа перед печатью
| ksResultNULL
| Обнуляет результат, если ошибка не фатальна
| ksSaveFile
| Выдает диалог сохранения файла
| ksSystemPath
| Позволяет получить системный путь определенного типа
| Quit
| Закрывает КОМПАС
| SpsDocument
| Дает возможность получить указатель на интерфейс документа-спецификации
| Описание прототипов всех приведенных функций, а также других методов, составляющих интерфейс KompasObject, можно найти в справке по API КОМПАС. Файл этой справки размещается в каталоге SDK, находящейся в папке, в которой установлен КОМПАС.
Другой важный интерфейс API 5 – интерфейс документа модели ksDocument3D.
Получить его можно с помощью методов интерфейса KompasObject:
ActiveDocument3D – для уже существующего и активного в данный момент документа;
Document3D – если планируется создавать новый трехмерный документ.
Графические документы имеют собственный интерфейс – ksDocument2D, со своими специфическими свойствами и методами.
Свойства (члены данных) интерфейса ksDocument3D позволяют динамически управлять настройками любого трехмерного документа системы из модуля. Наиболее используемые приведены в таблице 1.3.
Таблица 1.3 – Свойства интерфейса ksDocument3D
Свойство
| Тип данных
| Описание
| author
| WideString
| Имя автора документа
| DrawMode
| Integer
| Тип отображения модели (каркас, безвидимых линий и др.)
| fileName
| WideString
| Имя файла документа модели
| hideAllAxis
| WordBool
| Скрыть/показать конструктивные оси
| hideAllPlace
| WordBool
| Скрыть/показать начала координат
| hideAllPlanes
| WordBool
| Скрыть/показать плоскости
| hideAllSketches
| WordBool
| Скрыть/показать эскизы
| hideAllSurface
| WordBool
| Скрыть/показать поверхности
| hideAllThreads
| WordBool
| Скрыть/показать изображения резьбы
| invisibleMode
| WordBool
| Режим редактирования документа (видимый или невидимый)
| perspective
| WordBool
| Признак отображения перспективной модели
| reference
| Integer
| Указатель документа (детали или сборки)
| shadedWireframe
| WordBool
| Полутоновое изиображения с каркасом модели
| Методы этого интерфейса позволяют программно управлять трехмерным документом, как сборкой и ее компонентами, так и отдельной деталью. Важно: именно управлять самим документом, но не выполнять в нем трехмерные операции! Методы, которые могут пригодиться при программировании подключаемых модулей, собраны в таблице 1.4.
Таблица 1.4 – Методы интерфейса ksDocument3D
Метод
| Описание
| Close
| Позволяет закрыть документ
| Create
| Позволяет создать пустой документ (деталь или сборку)
| CreatePartFromFile
| Позволяет создать деталь в сборке
| CreatePartInAssembly
| Возвращает указатель на интерфейс детали, создаваемой в сборке
| DeleteObject
| Позволяет удалить трехмерный объект (деталь, операцию, сопряжения и др.)
| EntityCollection
| Позволяет получить указатель на массив элементов, выбранных в документе
| GetObjParam
| Позволяет прочитать парметры объекта в структуру данных (по определенному типу параметров)
| ksSetObjParam
| Позволяет установить параметры объекта в структуру данных (по определенному типу параметров)
| GetObjectType
| Позволяет получить тип трехмерного объекта
| GetPart
| Возвращает указатель на интерфейс компонента (детали или подсборки) в сборке
| Продолжение табл.1.4
IsActive
| Позволяет проверить активен ли документ
| IsDetail
| Возвращает TRUE, если трехмерный документ является деталью
| Open
| Позволяет запустить редактирование документа-модели
| PartCollection
| Возвращает указатель на интерфейс динамического массива компонентов, вставленных в сборку
| RebuildDocument
| Позволяет перестроить документ
| Save
| Позволяет сохранить трехмерный документ в файл с именем ksDocument3D::fileName
| SaveAs
| Дает возможность сохранить трехмерный документ под указанным именем
| SetActive
| Позволяет активировать документ
| SetPartFromFile
| Позволяет вставить в сборку компонент из файла или библиотеки модели
| UpdateDocumentParam
| Позволяет обновить настройки докумнта
| Важнейший из перечисленных в таблице 1.4 методов – ksDocument3D::GetPart. Входящим параметром этой функции является целочисленная переменная type_, которая определяет, интерфейс какого именно компонента сборки возвращать. Данная переменная имеет несколько предопределенных значений (констант):
plnPlace_Part (равняется –4) – метод возвращает указатель на компонент, который находится в режиме контекстного редактирования (то есть редактирования «на месте»);
pNew_Part (–3) – создает в модели новый компонент и возвращает указатель на него;
pEdit_Part (–2) – возвращает указатель на редактируемый компонент (с помощью библиотеки);
pTop_Part (–1) – верхний компонент, в состав которого входит или новый, или редактируемый, или указанный компонент;
все остальные значения (от 0 и выше) отвечают номеру компонента в дереве построения, то есть возвращается указатель на существующий в сборке компонент.
Метод ksDocument3D::GetPart возвращает указатель на интерфейс детали или компонента сборки – ksPart. Свойства и методы этого интерфейса (таблица 1.5 и таблица 1.6) управляют состоянием компонентов сборки, они почти полностью дублируют команды контекстного меню и панели свойств, доступные пользователю при работе с тем или иным компонентом.
Таблица 1.5 – Свойства интерфейса ksPart
Свойство
| Тип данных
| Описание
| Excluded
| WordBool
| Определяет, исключен или нет компонент из расчета (из дерева построения)
| faleName
| WordString
| Имя файла из которого вставлен компонент
| FixedComponent
| WordBool
| Определяет, является ли компонент зафиксированным
| hidden
| WordBool
| Задает видимость компонента (скрыт или нет)
| Name
| WordString
| Имя компонента в дереве построений
| standartComponent
| WordBool
| Определяет, является ли данный компонент стандартным (библиотечным элементом)
| Видно, что все эти методы лишь управляют состоянием компонента (задают видимость, размещение, определяют, запущено ли редактирование компонента), но не дают возможность ничего создавать (выполнять операции).
Для программной реализации всех трехмерных операций, которые пользователи выполняют в трехмерных документах системы КОМПАС–3D, в API реализован единый интерфейс ksEntity – интерфейс элемента модели. Этот интерфейс можно получить с помощью метода ksPart::NewEntity, которому необходимо передать тип создаваемого элемента. Типов элементов в системе, как и в API системы, большое множество. Каждому из них отвечает своя целочисленная константа и свой собственный интерфейс параметров. Именно с помощью настроек (свойств и методов) этих интерфейсов и создаются любые возможные объекты в деталях и сборках КОМПАС–3D. Некоторые константы с описанием типа элемента и интерфейса, к которому они относятся, приведены в таблице 1.7. Сведения об остальных можно получить из файла справки SDK.hlp, поставляемого вместе с системой КОМПАС.
Таблица 1.6 – Методы интерфейса ksPart
Метод
| Описание
| BeginEdit
| Позволяет запустить режим редактирования компонента
| ColorParam
| Дает возможность получить указатель на интерфейс параметров цвета и визуальных свойств компонента
| EndEdit
| Закрывает режим редактирования компонента «на месте»
| EntityCollection
| Формирует динамический массив трехмерных объектов и возвращает указатель на его интерфейс
| Продолжение табл.1.6
GetDefaultEntity
| Возвращает указатель на интерфейс объекта, создаваемого системой в трехмерном документе по умолчанию. Таких объектов всего четыре: начало координат и три ортогональные плоскости
| GetPart
| Позволяет получить указатель на интерфейс компонента
| GetPlacement
| Позволяет получить указатель на интерфейс местоположения компонента в сборке
| SetPlacement
| Позволяет установить новое положение компонента в сборке
| IsDetail
| Позволяет проверить, является ли компонент деталью
| NewEntity
| Создает интерфейс нового трехмерного объекта и возвращает указатель на него
| UpdatePlacement
| Позволяет изменить местоположение компонента, заданное в ksPart::SetPlacement
|
Таблица 1.7 – Типы объектов трехмерного документа
Идентификатор
| Числовое значение
| Описание
| Интерфейс параметров
| o3d_sketch
| 5
| Эскиз трехмерной операции
| ksSketchDefinition
| o3d_axis2Planes
| 9
| Вспомогательная ось на пересечении двух плоскостей
| ksAxis2PlanesDefinition
| o3d_planeOffset
| 14
| Смещенная плоскость
| ksPlaneOffsetDefinition
| o3d_planeAngle
| 15
| Плоскость под углом
| ksPlaneAngleDefinition
| o3d_bossExtrusion
| 25
| Операция выдавливания
| ksBossExtrusionDefinition
| o3d_cutExtrusion
| 26
| Операция вырезания выдавливанием
| ksCutExtrusionDefinition
| o3d_bossRotated
| 28
| Операция вращения
| ksBossRotatedDefinition
| o3d_cutRotated
| 29
| Вырезание вращением
| ksCutRotatedDefinition
| o3d_bossLoft
| 31
| Приклеить материал по сечениям
| ksBossLoftDefinition
| o3d_Loft
| 32
| Вырезать по сечениям
| ksCutLoftDefinition
| o3d_meshCopy
| 35
| Копирование по сетке
| ksMeshCopyDefinition
| o3d_circularCopy
| 36
| Копирование по концентричной сетке
| ksCircularCopyDefinition
| o3d_circPartArray
| 38
| Массив по концентрической сетке в сборке
| ksCircularPartArrayDefinition
| o3d_meshPartArray
| 39
| Массив по сетке в сборке
| ksMeshPartArrayDefinition
| o3d_bossEvolution
| 46
| Приклеить кинематически
| ksBossEvolutionDefinition
| o3d_cutEvolution
| 47
| Вырезать кинематически
| ksCutEvolutionDefinition
| o3d_cutByPlane
| 50
| Сечение плоскостью
| ksCutByPlaneDefinition
| o3d_cutBySketch
| 51
| Сечение по эскизу
| ksCutByScetchDefinition
| Кроме перечисленных, в API системы КОМПАС существует еще большое множество различных интерфейсов, отвечающих за тот или иной аспект работы с программой. Небольшая их часть описана в таблице 1.8.
Таблица 1.8 – Некоторые дополнительные интерфейсы API КОМПАС
Интерфейс
| Описание
| ksPartCollection
| Интерфейс массива компонентов сборки
| ksMacro3DDefinition
| Интерфейс трехмерного макрообъекта
| ksMateConstraintCollection
| Интерфейс набора сопряжений сборки
| ksMateConstraint
| Интерфейс структуры параметров сопряжения
| ksMathematic2D
| Интерфейс математических функций в графическом документе
| ILibHPObject
| Интерфейс для работы с характерными точками графического документа
| ksDynamicArray
| Интерфейс динамического массива параметров
| ksPhantom
| Интерфейс фантомного отображения
| ksEntityCollection
| Интерфейс массива объектов модели
| Таким образом, создание какой–либо трехмерной операции пользовательской программой сводится к такой последовательности шагов:
Инициализация главного интерфейса приложения API – KompasObject. Он инициализируется один раз для всего сеанса работы программы.
Инициализация интерфейса трехмерного документ ksDocument3D, с последующим созданием нового документа или получением указателя на активный документ.
Создание компонента и получение на него указателя (интерфейс ksPart). Для сборки это может быть готовый компонент, компонент, вставленный из файла или созданный «на месте». Для детали необходимо получить указатель на компонент типа pTop_Part.
Создание с помощью метода ksPart::NewEntity интерфейса нужной нам операции. При этом в метод передается соответствующий идентификатор (например, для выдавливания – o3d_bossExtrusion).
Получение с помощью метода ksEntity::GetDefinition указателя на интерфейс параметров конкретной операции (для выдавливания этим интерфейсом является ksBossExtrusionDefinition). Настройка этих параметров необходимым пользователю образом.
Создание операции с помощью метода ksEntity::Create.
|