Работа с параметрическими библиотеками

Материал из GEOS_WIKI
Перейти к: навигация, поиск

Параметрические библиотеки (прототипы) - одно из мощных средств автоматизации, предлагаемое комплексом K3. K3 предоставляет возможности создания собственных параметрических объектов (прототипов), добавление прототипа в сцену K3, редактирование прототипа и пр.

Большую часть работы по созданию прототипа K3 берет на себя. Пользователю необходимо лишь создать заголовок (название) прототипа, определиться с набором параметров прототипа и написать макропрограмму создания прототипа.

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

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

Выбор прототипа в диалоговом окне
Установка параметров прототипа

protoobj <Keys> <Params>

Команда protoobj позволяет создавать прототип, редактировать прототип и т. д., в зависимости от ключей <Keys> и значений параметров <Params>

Варианты работы данной команды представлены ниже.

Добавление прототипа в сцену без диалогового окна

protoobj create [<ProtoLibName>] <ProtoID> <ParName1> <ParValue1> <ParName2> <ParValue2>,..., <ParNameN> <ParValueN> done <Point>

Команда добавляет прототип с номером <ProtoID> из библиотеки прототипов <ProtoLibName> в сцену в точку <Point>. Если имя библиотеки прототипов <ProtoLibName> опущено, прототип добавляется из текущей библиотеки прототипов. Точка <Point> указывает положение ЛСК прототипа в текущей ПСК. Параметры <ParName1>, <ParName2>, ..., <ParNameN> — строки, определяющие имена параметров прототипов. При добавлении прототипа в сцену им присваиваются соответственно значения параметров <ParValue1>, <ParValue2>,..., <ParValueN>. Если параметру прототипа значение не присвоено, значение берется из умолчаний библиотеки прототипов.

Добавление прототипа в сцену при помощи диалогового окна

protoobj add

Команда добавляет в сцену прототип, указанный при помощи диалогового окна «Выбор прототипа» с параметрами, введенными в диалоговом окне «Установка параметров прототипа». Поскольку данная команда использует диалоговое окно, применять эту команду в макропрограммах не рекомендуется.

Если выполнить команду

ProtoObj add [<ProtoLibName>] <ProtoID>

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

Редактирование прототипа

protoobj edit [list] <Object> <ParName1> <ParValue1> <ParName2> <ParValue2>,..., <ParNameN> <ParValueN> done

Команда редактирует прототип <Object>, изменяя его параметры, заданные строками <ParName1>, <ParName2>, ..., <ParNameN> и присваивая им соответственно значения <ParValue1>, <ParValue2>,..., <ParValueN>. При этом неизмененные параметры сохраняют свои прежние значения.

Необязательный ключ list указывает на то, что ввод параметров прототипа и их значений будет осуществляться без диалогового окна. По умолчанию ввод параметров осуществляется в диалоговом окне «Установка параметров прототипа» (см. выше).

Функции работы с прототипами

ProtoLib

STRING ProtoLib(OBJECT <Obj>)

Функция возвращает имя библиотеки прототипов (с расширением ".ptl") объекта <Obj>, если он является прототипом или пустую строку, если объект прототипом не является.

ProtoID

INT ProtoID(OBJECT <Obj>)

Функция возвращает идентификатор (ID) прототипа объекта <Obj>, если он является прототипом или ноль, если объект прототипом не является.

GetProtoMac

STRING GetProtoMac(STRING <NameLib>)

Функция возвращает полный путь к папке с макропрограммами из библиотеки прототипов с именем <NameLib> или пустую строку, если указанная библиотека не зарегистрирована. Имя библиотеки может быть полным или кратким.

GetProtoVal

logical GetProtoVal(OBJECT <Obj>, {VARIANT <ParName> | 0 | ""}, VARNAME DOUBLE <Value>)

logical GetProtoVal(OBJECT <Obj>, {VARIANT <ParName> | 0 | ""}, VARNAME STRING <Value>)

Функция осуществляет запрос параметра прототипа объекта <Obj>. <ParName> – имя (STRING) или идентификатор (INT) параметра прототипа. <Value> – переменная для возвращаемого значения. Если вместо параметра <ParName> задано 0 или пустая строка (""), то функция записывает в переменную <Value> номер прототипа

Функция возвращает:

0 — в случае ошибки (отсутствия параметра),
1 — успешное завершение функции.

Пример:

PrMater=0;
err=GetProtoVal(pnt,"PrMater",PrMater);
=err;
1
=PrMater;
358

