Указание мебельных объектов
MbGet <Prompt> <Params>
Команда MbGet позволяет указывать мебельный объект в соответствии с параметрами <Params>. Строка <Prompt> задает подсказку для выбора.
Указание торца панели
MbGet <Prompt> panel <IDPoly> <IDLine> [separately | together] [band] [fix] [butt] ^x,y,z [^x1,y1,z1]
Команда выбирает объект Панель, попавший в ловушку с координатами x,y,z. При этом, если в ловушку попал торец панели (он подсвечивается), то в переменные <IDPoly> <IDLine> попадет номер контура в рамках панели и номер элемента контура соответственно. Эти значения можно использовать для назначения крепежа, кромок и пр. на торцы панели. Если при указании панели не выбран ни один торец, а указана только панель, то команда попросит указать торец той панели, которая выбрана при предыдущем шаге.
Если используется необязательный ключ separately, то указание торца панели происходит принудительно в два этапа. Если ввести ключ together, то выбор торца панели происходит по предыдущему сценарию (сразу торец и панель, а если это невозможно, то поочередно сначала панель, а потом торец).
Необязательные ключи band, fix и butt включают подсказку с типом кромки, крепежа и торцевой обработки соответственно.
Пример:
#hobj MbGet "Укажите торец мебельной панели" panel IdPoly IdLine band fix butt =idPoly 1 =idLine 5 =hobj Не имеющий литерального представления тип данных: 16
Указание края профиля
MbGet <Prompt> profile <Begin> [separately | together] [angle] ^x,y,z [^x1,y1,z1]
Команда выбирает объект Профиль, попавший в ловушку с координатами x,y,z. При этом, если в ловушку попал конец профиля (он подсвечивается), то в переменную <Begin> попадет номер конца профиля (0 — начало, 1 — конец). Это значение можно использовать для назначения угла подрезки конца профиля. Если при указании профиля не выбран ни один конец, а указан только профиль, то команда попросит указать конец того профиля, который выбран при предыдущем шаге.
Если используется необязательный ключ separately, то указание конца профиля происходит принудительно в два этапа. Если ввести ключ together, то выбор конца профиля происходит по предыдущему сценарию (сразу конец и профиль, а если это невозможно, то поочередно сначала профиль, а потом конец).
Необязательный ключ angle включает подсказку с углом подреза профиля.
Пример:
#hobj MbGet "Укажите конец мебельного профиля" profile Begin angle =begin 0 =hobj Не имеющий литерального представления тип данных: 16
Указание ниши
#hObj MbGet <Prompt> niche <XGab> <YGab> <ZGab> ^x,y,z
Команда выбирает нишу, попавшую в ловушку с координатами x,y,z. Команда перемещает текущую систему координат в правый нижний дальний угол ниши. Сама ниша при этом подсвечивается и показываются ее габариты. Габариты ниши по осям X, Y, Z присваиваются переменным <XGab> <YGab> <ZGab> соответственно.
либо
#hObj MbGet <Prompt> niche <arrout> ^x,y,z
hObj — имя переменной, в которую будет занесена ссылка на изделие или каркас, в котором указана ниша
arrout — массив с выходными данными из 15 элементов:
arrout[1]-[3]— элементы, в которые будут занесены габариты указанной ниши
arrout[4]-[9]— флаги наличия панелей по сторонам ниши в порядке — нижняя, верхняя, задняя, передняя, правая, левая
arrout[10]-[15]— указатели на панели образующие нишу в том же порядке
ПСК будет установлена в ЛСК указанной ниши. Положение ЛСК ниши зависит от исходного положения ПСК от открытости сторон ниши
Пример1:
NULLOUT=getsnap(); MbGet "Укажите нишу" Niche XGab, YGab, ZGab =XGab; 500 =YGab; 500 =ZGab; 164 NULLOUT=ReSnap();
Пример2:
defarr arrout[15]; NULLOUT=getsnap(); #hobj Mbget "Укажите нишу" niche arrout NULLOUT=ReSnap(); PutMsg(arrout) arrout[1]=500 arrout[2]=500 arrout[3]=164 arrout[4]=1 arrout[5]=1 arrout[6]=0 arrout[7]=0 arrout[8]=1 arrout[9]=1 arrout[10]=Группа 0DECBF88 arrout[11]=Группа 0DECEDF0 arrout[12]=Группа 0DAE3BE8 arrout[13]=Группа 0DAE3BE8 arrout[14]=Группа 0DAE4188 arrout[15]=Группа 0DAE3D50 =hobj; Не имеющий литерального представления тип данных: 16
Установка панели
MbGet <Prompt> {shell | post | wall | cutwall} [exactly] [regular] [ongravitation | offgravitation] <ArrIn> <ArrOut> ^x,y,z
Команда определяет положение панели (полки — shell, стойки — post, утопленные стенки — wall, врезные стенки — cutwall) в нише, попавшей в ловушку с координатами x,y,z.
Массив <ArrIn> содержит входные параметры для построения.
<ArrIn>[1]— толщина "резиновой" панели
Массив <ArrOut> содержит выходные параметры.
<ArrOut>[1], <ArrOut>[2], <ArrOut>[3]— координаты правого нижнего дальнего угла панели
<ArrOut>[4], <ArrOut>[5]— габариты "резиновой" панели
<ArrOut>[6]— число "резиновых" панелей (для кратного дублирования)
<ArrOut>[7]— сдвиг "резиновых" панелей (для кратного дублирования)
<ArrOut[8]>—<ArrOut[13]>— признак наличия панели по нижней, верхней, задней, передней, правой и левой стороне соответственно
<ArrOut[14]>— высота ниши, куда установлена панель
<ArrOut[15]>—<ArrOut[20]>— ссылки на панели по нижней, верхней, задней, передней, правой и левой стороне соответственно
Ключи ongravitation и offgravitation позволяют включить и выключить соответственно "притяжение" точки установки "панели" к панелям. Работать с включенном режимом притяжения удобней.
Ключ exactly позволяет указать положение "панели" точно в диалоговом окне, пример которого представлен ниже.
ПСК будет установлена в ЛСК указанной ниши. Положение ЛСК ниши зависит от исходного положения ПСК
Пример:
defarr ArrIn[1], ArrOut[7]; ArrIn[1]=20; // Толщина панели MbGet "Укажите положение" shell ArrIn, ArrOut : =ArrOut[1]; 0 =ArrOut[2]; 0 =ArrOut[3]; 127 =ArrOut[4]; 556 =ArrOut[5]; 600 =ArrOut[6]; 1 =ArrOut[7]; 407
Указание ниши попанельно
MbGet <Prompt> {door | backwall} {Panel | Carcase} <ArrOut> ^x1,y1,z1, ^x2,y2,z2, [^x3,y3,z3, ^x4,y4,z4]
Команда просит последовательно указать два или четыре торца панели или каркаса, которые будут определять нишу. Первые два указания определяют положение и размер ниши по одному направлению, два других указания — по перпендикулярному направлению. В процессе указания будет подсказка выбранной ниши. По окончании система координат устанавливается в правый нижний дальний угол указанной ниши.
Ключи Panel и Carcase позволяют указать, определяется торец панели (Panel) или каркаса (Carcase). В случае панели торец указать можно явно или последовательно указав саму панель и торец на уже выбранной панели (см. Указание торца панели).
В массив <ArrOut> последовательно заносятся:
<ArrOut>[1]— ссылка на первый указанный объект
<ArrOut>[2]— "сторона открывания" — направление ниши относительно первой панели
- 1 — Открывание слева
- 2 — Открывание справа
- 3 — Открывание сверху
- 4 — Открывание снизу
<ArrOut>[3],<ArrOut>[4],<ArrOut>[5]— координаты первой точки ниши в СК ниши
<ArrOut>[6],<ArrOut>[7],<ArrOut>[8]— координаты второй точки ниши в СК ниши
<ArrOut>[9],<ArrOut>[10],<ArrOut>[11]— координаты третьей точки ниши в СК ниши
<ArrOut>[12],<ArrOut>[13],<ArrOut>[14]— координаты четвертой точки ниши в СК ниши
<ArrOut>[15],<ArrOut>[16],<ArrOut>[17]— габариты ниши по осям X,Y,Z
<ArrOut>[18],<ArrOut>[19],<ArrOut>[20]— ссылки на второй, третий и четвертый указанные объекты соответственно.
Разница между ключами door и backwall в том, что при использовании ключа door ниша всегда развернута "лицом" наружу. Это нужно, чтобы, например, ручка двери всегда стояла вовне. При использовании ключа backwall поворота ниши не происходит и ниша ориентирована так же, как и локальная система координат объекта, в котором указывается ниша. Это удобно при создании задний стенок.
| Глубина ниши по оси Y всегда устанавливается равной нулю |
Пример:
defarr ArrOut[17]; MbGet "Укажите положение" door ArrOut
Установка профиля
MbGet <Prompt> line <ArrIn> <ArrOut> [rotate | flip ] [back] [exactly] [ongravitation | offgravitation] ^x,y,z
Команда просит указать положение "профильного объекта" (объекта, протяженного только в одном направлении) в зависимости от ключей и параметров в нише, на которую указывает ловушка с координатами x,y,z.
<ArrIn> — массив входных параметров для построения. Он содержит:
<ArrIn>[1]— зарезервировано
<ArrIn>[2]— флаг, нужно ли учитывать двери при установке
- 0 — не нужно
- 1 — нужно
<ArrIn>[3]— угол в градусах — шаг угла для контекстного меню "поворот" (ключrotate). На этот угол будет поворачиваться "профиль" вокруг своей оси при каждом выборе пункта меню "поворот" (указании ключаrotate).
<ArrIn>[4]— зарезервировано
<ArrIn>[5], <ArrIn>[6]— габариты сечения "профиля" по оси X и Y соответственно
<ArrIn>[7]— зарезервировано
<ArrIn>[8], <ArrIn>[9]— сдвиг габаритов сечения "профиля" относительно середины этого профиля
<ArrOut> — массив выходных параметров для построения. Он содержит:
<ArrOut>[1]— ссылка на объект каркаса или панели, по которому осуществляется установка "профиля"
<ArrOut>[2], <ArrOut>[3], <ArrOut>[4]— координаты точки установки "профиля" в системе координат "профиля" (должна быть 0,0,0)
<ArrOut>[5], <ArrOut>[6], <ArrOut>[7]— координаты конечной точки установки "профиля" в системе координат "профиля" (должна быть 'L,0,0, где L' — длина профиля)
Ключ rotate осуществляет поворот "профиля" на угол <ArrIn>[3] .
Ключ flip позволяет "перевернуть" "профиль". Т.е. поставить его "с ног на голову".
Ключ back позволяет установить "профиль" в сторону, противоположную нише.
Ключи ongravitation и offgravitation позволяют включить и выключить соответственно "притяжение" точки установки "профиля" к панелям. Работать с включенном режимом притяжения удобней.
Ключ exaclty позволяет указать положение «профиля» точно в диалоговом окне:
Пример:
defarr ArrIn[9], ArrOut[7]; ArrIn[2]=0; ArrIn[3]=90; ArrIn[4]=30; ArrIn[5]=20; ArrIn[6]=45; ArrIn[7]=0; ArrIn[8]=-10; ArrIn[9]=-22.5; mbget "Укажите положение" line ArrIn ArrOut : dx=((ArrOut[5]-ArrOut[2])*(ArrOut[5]-ArrOut[2])); dy=((ArrOut[6]-ArrOut[3])*(ArrOut[6]-ArrOut[3])); dz=((ArrOut[7]-ArrOut[4])*(ArrOut[7]-ArrOut[4])); d=sqrt(dx+dy+dz); =d 600
Установка комплектующего
MbGet <Prompt> point <ArrIn> <ArrOut> [rotate | flip ] [back] [exactly] [mirror] [^x,y,z]
Команда просит указать положение «комплектующего» (штучного элемента) в зависимости от ключей и параметров в нише, на которую указывает ловушка с координатами x,y,z.
<ArrIn> — массив входных параметров для построения. Он содержит:
<ArrIn>[1]— ссылка на устанавливаемый объект — комплектующий или 0, если вместо комплектующего в момент задания положения будем рисовать только габаритный бокс, параметры которого должны быть заданы в ArrIn и не должны быть нулевыми
<ArrIn>[2]— флаг, нужно ли учитывать двери при установке
- 0 — не нужно
- 1 — нужно
<ArrIn>[3]— угол в градусах — шаг угла для контекстного меню "поворот" (ключrotate). На этот угол будет поворачиваться "комплектующий" вокруг своей оси при каждом выборе пункта меню "поворот" (указании ключа rotate).
<ArrIn>[4],<ArrIn>[5],<ArrIn>[6]— габариты комплектующего, или (0,0,0), если габариты берутся из объекта-комплектующего
<ArrIn>[7],<ArrIn>[8],<ArrIn>[9]— положение задаваемой точки относительно габаритов комплектующего или (0,0,0) если задан объект — комплектующий. Если объект-комплектующий не задан, заданные габариты (xg,yg,zb), то положение задаваемой точки обычно (-xg/2,0,-zg/2) — центр основания габаритного бокса;
<ArrIn>[10],<ArrIn>[11],<ArrIn>[12]— координаты оси в ЛСК комплектующего, которую надо разместить перпендикулярно к стороне ниши. Если задан объект-комплектующий, то это обычно (0,1,0)
<ArrOut> — массив выходных параметров для построения. Он содержит:
<ArrOut>[1]— ссылка на объект каркаса или панели, по которому осуществляется установка комплектующего
<ArrOut>[2],<ArrOut>[3],<ArrOut>[4]— координаты точки установки комплектующего в системе координат комплектующего (должна быть 0,0,0)
<ArrOut>[5],<ArrOut>[6],<ArrOut>[7]— координаты конечной точки установки комплектующего в системе координат комплектующего (должна быть вдоль оси X)
Ключ rotate осуществляет поворот комплектующего на угол <ArrIn>[3] .
Ключ flip позволяет "перевернуть" комплектующий. Т.е. поставить его "с ног на голову".
Ключ back позволяет установить комплектующий в сторону, противоположную нише.
Ключ mirror задаёт симметрию комплектующего относительно оси X ЛСК комплектующего
Ключ exaclty позволяет указать положение комплектующего точно в диалоговом окне:
Пример:
defarr ArrIn[12], ArrOut[7]; ArrIn[2]=0; ArrIn[3]=90; ArrIn[4]=30; ArrIn[5]=20; ArrIn[6]=45; ArrIn[7]=0; ArrIn[8]=-10; ArrIn[9]=-22.5; ArrIn[10]=0; ArrIn[11]=0; ArrIn[12]=1; mbget "Укажите положение" point ArrIn ArrOut :
Установка крепежа или комплектующей вдоль торца панели
MbGet <Prompt> fix inarray[6] outarray[7]
Команда запрашивает точку установки крепежа\комплектующей на заданном торце заданной панели. В результате команда устанавливает ПСК в указанную точку указанного торца.
inarray — входной массив размерностью 6,
- в 1-м — Объект — панель, по торцу которого надо перемещать точку
- в 2-м — Id поли
- в 3-м — ID линии (эти параметры приходят из mbget Panel)
- в 4-м — Объект, который надо перемещать вместе с точкой, м.б. 0
- в 5-м — шаг размещения
- в 6-м — шаг угла поворота (для ключа "Поворот")
габариты устанавливаемого объекта и другие сдвиги вычисляются по входному объекту.
outarray — выходной массив размерностью 7.
В первом элементе указатель на панель или каркас. с 2 по 4 — координаты точки установки, с 5 по 7 — координаты точки направления.
По окончании команды устанавливается ПСК, в которой надо разместить объект.
поэтому выходной массив потерял смысл, можно использовать для справки
Указание связного фрагмента торца панели
MbGet <Prompt> PanelCrd <ArrCrd> [separately | together] [band] [fix] [butt] ^x,y,z [^x1,y1,z1]
Команда выбирает объект Панель, попавший в ловушку с координатами x,y,z. При этом, если в ловушку попал торец панели,или его фрагмент (он подсвечивается), то в массив <ArrCrd> попадет информация об этом торце или его фрагменте. Если при указании панели не выбран ни один торец, а указана только панель, то команда попросит указать торец той панели, которая выбрана при предыдущем шаге.
Если используется необязательный ключ separately, то указание торца панели происходит принудительно в два этапа. Если ввести ключ together, то выбор торца панели происходит по предыдущему сценарию (сразу торец и панель, а если это невозможно, то поочередно сначала панель, а потом торец).
Массив <ArrCrd> должен быть предварительно описан и должен содержать не менее 10 элементов, в которые помещаются:
<ArrCrd>[1]— тип выбранного фрагмента торца:
- 1 — отрезок
- 2 — дуга
Если фрагмент <ArrCrd>[1] = 1 (отрезок), то <ArrCrd>[2...7] — координаты X, Y, Z начала и конца отрезка в текущей системе координат
Если фрагмент <ArrCrd>[1] = 2 (дуга), то <ArrCrd>[2...10] — координаты X, Y, Z начала, середины и конца дуги в текущей системе координат
Необязательные ключи band, fix и butt включают подсказку с типом кромки, крепежа и торцевой обработки соответственно.
Пример:
defarr arrin[10]; #hobj MbGet "Укажите торец мебельной панели" PanelCrd arrin band fix butt : putmsg(arrin); arrin[1]=1 arrin[2]=2000 arrin[3]=600 arrin[4]=1523 arrin[5]=0 arrin[6]=600 arrin[7]=1523 arrin[8]=0 arrin[9]=0 arrin[10]=0 =hobj Не имеющий литерального представления тип данных: 16
| Торец типа "сплайн" не выбирается |
Указание положения профильного объекта по двум отрезкам
MbGet <Prompt> 2segment <ArrIn> <ArrOut> [ {ortho | along } ] [rotate] ^x,y,z
Команда просит указать положение «профильного объекта» (объекта, протяженного только в одном направлении) по двум отрезкам в зависимости от ключей и параметров в нише, на которую указывает ловушка с координатами x,y,z.
<ArrIn> — массив входных параметров для построения. Он содержит:
<ArrIn>[1]— ID устанавливаемого профиля в номенклатурном справочнике или 0<ArrIn>[2]— Шаг размещения вдоль отрезков<ArrIn>[3]— Угол в градусах — шаг угла для контекстного меню "поворот" (ключ rotate). На этот угол будет поворачиваться "профиль" вокруг своей оси при каждом выборе пункта меню "поворот" (указании ключа rotate).<ArrIn>[4]–<ArrIn>[6]— Габариты устанавливаемого профиля. Эти габариты будут отображаться в "резиновом" параллелепипеде — отображении будущего профиля Если в первом элементе массива задан 0, то габариты будут браться из свойств профиля, заданного в первом элементе.<ArrIn>[7]–<ArrIn>[9]— Сдвиг "резинового" параллелепипеда<ArrIn>[10]— Ссылка на первый опорный элемент. Он обязательно должен быть профильным элементом или 0. В случае, если задан не ноль, то происходит расчет подреза профильного элемента<ArrIn>[11]— Ссылка на второй опорный элемент. Он обязательно должен быть профильным элементом или 0. В случае, если задан не ноль, то происходит расчет подреза профильного элемента<ArrIn>[12]— Режим построения профильного элемента:
- 0 — просто отрезок по параметру длины
- 1 — отрезок, перпендикулярно 2-му опорному профилю
- 2 — отрезок, параллельный указанной плоскости
<ArrIn>[13]–<ArrIn>[15]— Координаты первой точки 1-го отрезка<ArrIn>[16]–<ArrIn>[18]— Координаты второй точки 1-го отрезка<ArrIn>[19]–<ArrIn>[21]— Координаты первой точки 2-го отрезка<ArrIn>[22]–<ArrIn>[24]— Координаты второй точки 2-го отрезка<ArrIn>[25]— зарезервировано<ArrIn>[26]–<ArrIn>[29]— Нормаль плоскости параллельности. Если не задана, то плоскостью параллельности считается плоскость XOY.
Команда устанавливает ПСК в положение, в котором нужно разместить "профильный объект".
<ArrOut> — массив выходных параметров для построения. Он содержит:
<ArrOut>[1]— Рассчитанная длина профильного элемента<ArrOut>[2]— Рассчитанный угол профильного элемента с осью X 1-го опорного профиля в плоскости<ArrOut>[3]— Рассчитанный угол профильного элемента и плоскости XOZ 1-го опорного профиля<ArrOut>[4]— Толщина 1-го опорного профиля в направлении построения<ArrOut>[5]— Смещение 1-го опорного профиля в направлении построения<ArrOut>[6]— Рассчитанный угол профильного элемента с осью X 2-го опорного профиля в плоскости<ArrOut>[7]— Рассчитанный угол профильного элемента и плоскости XOZ 2-го опорного профиля<ArrOut>[8]— Толщина 2-го опорного профиля в направлении построения<ArrOut>[9]— Смещение 2-го опорного профиля в направлении построения
Ключ rotate осуществляет поворот профильного элемента на угол <ArrIn>[3] .
Ключ ortho осуществляет установку профильного элемента перпендикулярно второму опорному профилю (режим <ArrIn>[12]=1)
Ключ along осуществляет установку профильного элемента вдоль линии, соединяющей точки первого и второго опорного профиля, деля их в одинаковой пропорции (режим <ArrIn>[12]=0)
Пример:
defarr arrin[29], arrout[9];
switch autosingle on;
selbyattr "(Left(FurnType,2)==\"02\")||iif(IsAssign(\"Posit\"),Posit==39,1)" partly // (Left(FurnType,2)==\"02\")||iif(IsAssign(\"Posit\"),Posit==39,1)
prompt "Укажите первый профиль:" : ;
switch autosingle off;
if (sysvar(61)==0)
{
exit;
}
point1=getselnum(1);
switch autosingle on;
selbyattr "(Left(FurnType,2)==\"02\")||iif(IsAssign(\"Posit\"),Posit==39,1)" partly
prompt "Укажите второй профиль:" : ;
switch autosingle off;
point2=getselnum(1);
arrin[1]=2688; // ID текущего профиля
arrin[2]=10; // Шаг
arrin[3]=90; // Угол
arrin[4]=0; // Габариты, если нулевые — то расчет в коде по объекту
arrin[5]=0;
arrin[6]=0;
arrin[7]=0; // Сдвиг 0
arrin[8]=0;
arrin[9]=0;
arrin[10]=point1 // Объект 1 профиля
arrin[11]=point2 // Объект 2 профиля
arrin[12]=1 // режим установки по умолчанию
arrin[26]=1 // Вектор нормали к плоскости параллальности (для режима 2)
arrin[27]=1 //
arrin[28]=1 //
onerror final;
NULLOUT=getsnap();
mbget "Укажите положение:" 2segment arrin arrout :
Line 0 0 0 arr[1] 0 0 ;
exit;