Работа с параметрическими библиотеками
Параметрические библиотеки (прототипы) — одно из мощных средств автоматизации, предлагаемое комплексом 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> <ProtoParName1>=<ProtoValue1> <ProtoParName2>=<ProtoValue2> ... <ProtoParNameN>=<ProtoValueN> 0
где
<ProtoLibName>
— имя библиотеки прототипов<ProtoID>
— ID прототипа в данной библиотеке прототипов<ProtoParNameK>
— Имя К-го параметра прототипа<ProtoValueK>
— значение данного параметра прототипа
или устаревший формат:
<ProtoLibName> <ProtoID> <ProtoParID1> <ProtoValue1> <ProtoParID2> <ProtoValue2> ... <ProtoParIDN> <ProtoValueN> 0
где
<ProtoLibName>
— имя библиотеки прототипов<ProtoID>
— ID прототипа в данной библиотеке прототипов<ProtoParIDK>
— ID K-го параметра прототипа<ProtoValueК>
— значение данного параметра прототипа
Завершается перечисление параметров прототипа символом 0 (ноль).
Если в атрибуте $ProtoInfo пропущен какой-либо параметр прототипа, то при перестроении прототипа для этого параметра в качестве значения будет взято умолчание на значение из описания прототипа.
Пример атрибута $ProtoInfo
Shkaf.ptl 10 x=2000 y=450 z=1870 Ktype=1 top=0 Symmetry=0 0
LOGICAL AddattrPI(OBJECT <Obj>, INT <LibID>, INT <ProtoNum>)
LOGICAL AddattrPI(OBJECT <Obj>, STRING <LibName>, INT <ProtoNum>)
Функция AddattrPI создает и присваивает объекту <Obj>
атрибут $ProtoInfo по scratch-атрибуту. Функция принимает на вход объект <Obj>
, которому будет присвоен атрибут, ID библиотеки прототипов <LibID>
или имя библиотеки прототипов <LibName>
и 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);