ChangePInfo

logical ChangePInfo(OBJECT <Obj>, STRING <ParName>, double <Value>)

logical ChangePInfo(OBJECT <Obj>, STRING <ParName>, string <Value>)

Функция изменяет параметр с именем <ParName> у прототипа объекта <Obj> на значение <Value>. Функция не перестраивает объект с новым (измененным) значением параметра. Для перестроения объекта необходимо воспользоваться командой редактирования прототипа. Функция возвращает:

0 — в случае ошибки (отсутствия параметра),
1 — успешное завершение функции.

Пример:

objident last 1 pnt;
=ChangePInfo(pnt,"PrMater",0);
1

dbVar

Double dbVar(string <ParName>, double <Default>)

Double dbVar(string <ParName>, string <Default>)

Функция читает и возвращает значение параметра с именем <ParName> текущего прототипа, а если такого параметра нет, возвращает значение <Default>. Функция используется исключительно в макропрограмме прототипа.

Также эта функция используется для чтения значения глобальной константы с именем <ParName> из библиотеки прототипов. Если такая константа отсутствует, возвращается значение <Default>. В этом случае чтение константы может происходить не только в макропрограмме прототипа.

Если глобальная константа в библиотеке прототипов и параметр текущего прототипа имеют одинаковое имя, то предпочтение отдается параметру прототипа.

Пример:

=dbVar(“HDSP”,10); // Такая константа есть
16
=dbVar(“qwe”,10); // Такой константы нет. Берется умолчание
10

dbSetVar

LOGICAL dbSetVar(string <ParName>, double <Value>)

LOGICAL dbSetVar(string <ParName>, string <Value>)

Для версий К3 от 7.4 и выше

Функция записывает в текущий прототип значение <Value> параметра с именем <ParName>.Если у прототипа есть такой параметр и значение подходит по типу и допустимому диапазону, то функция возвращает 1. Иначе - 0.

Функция используется исключительно в макропрограмме прототипа.

Пример:

//-- Переписываем значения параметров
err=DbSetVar("ПовРуч",0);
err=DbSetVar("Шир",400);
err=DbSetVar("Глуб",5840);
err=DbSetVar("ШирС",100);
err=DbSetVar("ШирС2",100);
err=DbSetVar("ShiftDuct",0);

Об атрибуте $ProtoInfo

Сохранять в атрибут все параметры прототипа

Параметры прототипа у созданного объекта-прототипа хранятся в специальном системном атрибуте $ProtoInfo. Это — текстовый атрибут, представляющий собой набор строк и имеющий следующую структуру.

<ProtoLibName>
<ProtoID>
<ProtoParID1>
<ProtoValue1>
<ProtoParID2>
<ProtoValue2>
...
<ProtoParIDN>
<ProtoValueN>
0

где

<ProtoLibName> — имя библиотеки прототипов
<ProtoID> — ID прототипа в данной библиотеке прототипов
<ProtoParIDN> — ID параметра прототипа
<ProtoValueN> — значение данного параметра прототипа

Завершается перечисление параметров прототипа символом 0 (ноль).

Следует заметить, что в атрибут $ProtoInfo попадают только значения параметров, непосредственно установленные пользователем, то есть значения, отличающиеся от значений по умолчанию. Однако, если воспользоваться командой "Установки/Параметры" и установить флажок в поле "Сохранять в атрибут все параметры прототипа", то в атрибут попадают все параметры прототипа.

Пример атрибута $ProtoInfo

Shkaf.ptl
10
158
600
159
1700
0

LOGICAL AddattrPI(OBJECT <Obj>, INT <LibID>, INT <ProtoNum>)

Функция AddattrPI создает и присваивает объекту <Obj> атрибут $ProtoInfo по scratch-атрибуту. Функция принимает на вход объект <Obj>, которому будет присвоен атрибут, ID библиотеки прототипов <LibID> и ID прототипа <ProtoNum>. Функция возвращает:

1 — в случае успешного выполнения
0 — в случае ошибки

Пример

ScrMod=InitScratch();
err=AddScratch(ScrMod,FurnType,"w",w);
err=AddScratch(ScrMod,FurnType,"D",d);
err=AddScratch(ScrMod,FurnType,"H",h);
...
err=AddScratch(ScrMod,FurnType,"ots",g_BottomOts);
NULLOUT=writescratch(ScrMod,Namescr,kbx);
NULLOUT=TermScratch(ScrMod);
NULLOUT=addattrpi(kbx,1,position);