Передача геометро-графической информации из САПР «Компас-График» в прикладную программу

С.А. Роменский,
 асп., romensky.serge@gmail.com,
ННГАСУ,
г. Нижний  Новгород

Данный доклад посвящен передаче геометро-графической информации из системы автоматизированного проектирования в прикладную программу при помощи COM-объектов на примере САПР Компас-График при использовании предлагаемого API.

 

This report is about transfer geometry-graphical information from CAD-system to the user application with using COM-objects on the example of CAD-system “Kompas-Graphic” with using offered API.

Введение

Любой объект производства в течение долгого времени должен иметь информационную поддержку жизненного цикла изделия (ЖЦИ). Данная поддержка осуществляется при помощи совокупности различных систем, объединенных единой базой данных. В течение ЖЦ изделие может дорабатываться в различных программах и при этом возникает проблема передачи данных между ними.

Для решения этой проблемы существуют международные стандарты передачи данных IGES [1] и STEP[2], но для оперативной работы с геометро-графической информацией данный способ не эффективен из-за больших объемов побочных данных и необходимости двойной перекодировки, что ведет к возникновению ошибок.

В случае использования САПР (системы автоматизированного проектирования) «Компас-График» передача геометро-графической информации в прикладную программу может происходить двумя способами: через промежуточные форматы хранения данных или при помощи COM-объектов (англ. Component Object Model)[3], осуществляющих взаимодействие двух запущенных приложений в среде Windows. В работе подробно рассматривается второй вариант организации передачи данных.

Для упрощения подобного взаимодействия и более эффективной передачи данных компания «Аскон» предоставляет специализированный API(англ. Application Programming Interface). С его помощью при наличии установленной САПР «Компас-График» и подключения соответствующих DLL (англ. Dynamic Link Lybrary) становится возможным обмен геометро-графической информацией с прикладной программой без использования посредников.

Описанный способ взаимодействия позволяет получить геометро-графическую информацию не только из внутреннего формата хранения САПР «Компас-График», но и из любого другого, с которым взаимодействует указанная САПР. После же получения геометро-графической информации прикладной программой её (информацию) можно преобразовать для хранения внутри специализированной базы данных.

Работа выполнена в рамках  гранта РФФИ №15-07-05110

Взаимодействие приложений при помощи COM-объектов

С начала 1990 годов корпорация Microsoft разрабатывает технологию, позволяющую создавать гибкие модульные программы таким образом, чтобы отдельные модули можно было писать на разных языках программирования, но чтобы при этом обеспечивалась их полная взаимозаменяемость при использовании в различных программных пакетах. На сегодня эта технология полностью сформирована и называется COM (Component Object Model, модель компонентных объектов).

Технология COM описывает методологию реализации компонентов программного обеспечения: объектов, которые могут повторно использоваться, могут быть неоднократно подключены к разным приложениям. Повторное использование компонентов стало логическим следствием эволюции объектно-ориентированного программирования и получило название компонентно-ориентированного подхода. Концепция компонентно-ориентированного программирования предусматривает полное отделение внутренних функций компонента от функций доступа к нему извне. Теперь, обращаясь к компоненту, необязательно знать его внутреннее устройство, для этого достаточно лишь иметь информацию о том, как вызывать его функции. Другими словами, необходимо знать, как взаимодействовать с компонентом и какой у него интерфейс. Такая функциональность в COM достигается за счет поддержки одного или нескольких интерфейсов, которые используются другими программами для доступа к внутренним членам и методам компонента.

Таким образом, интерфейс – это посредник между двумя объектами, обеспечивающий связь между прикладными программами. Интерфейс-ориентированное программирование представляет собой технологию разработки программного обеспечения, жестко нацеленную на использование интерфейсов. Интерфейс является своего рода связующим звеном, предоставленным управляющей программе для доступа к COM-объекту.

Объект COM – конкретный экземпляр COM-класса, завершенный объект с собственными членами данных и методами, который может легко встраиваться в программы или распространяться как отдельный программный продукт. COM-объект представляет собой или DLL-библиотеку или ЕХЕ-программу для Wіndows, которые можно создавать в любой среде программирования, способной поддерживать нужный формат представления. COM-объект может иметь много функций, доступ к которым происходит через его интерфейсы. Любой COM-объект должен иметь по крайней мере один интерфейс ІUnknown, хотя на самом деле имеет их значительно больше.

