Главная » Delphi, OLE, САПР » Создание чертежа в КОМПАС из DELPHI

0

Параметры документа (ksDocumentParam)

Интерфейс ksDocumentParam описывает параметры графического документа. Получить его можно с помощью метода GetParamStruct интерфейса KompasObject для этого ему (методу) в качестве аргумента нужно передать значение ko_DocumentParam. Ниже приводится пример программы демонстрирующий получение этого интерфейса:

var

DocumentParam: ksDocumentParam;

…………

begin

…………

DocumentParam := ksDocumentParam(kompas.GetParamStruct(ko_DocumentParam));

Рассмотрим свойства и методы данного интерфейса (их немного). Начнем со свойств, их всего пять:

author - строка с именем автора документа; comment – строка с комментарием к документу; fileName - строка с именем файла документа;

regime – режим редактирования. Если данное свойство равно единице, то редактируемый документ не отображается на экране. Если же оно равно нулю, то он (документ) отображается на экране пользователя, как и при обычной работе с этим документом.

type_1– тип документа.

В таблице ниже представлены основные типы документов системы КОМПАС:

Имя типа

Описание

ksDocumentUnknown

Неизвестный тип

ksDocumentDrawing

Чертеж

ksDocumentFragment

Фрагмент

ksDocumentSpecification

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

ksDocumentPart

Деталь

ksDocumentAssembly

Сборка

ksDocumentTextual

Текстовый документ

Из методов данного интерфейса нас будет интересовать только один: метод Init(). Данный метод сбрасывает все настройки чертежа. Он не имеет входных параметров и возвращает true в случае успешного завершения или false, если произошла какая-то ошибка. Рекомендую вызывать этот метод сразу после получения интерфейса параметров документов.

1 В документации КОМПАС данное свойство описывается  как «type» (без знака подчеркивания на конце), а вот в заголовочном файле оно описано как «type_» (со знаком подчеркивания на конце).


Создание нового чертежа

Для работы с чертежом служит интерфейс ksDocument2D. Получить его можно из интерфейса KompasObject с помощью метода Document2D последнего. Данный метод не имеет входных параметров и возвращает нужный нам интерфейс (или nil в случае ошибки).

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

Во-первых, не факт у пользователя открыт  какой-то чертеж. В этом случае данный метод вернет значение nil. При таком положении дел мы не сможем нужный нам интерфейс.

Во-вторых, у пользователя активным может быть какой-то свой документ, никак не связанный с вашей программой. Я не думаю, что пользователь сильно обрадуется тому, что ваша программа, не спросив его на то   разрешение,   начнет   вносить   какие-то   изменения   (пусть   и   чисто

косметического характера) в его личный чертеж, стоивший ему уйму сил. А нервные клетки пользователей нужно беречь, как-никак они не восстанавливаются.

Исходя из всего вышесказанного, можно сделать вывод, что метод ActiveDocument2D без специальных мер предосторожности не может быть использован для получения интерфейса ksDocument2D. Поэтому мы, в качестве основного способа получения нужного нам интерфейса будем использовать первый способ (использование метода Document2D).

Хорошо. Будем считать, что с получением интерфейса документа разобрались. Но как создать чертеж? Для этого используется метод ksCreateDocument интерфейса ksDocument2D. Вот его прототип:

ksCreateDocument(const par: IDispatch): WordBool;

В качестве единственного параметра он принимает интерфейс ksDocumentParam, который мы рассмотрели в прошлом разделе.

Данный метод возвращает значение true в случае успешного создания чертежа и false в случае, если создать документ по какой-то причине не удалось.

Ниже приводится фрагмент программы, демонстрирующий создание нового чертежа.

var

//Переменные

Document2D: ksDocument2D; DocumentParam: ksDocumentParam;

………………………

begin

………………………

//Получаем и заполняем интерфейс параметров документа DocumentParam:=ksDocumentParam(kompas.GetParamStruct(ko_DocumentParam)); DocumentParam.Init();

