Работа с мебельными состояниями
В процессе работы K3-Мебель в памяти содержит информацию о текущих установках для будущих мебельных изделий (тип кромки, тип крепежа и пр.), текущих установках проектирования (номер текущего каркаса, максимальное число каркасов и пр). Комплекс таких сведений называется состоянием среды.
В K3-Мебель существуют два типа состояние среды — состояние проектирования и состояние построения.
Каждое состояние представляет собой набор скалярных переменных и массивов. Переменные и массивы могут быть помещены в набор, могут быть прочитаны из набора. Сами же наборы могут быть помещены в стек наборов и извлечены из стека наборов.
В данном разделе описаны функции работы с состояниями. В ряде этих функций присутствует параметр <InstNum>
— номер состояния: Этот параметр может принимать два значения:
1 — Состояние проектирования.
2 — Состояние построения.
Новое текущее состояние
INT InitInst(INT <InstNum>)
Функция InitInst заводит новое текущее состояние с номером <InstNum>
. Предыдущее состояние (то, с которым работали до сих пор) теряется. Новое состояние не имеет ни одной переменной.
Функция возвращает число запомненных состояний данного номера <InstNum>
.
Работа со стеком состояний
INT PushInst(INT <InstNum>)
Функция PushInst помещает текущее состояние в стек. Текущим становится новое состояние с переменными, определенными в запомненном состоянии. Чтобы обнулить эти переменные, нужно вызвать функцию InitInst
.
Функция возвращает число запомненных состояний данного номера <InstNum>
.
INT PopInst(INT <InstNum>)
Функция PopInst извлекает из стека последнее запомненное состояние. Текущим становится новое состояние. Предыдущее — теряется. Число запомненных состояний уменьшается на 1. Функция обратна PushInst
.
Функция возвращает число запомненных состояний данного номера <InstNum>
.
Собрать и раздать состояние
LOGICAL CollectInst(INT <InstNum>)
Функция CollectInst "собирает" состояние из переменных, чьи имена заданы в системе и записанных в файлах состояния. То есть функция записывает в память состояния значения переменных и массивов, которые заданы в системе и записаны в файлах состояния. Текущее состояние теряется.
Функция возвращает 1 — в случае успеха, 0 — в случае ошибки.
LOGICAL ExploreInst(INT <InstNum>)
Функция ExploreInst "раздает" состояние в переменные, чьи имена заданы в системе и записанных в файлах состояния. То есть Функция присваивает переменным K3 (калькуляторным переменным) значения переменных состояния.
Функция возвращает 1 — в случае успеха, 0 — в случае ошибки.
Переменные и массивы состояния
LOGICAL GetVarInst(INT <InstNum>, STRING <VariableName>, VARNAME <VarName> , VARIANT <Default>[, INT <FirstIndex>[, INT <SecondIndex>]])
Функция GetVarInst записывает в калькуляторную переменную <VarName>
значение переменной состояния с именем <VariableName>
. Если переменной состояния с именем <VariableName>
отсутствует, переменной <VarName>
присваивается значение по умолчнию <Default>
.
Функция возвращает 1 — в случае успеха, 0 — в случае ошибки.
Если заданы переменные <FirstIndex>
и <SecondIndex>
, функция записывает в переменную <VarName>
значение, которое содержит переменная-массив состояния по индексу [<FirstIndex>,<SecondIndex>]
. Если массив одномерный, то значение <SecondIndex>
должно быть не задано. Если что-то напутано с размерностью массивов, то функция возвращает 0.
LOGICAL SetVarInst(INT <InstNum>, STRING <VariableName>[, VARNAME <VarName> [, INT <FirstIndex>[, INT <SecondIndex>]]])
Функция SetVarInst записывает в переменную состояния <VariableName>
значение калькуляторной переменной с именем <VarName>
.
Функция возвращает 1 — в случае успеха, 0 — в случае ошибки.
Если заданы переменные <FirstIndex>
и <SecondIndex>
, функция записывает в переменную-массив <VariableName>
по индексу [<FirstIndex>,<SecondIndex>]
значение, которое содержит переменная <VarName>
. Если массив одномерный, то значение <SecondIndex>
должно быть не задано. Если что-то напутано с размерностью массивов, то функция возвращает 0.
Если не задано значение <VarName>
, то функция удаляет из состояния <InstNum>
переменную с именем <VariableName>
. Если такой переменной в состоянии не было, то функция ничего не делает.
LOGICAL GetArrInst(INT <InstNum>, STRING <ArrayName>, VARNAME <ArrName>)
Функция GetArrInst записывает в калькуляторный массив <ArrName>
значение переменной-массива состояния с именем <ArrayName>
.
Функция возвращает 1 — в случае успеха, 0 — в случае ошибки.
Массив <ArrName>
должен быть предварительно определен и его размерность должна соответствовать размерности переменной-массива состояния.
LOGICAL SetArrInst(INT <InstNum>, STRING <ArrayName>[, VARNAME <ArrName>])
Функция SetArrInst записывает в переменную-массив состояния <ArrayName>
значение массива с именем <ArrName>
.
Функция возвращает 1 — в случае успеха, 0 — в случае ошибки.
Массив <ArrName>
должен быть предварительно определен и его размерность должна соответствовать размерности переменной-массива состояния.
Если не задано значение <ArrName>
, то функция удаляет из состояния <InstNum>
массив с именем <ArrName>
.
INT FindVarInst(INT <InstNum>, STRING <VariableName>)
Функция FindVarInst ищет в состоянии переменную с именем <VariableName>
и возвращает 0 — в случае неудачи и 1 — в случае успеха.
INT FindArrInst(INT <InstNum>, STRING <ArrayName>)
Функция ищет в состоянии переменную-массив с именем <ArrayName>
и возвращает 0 — в случае неудачи и m*100000+n для массива, где m и n — размерности массива в случае успеха.
Количество состояний
INT GetNumInst(INT <InstNum>)
Функция GetNumInst возвращает число запомненных состояний в стеке.
Удалить состояние
LOGICAL FreeInst(INT <InstNum>)
Функция FreeInst удаляет из памяти все состояния с номером <InstNum>
. Функция нужна, как правило, для создания нового проекта.
Функция возвращает 1 — в случае успеха, 0 — в случае ошибки.
Функция удаляет полностью весь стек состояний. |
Примеры
a=initinst(1); b=initinst(2); a=pushinst(1); b=pushinst(2); a=getvarinst(1,"g_KarkasNumb",qqq); //-- Проверить, чему равно qqq a=setvarinst(1,"PrMater",PrMater); a=setvarinst(1,"www",PrMater); a=getvarinst(1,"www",qqq); //-- Проверить, чему равно qqq a=getnuminst(1); b=getnuminst(2); a=findvarinst(1,"www"); //-- Проверить, чему равно a a=findvarinst(2,"www"); //-- Проверить, чему равно a a=popinst(1); PrMater=1000; a=collectinst(1); //-- Проверить, чему равно PrMater b=pushInst(1); a=exploreinst(1); //-- Проверить, чему равно PrMater a=popInst(1); a=popInst(1); a=popInst(1); a=exploreinst(1); //-- Проверить, чему равно PrMater; b=freeInst(1); a=freeinst(2);
Очистить состояние
LOGICAL ClearInst(INT <InstNum>)
Функция ClearInst очищает текущее состояние. Функция возвращает 1 в случае успешного завершения, 0 — в случае ошибки