На сегодняшний день технология СОМ используется практически во всех серьезных программах. Приведем один пример. Предположим, что пользователю в каком-нибудь отчете нужно поместить электронную таблицу с расчетами, которые ссылаются на определенные параметры в тексте. Чтобы выполнить любые вычисления без использования технологии СОМ, пришлось бы постоянно переключаться между двумя программами (Word и Excel), а информацию копировать (вырезать и вставлять). При помощи технологии COM можно применять функции электронной таблицы прямо в текстовом редакторе и автоматически форматировать полученный результат. Возможность реализовать операции такого рода называется автоматизацией.

Цель автоматизации состоит в том, чтобы дать возможность программе предоставлять в использование сервисы, которые в ней присутствуют. Основной особенностью автоматизации является возможность комбинировать функции различных специализированных приложений в одном модуле. СОМ дает возможность программам передавать свою информацию в другие приложения и модули. Если бы каждая программа или приложение-сценарий могли бы поддерживать указатели и процедуру обхода указателей, то проблема была бы решена. Однако в некоторых языках программирования есть определенная трудность с процедурой обхода таблицы указателей. Некоторые из них, например Vіsual Basіc, не поддерживают указатели напрямую. Для решения этой проблемы был разработан специальный интерфейс, который разрешает любым языкам программирования, в том числе таким, как Vіsual Basіc, обращаться к методам COM-компонентов. Этот интерфейс получил название ІDіspatch.

Реализация операций чтения и записи геометро-графической информации на примере  API САПР Компас-График

Для чтения геометро-графической информации из САПР Компас-График в прикладную программу необходимо проделать следующие операции:

1.  Создать COM-объект для взаимодействия между САПР и прикладной программой.

2.  Открыть необходимый графический документ для считывания информации.

3.  В активном документе создать итератор для получения доступа ко всем объектам в документе.

4.  При помощи итератора обойти все объекты в графическом документе.

Рис.1 Принцип работы прикладной программы при чтении геометро-графической информации

Создание COM-объекта для взаимодействия с САПР Компас-График

Главным интерфейсом API системы КОМПАС является KompasObject. Получить указатель на этот интерфейс (если быть точным, на интерфейс приложения API 5) можно с помощью экспортной функции CreateKompasObject(). Методы этого интерфейса реализуют наиболее общие функции работы с документами системы, системными настройками, файлами, а также дают возможность получить указатели на другие интерфейсы (интерфейсы динамического массива, работы с математическими функциями, библиотек моделей или фрагментов и различных структур параметров определенного типа).

Открытие графического документа

Другой важный интерфейс API 5 – интерфейс документа модели ksDocument2D.

Получить его можно с помощью методов интерфейса KompasObject:

• ActiveDocument2D – для уже существующего и активного в данный момент документа;

• Document2D – если вы планируете создавать новый двумерный документ.

Для открытия документа с жесткого диска используется метод ksDocument2D::ksOpenDocument.

Создание итератора

Рис.2 Работа итератора

Синтаксис: reference ksIterator::CreateIterator(int searchType, reference parent).

Передвижение по модели документа (навигация) производится в соответствии с условиями, заданными в специальном блоке параметров. Он содержит тип движения, определяющий режим перемещения (например, по видам, слоям, всем объектам, объектам заданного типа и т.д.) и указатель комплексного объекта (макроэлемента, слоя, группы) при перемещении по составляющим его объектам. Итератор привязан к конкретному режиму графического редактора (например, документу, виду), поэтому Вы не сможете использовать один и тот же итератор для навигации в разных видах, штампах и т.п. Итератор сохраняет свое действия до окончания сеанса работы с библиотекой. При переходе внутри библиотечной функции под управление КОМПАС-ГРАФИК, после возврата значение всех итераторов будет сброшено.

Перемещение внутри графического документа

Синтаксис: reference ksIterator::MoveIterator (reference iterator,unsigned char type);

Данная функция перемещает текущий указатель итератора (блока параметров навигации) iterator на очередной объект модели. Режим позиционирования (тип объектов, участвующих в поиске) определяются при создании итератора.

