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

0

Параметры оформления листа документа (ksSheetOptions)

Интерфейс ksSheetOptions задает параметры оформления. Получить данный интерфейс с помощью уже знакомого нам метода GetParamStruct интерфейса KompasObject, для этого в качества параметра этого метода нужно передать константу ko_SheetOptions. Так мы сможем получить сам интерфейс, но он не будет привязан к какому-либо чертежу. То есть это будет абсолютно пустой интерфейс. Как получить параметры чертежа?

Для этого используется метод ksGetDocOptions интерфейса ksDocument2D. Вот прототип этого метода:

ksGetDocOptions(optionsType: Integer; const param: IDispatch): Integer;

У него два параметра:

optionsType – тип настройки. Это числовой параметр, который говорит о том, какие именно настройки чертежа мы хотим получить;

param – интерфейс, в который будут записаны читаемые настройки чертежа. Тип этого интерфейса зависит от параметра OptionsType.

В случае успешного чтения параметров метод возвращает значение 1, а в

случае ошибки значение 0.

Для того чтобы мы могли получить параметры чертежа в виде интерфейса ksSheetOptions, параметр optionsType должен быть равен SHEET_OPTIONS_EX. Но тут есть одна загвоздка. Дело в том, что заголовочные файлы КОМПАСа не содержат в себе описания этой константы. Поэтому ее численное значение (4) нам нужно указывать самим.

Для установки параметров чертежа используется другой метод интерфейса ksDocument2D ksSetDocOptions. Вот его прототип:

ksSetDocOptions(optionsType: Integer; const param: IDispatch): Integer;

Как видите, он имеет точно такой же прототип, как и метод ksGetDocOptions. Действительно единственная разница между ними состоит в том, что один читает текущие параметры чертежа, а второй устанавливает новые параметры.

Что ж с получением интерфейса будем считать, что разобрались. Теперь поговорим о самом интерфейсе ksSheetOptions. Вот его свойства:

layoutName – строка с именем библиотеки оформления;

sheetType – признак стандартности  листа чертежа. Если значение данного свойства false, то лист чертежа имеет стандартный размер (A0, A1, A2, A3, A4 или A5). Если же значение данного свойства true, то лист чертежа имеет произвольный, устанавливаемый пользователем формат.

shtType – целое число, которое задает тип основной надписи чертежа. Теперь обсудим эти свойства подробнее.

О поле sheetType мы еще поговорим в следующем разделе, когда будем говорить об интерфейсе ksStandartSheet.

Теперь о полях layoutName и shtType. Честно говоря, я не сразу сообразил,  что  конкретно  там  должно  быть  указано.  Но  потом  до  меня

дошло. Для того чтобы понять их назначение запустите приложение КОМПАС и создайте в нем какой-нибудь новый документ. Теперь откройте Менеджер документа (меню «Сервис/Менеджер документа» или на панели инструментов). Появится приблизительно такое окно:

Ну  так  вот,  поле  layoutName  задает  имя  библиотеки  из  колонки

«Бибилиотека1 оформлений». То есть для данного примера там должно быть указано значение ‘graphic.lyt’.

Теперь по поводу поля shtType. Щелкните дважды по значению в колонке «Оформление», при этом должно появиться приблизительно такое окно:

1 Опечатки у всех бывают

Поле shtType хранит в себе значение колонки «Номер» соответствующее нужному нам стилю оформления. Например, для стиля «Чертеж констр. Первый лист. ГОСТ 2.104-68» (выделен на изображении выше) в этом поле должно храниться значение 1.

Теперь перейдем к методам интерфейса ksSheetOptions. Их всего два:

GetSheetParam()     –     используется     для     получения     интерфейса ksStandartSheet, о котором мы поговорим в следующем разделе.

Init() – сбрасывает значения свойств интерфейса.

Пришло время рассмотреть небольшой пример. Ниже приводится небольшой фрагмент программы, в котором приводится пример работы с интерфейсом ksSheetOptions:

const

SHEET_OPTIONS_EX=4;

…………………

var

kompas: KompasObject; Document2D: ksDocument2D; SheetOptions: ksSheetOptions;

…………………

begin

…………………

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

SheetOptions:=ksSheetOptions(kompas.GetParamStruct(ko_SheetOptions));

//Получаем текущие параметры чертежа

Document2D.ksGetDocOptions(SHEET_OPTIONS_EX, SheetOptions);

//Мы используем стандартный формат листа

SheetOptions.sheetType:=false;

//Указываем номер стиля, который нам нужен

SheetOptions.shtType:=1;

//Устанавливаем новые параметры чертежа

Document2D.ksSetDocOptions(SHEET_OPTIONS_EX, SheetOptions);

Внимательный читатель может спросить: «как изменить формат листа?». Действительно, интерфейс ksSheetOptions не предоставляет возможность указать формат листа (A0, A1, A2 и т.д.). Для этих целей может быть использован интерфейс ksStandartSheet.

Параметры стандартного листа (ksStandartSheet)

Данный интерфейс может быть получен из интерфейса ksSheetOptions. Для этого используется метод GetSheetParam последнего.

GetSheetParam(type_: WordBool): IDispatch;

Параметр type_ – задает признак формата листа. Если данный параметр равен false то используется стандартный формат листа, в противном случае используется произвольный формат листа.

Обращаю ваше внимание на то, что значение данного параметра должно совпадать со значение поля sheetType интерфейса ksSheetOptions (см.

предыдущий раздел).

В зависимости от значения параметра type_ данная функция возвращает либо интерфейс ksStandartSheet (type_=false), который описывает параметры стандартного листа, либо интерфейс ksSheetSize (type_=true), который описывает параметры листа произвольного размера (рассматривать его мы не будем), либо nil, в случае ошибки.

