Главная » Delphi, OLE, САПР » Спецификация – КОМПАС в DELPHI

0

Документ-спецификация    (ksSpcDocument)

Интерфейс ksSpcDocument описывает документ-спецификацию. Этот интерфейс является главным при работе со спецификацией. Получить его можно двумя способами.

Первый способ. С помощью метода SpcDocument() интерфейса KompasObject. Данный метод возвращает интерфейс спецификации ksSpcDocument, но саму спецификацию он не создает и не открывает.

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

Интерфейс ksSpcDocument имеет всего одно свойство reference, которое не представляет для нас особого интереса, и несколько методов, назначение основных из которых мы рассмотрим ниже.

Открытие существующей спецификации

Для открытия существующего документа-спецификации используется метод ksOpenDocument интерфейса ksSpcDocument. Вот прототип этого метода.

ksOpenDocument(

const nameDoc: WideString; //путь к документу

regim: Smallint           //режим открытия

): WordBool;

Параметр nameDoc представляет собой полный путь и наименование файла с открываемой спецификацией.

Параметр regim задает режим открытия спецификации. Допустимые значения этого параметра представлены ниже.

0 – видимый режим.

1 – невидимый режим.

3                              – видимый режим без синхронизации со сборочным чертежом.

4                              – невидимый режим без синхронизации со сборочным чертежом.

В том случае, если спецификация не связана ни с каким сборочным чертежом, то значение 3 эквивалентно значению нуль, а значение 4 – единице.

В случае успеха метод ksOpenDocument возвращает значение TRUE.

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

var

kompas: KompasObject; SpcDocument: ksSpcDocument;

begin

//Подключаемся к КОМПАСу

kompas:=KompasObject(CreateOleObject(‘Kompas.Application.5′));

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

SpcDocument:=ksSpcDocument(kompas.SpcDocument());

//Открываем существующую спецификацию SpcDocument.ksOpenDocument(‘D:\Study\Спецификация.spw’,0); kompas.Visible:=true;

end;

Создание новой спецификации

Для создания нового документа-спецификации используется метод ksCreateDocument интерфейса ksSpcDocument. Данный метод принимает всего один параметр – интерфейс параметров документа ksDocumentParam (см. главу 3).

В случае успеха метод ksCreateDocument возвращает значение TRUE, а созданный документ-спецификация становится текущим.

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

var

kompas: KompasObject; SpcDocument: ksSpcDocument; DocumentParam: ksDocumentParam; SheetPar: ksSheetPar;

str: string;

begin

//Подключаемся к КОМПАСу

kompas:=KompasObject(CreateOleObject(‘Kompas.Application.5′));

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

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

DocumentParam.type_:=4; //lt_DocSpc

DocumentParam.regime:=0; //визуальный режим

//Получаем интерфейс параметров листа SheetPar:=ksSheetPar(DocumentParam.GetLayoutParam()); SheetPar.Init();

//Указываем библиотеку стилей

str:=kompas.ksSystemPath(0)+’\graphic.lyt'; SheetPar.layoutName:=str;

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

SpcDocument:=ksSpcDocument(kompas.SpcDocument());

//Создаем спецификацию

SpcDocument.ksCreateDocument(DocumentParam); kompas.Visible:=true;

end;


Закрытие спецификации

Для того чтобы закрыть документ-спецификацию используется метод ksCloseDocument(). В случае успеха он возвращает значение TRUE.

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

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

работу этого метода.

var

kompas: KompasObject; SpcDocument: ksSpcDocument;

begin

//Подключаемся к КОМПАСу

kompas:=KompasObject(CreateOleObject(‘Kompas.Application.5′));

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

SpcDocument:=ksSpcDocument(kompas.SpcDocument());

//Открываем существующую спецификацию

SpcDocument.ksOpenDocument(‘D:\Study\Спецификация.spw’,0);

//Делаем КОМПАС видимым, чтобы пользователь увидел спецификацию

kompas.Visible:=true;

//Ждем 2 секунды

Sleep(2000);

//Закрываем спецификацию

SpcDocument.ksCloseDocument();

end;

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

Сохранение спецификации

Для сохранения спецификации используется метод ksSaveDocument интерфейса ksSpcDocument. В качестве единственного параметра ему передается строка с полным путем и именем сохраняемого файла. Если в качестве единственного параметра передать значение NULL, то спецификация сохранится в текущем файле.

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

демонстрирующей работу этого метода.

var

kompas: KompasObject; SpcDocument: ksSpcDocument;

begin

//Подключаемся к КОМПАСу

kompas:=KompasObject(CreateOleObject(‘Kompas.Application.5′));

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

SpcDocument:=ksSpcDocument(kompas.SpcDocument());

//Открываем существующую спецификацию

SpcDocument.ksOpenDocument(‘D:\Study\Спецификация.spw’,0);

//Сохраняем спецификацию

SpcDocument.ksSaveDocument(‘D:\Study\Спецификация2.spw’);

kompas.Visible:=true;

end;

В данном примере сначала открывается существующая спецификация, после чего она сохраняется в новом файле «Спецификация2.spw».

Основная надпись

Редактирование основной надписи в документе-спецификации осуществляется с помощью уже рассмотренного нами интерфейса ksStamp (см. главу 5). Для получения этого интерфейса используется метод GetStamp() интерфейса ksSpcDocument.

Ниже приводится ключевой фрагмент исходного текста программы демонстрирующей редактирование основной надписи в документе- спецификации.

var

kompas: KompasObject; SpcDocument: ksSpcDocument; Stamp : ksStamp;

TextItemParam: ksTextItemParam;

begin

//Подключаемся к КОМПАСу

kompas:=KompasObject(CreateOleObject(‘Kompas.Application.5′));

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

SpcDocument:=ksSpcDocument(kompas.SpcDocument());

//Открываем существующую спецификацию

SpcDocument.ksOpenDocument(‘D:\Study\Спецификация.spw’,0);

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

Stamp:=ksStamp(SpcDocument.GetStamp());

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

TextItemParam:=ksTextItemParam(kompas.GetParamStruct(ko_TextItemParam));

//Открываем основную надпись для редактирования

Stamp.ksOpenStamp(); Stamp.ksColumnNumber(1); TextItemParam.s:=’Спецификация';

Stamp.ksTextLine(TextItemParam);

//Закрываем основную надпись Stamp.ksCloseStamp(); kompas.Visible:=true;

end;

На рисунке ниже показан результат работы этой программы.

Многостраничная спецификация

Для работы с многостраничными спецификациями в интерфейсе KsSpcDocument предусмотрено два метода.

Первый, ksGetSpcDocumentPagesCount() возвращает количество листов

в документе-спецификации. С этим методом все просто.

Второй, GetStampEx согласно документации КОМПАС, он возвращает интерфейс ksStamp (см. главу 5) основной надписи заданного листа. Номер листа (нумерация с 1) передается в качестве единственного параметра данного метода. Вот с ним не все так просто.

Во-первых, реализован данный метод не во всех версиях КОМПАСа. Например, в КОМПАС 8 его нет.

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

Получается, что метод GetStampEx, принципиально ничем не отличается от рассмотренного ранее метода GetStamp.

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

По теме:

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