При позиционировании на именованную группу она автоматически становится текущей (рабочей). К ней будут относиться операции добавления и исключения объектов (при исключении всех объектов из именованной группы она автоматически удаляется).

Чтение свойств объекта

Из объекта, на который указывает итератор, можно получить список свойств текущего объекта. В таблице 1 представлены основные объекты, встречающиеся в графических документах. Полный список можно прочитать в [4]

Таблица 1

Идентификатор объекта

Цифровой код

Название объекта

Тип параметров

Структура параметров

Интерфейс параметров

ALL_OBJ

0

все объекты, кроме вспомогательных, которые могут входить в вид

 

 

 

LINESEG_OBJ

1

отрезок

ALLPARAM

LineSegParam

ksLineSegParam

CIRCLE_OBJ

2

окружность

ALLPARAM

CircleParam

ksCircleParam

TEXT_OBJ

4

текст

ALLPARAM

TextParam

ksTextParam

 

 

 

Индекс строки текста (начиная с 0)

TextLineParam

ksTextLineParam

POINT_OBJ

5

точка

ALLPARAM

PointParam

ksPointParam

BEZIER_OBJ

8

кривая Безье

ALLPARAM

BezierParam

ksBezierParam

 

 

 

Индекс узла кривой (начиная с 0)

BezierPointParam

ksBezierPointParam

CUT_OBJ

19

линия разреза

ALLPARAM

CutLineParam

ksCutLineParam

LEADER_OBJ

20

линия-выноска

ALLPARAM

LeaderParam

ksLeaderParam

LINE_OBJ

28

прямая

ALLPARAM

LineParam

ksLineParam

LAYER_OBJ

29

слой

ALLPARAM

LayerParam

ksLayerParam

 

 

 

VIEW_LAYER_STATE

int (состояние слоя)

ksLtVariant(состояние слоя)

ELLIPSE_OBJ

32

эллипс

ALLPARAM

EllipseParam

ksEllipseParam

NURBS_OBJ

33

кривая NURBS

ALLPARAM,
NURBS_CLAMPED_PARAM

NurbsParam

ksNurbsParam

RECTANGLE_OBJ

35

прямоугольник

ALLPARAM

RectangleParam

ksRectangleParam

EQUID_OBJ

37

эквидистанта

ALLPARAM

EquidistantParam

ksEquidistantParam

CENTREMARKER_OBJ

42

Обозначение центра

ALLPARAM

CentreParam

ksCentreParam

RASTER_OBJ

45

Растровый объект

ALLPARAM

RasterParam

ksRasterParam

AXISLINE_OBJ

48

Осевая линия

ALLPARAM

AxisLineParam

ksAxisLineParam

Запись во внутренний формат базы данных

После получения и обработки всей геометро-графической информации прикладной программой, производится запись в базу данных.

Запись геометро-графической информации в САПР Компас-График

Запись геометро-графической информации в САПР Компас-График осуществляется при помощи методов интерфейса ksDocument2D, например: ksEllipse - создать эллипс с заданными параметрами, Line - создать прямую линию через указанную точку под заданным углом, LineSeg - создать отрезок прямой линии, Point - проставить точку.

Закрытие документа

По окончании работы с документом вызывается функция int ksDocument2D::CloseDocument (reference sheet), где sheet – указатель на закрываемый документ.

По окончании работы с САПР Компас-График вызывается функция void  KompasObject::Quit(), закрывающая COM-соединение и саму САПР.

Заключение

В ходе работы был изучен способ взаимодействия прикладных программ при помощи COM-объектов, разработан программный комплекс, использующий API САПР Компас-График и реализующий чтение геометро-графической информации в пользовательскую базу данных.

Литература

1.  J. Russell, R. Cohn, IGES, 2013 – 101с.

2.  Подколзин В.Г., Судов Е.В. Применение STEP-технологии при построении корпоративной системы «КБ - завод». // В сб. Проблемы продвижения продукции и технологий на внешний рынок. Специальный выпуск. М., 1997, стр.41 - 44

3.  Трельсен Э. Модель COM  и применение ATL 3.0. СПБ.: БХВ-Петербург, 2001. - 928с.

4.  Базовые интерфейсы API системы КОМПАС [Электронный ресурс] url:– http://www.litmir.net/br/?b=115812&p=107. (Дата обращения: 09.10.2015)