Вообще в отношении данного метода в документации говорится буквально следующее: «осталась для совместимости со старыми библиотеками». Однако найти другой способ (более современный) работы с интерфейсом ksStandartSheet мне так и не удалось.

Теперь поговорим о самом интерфейсе. Вот его свойства:

direct – задает ориентацию листа. Если значение этого свойства равно false, то лист располагается вертикально, если же оно равно true, то горизонтально.

format – формат листа. Задается следующим образом: 0 – A0, 1 – A1, 2 – A2, 3 – A3 и так далее.

multiply – кратность формата.

Метод у данного интерфейса всего один: Init(), который сбрасывает значения всех свойств интерфейса.

Ниже приводится фрагмент программы, в котором демонстрируется работа с этим интерфейсом:

const

……………

var

SHEET_OPTIONS_EX = 4;

Document2D: ksDocument2D; SheetOptions: ksSheetOptions; StahdartSheet: ksStandartSheet;

………………

begin

………………

//Мы работаем с листом стандартного размера

SheetOptions.sheetType:=false;

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

StandartSheet:=ksStandartSheet(SheetOptions.GetSheetParam(false));

//Устанавливаем лист формата A3

StandartSheet.format:=3;

//Устанавливаем горизонтальное направление листа

StandartSheet.direct:=true;

//Устанавливаем кратность равную единице

StandartSheet.multiply:=1;

//Устанавливаем новые настройки чертежа

Document2D.ksSetDocOptions(SHEET_OPTIONS_EX, SheetOptions);

Пример

Теперь пришло время закрепить все вышесказанное на практике. Ниже приводится  фрагмент программы,  в которой создается новый чертеж формата А3 с рамкой.

var

kompas: KompasObject; Document2D: ksDocument2D; DocumentParam: ksDocumentParam; SheetOptions: ksSheetOptions; StandartSheet: ksStandartSheet;

begin

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

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

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

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

//Тип документа – чертеж

DocumentParam.type_:=ksDocumentDrawing;

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

Document2D:=ksDocument2D(kompas.Document2D);

//Создаем новый документ

Document2D.ksCreateDocument(DocumentParam);

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

SheetOptions:=ksSheetOptions(kompas.GetParamStruct(ko_SheetOptions));

//Получаем параметры документа

Document2D.ksGetDocOptions(SHEET_OPTIONS_EX, SheetOptions);

//Стандартный лист

SheetOptions.sheetType := false;

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

StandartSheet:=ksStandartSheet(SheetOptions.GetSheetParam(false));

//формат А3

StandartSheet.format:=3;

//ориентация листа

StandartSheet.direct:=true;

//Тип рамки и соновной надписи

SheetOptions.shtType:=1;

//Устанавливаем новые параметры документа

Document2D.ksSetDocOptions(SHEET_OPTIONS_EX, SheetOptions);

kompas.Visible:=true;

end;

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

Параметры оформления листа документа (ksSheetPar)

Приведенный выше фрагмент кода хорошо работает на старых версиях КОМПАСа (проверял на 8 версии), а вот на более новых он не работает (проверял на 11версии). В них вместо интерфейса ksSheetOptions нужно использовать интерфейс ksSheetPar, который выполняет ту же самую роль, что и заменяемый им интерфейс.

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

GetLayoutParam()   интерфейса   ksDocumentParam.   Рассмотрим   свойства интерфейса ksSheetPar.

layoutName - полный путь к библиотеке оформления (graphic.lyt).

shtType – тип основной надписи и рамки чертежа. Аналогичен свойству shtType интерфейса ksSheetOptions.

Теперь рассмотрим методы интерфейса ksSheetPar.

GetSheetParam() – возвращает интерфейс параметров листа документа. Если используется стандартный лист документа, тогда возвращается интерфейс ksStandartSheet. Если же используется не стандартный лист, тогда возвращается интерфейс ksSheetSize (его рассматривать мы не будем).

Init() – обнуляет значения всех свойств интерфейса. В случае успеха возвращает значение TRUE.

Пример

Ниже приводится фрагмент программы, в которой демонстрируется создание нового чертежа формата А3 с рамкой с использованием интерфейса ksSheetPar.

var

kompas: KompasObject; Document2D: ksDocument2D; DocumentParam: ksDocumentParam; StandartSheet: ksStandartSheet; SheetPar    : ksSheetPar;

str: string;

begin

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

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

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

DocumentParam:=ksDocumentParam(kompas.GetParamStruct(ko_DocumentParam)); DocumentParam.type_:=1;  //стандартный чертеж

DocumentParam.regime := 0;//видимый режим редактирования

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

SheetPar := ksSheetPar(DocumentParam.GetLayoutParam());

//Формируем путь к библиотеке оформления str:= kompas.ksSystemPath(0)+’\graphic.lyt'; SheetPar.layoutName := str;

SheetPar.shtType := 1; //тип основной надписи

//Получаем интерфейс параметров стандартного листа StandartSheet := ksStandartSheet(SheetPar.GetSheetParam()); StandartSheet.direct := true; //штамп вдоль длинной стороны StandartSheet.format:=3;     //формат А3

StandartSheet.multiply := 1; //масштаб

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

Document2D:=ksDocument2D(kompas.Document2D);

//Создаем документ

Document2D.ksCreateDocument(DocumentParam);

kompas.Visible:=true;

end;

Здесь для получения полного пути  к файлу graphic.ly используется метод ksSystemPath. Данный метод при передаче ему в качестве параметра нулевого значения возвращает полный путь к подкаталогу «sys» каталога КОМПАСа. Более подробное описание этого метода смотри в документации КОМПАСа.

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

По теме:

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