DocumentParam.type_:=ksDocumentDrawing;

//Получаем интерфейс документа

Document2D:=ksDocument2D(kompas.Document2D);

//Создаем новый чертеж

Document2D.ksCreateDocument(DocumentParam);

Обращаю ваше внимание на то, что здесь мы явно указываем тип документа чертеж (константа ksDocumentDrawing). Попытка создать документ какого-либо другого типа (например, сборки или детали) завершится неудачей, так как для работы с ними предназначены другие интерфейсы.

Важным моментом также является то, что создаваемый вами документ не будет рамки и какого-либо формата. Это связано с тем, что формат чертежа задается отдельно. В следующей главе мы обсудим как.

Открытие чертежа

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

Для осуществления этого вам нужно как-то открыть чертеж из шаблона в КОМПАСе и получить его интерфейс. Для этой цели у интерфейса ksDocument2D предусмотрен специальный метод: ksOpenDocument. Вот его прототип:

ksOpenDocument(const nameDoc: WideString; regim: WordBool): WordBool;

Рассмотрим параметры:

nameDoc – строка с именем файла, в котором хранится открываемый нами чертеж;

regim – режим открытия файла. Если значение данного параметра равно true1, то документ открывается в невидимом режиме, то есть его не видно. Если же значение этого равно false, то документ открывается в обычном видимом режиме.

Данный метод возвращает true, если документ успешно открыт, и false –

если открыть документ не удалось.

Приводить пример использования этого метода я не буду, так как здесь все предельно просто.

1 Несмотря на то, что этот параметр имеет тип boolean , его возможные значения в документации описываются как целые числа (0 и 1), по всей видимости, ориентируясь на программистов, пишущих на Си, где тип bool появился не сразу. Хотя возвращаемые методом значения она описывает как TRUE и FALSE.


Закрытие и сохранение чертежа

Из своей программы вы можете закрыть документ, который стал вам больше не нужным. Для этого используется метод ksCloseDocument все того же интерфейса ksDocument2D. Данный метод не имеет входных параметров. В случае успешного закрытия документа он возвращает true, а в случае ошибки false.

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

Поэтому лучше либо вообще не закрывать документ, предоставив пользователю возможность самому определить его дальнейшую участь, либо сохранить в какое-то предопределенное место. Причем, наилучшим вариантом будет такой, при котором пользователь сам решает куда лучше всего   сохранить   данный   чертеж.   Хотя   это   уже   вопрос   этичности

программиста.

Для сохранения чертежа предусмотрено два метода ksSaveDocument и ksSaveDocumentEx интерфейса ksDocument2D. Начнем с первого, вот его прототип:

ksSaveDocument(const fileName: WideString): WordBool;

У него всего один параметр – это строка с именем файла, в который следует сохранить данный чертеж.

Если файл успешно сохранен, то возвращается значение true, в противном случае возвращается значение false.

Если имя файла (параметр fileName) не задано, то используется имя файла из документа (см. интерфейс ksDocumentParam). Если оно также не задано, то происходит ошибка.

Метод ksSaveDocumentEx похож на метод ksSaveDocument и, по сути, является его расширенной версией. Вот его прототип:

ksSaveDocumentEx(const fileName: WideString; SaveMode: Integer): WordBool;

Как видите, здесь добавился еще один параметр SaveMode, который указывает, в какой версии КОМПАС следует сохранить данный чертеж:

-1   –   чертеж   сохраняется   в   предыдущую   версию   КОМПАСа,   по

отношению к той, в которой он в последний раз редактировался; 0 – в текущую версию КОМПАСа;

1 – в КОМПАС версии 5.11.

Во всем остальном данный метод полностью идентичен методу ksSaveDocument, рассмотренному ранее.

Источник: Норсеев Сергей, «РАЗРАБОТКА ПРИЛОЖЕНИЙ ПОД КОМПАС В DELPHI»

По теме:

  • Комментарии