Указание мебельных объектов

Материал из K3-Macro
Макро | Мебельные команды и функции | Мебельные объекты | Указание | Создание схемы сборки | Перенумерация | Показ кромок | Показ крепежа | Расстановка крепежа и сверловки | Поиск пятен контакта | Показать информацию | Каталоги стандартных моделей | Сдвиг | Количество | Позиции | Комментарий | Классификатор мебельных элементов | Работа с комплектующими | Дополнительные материалы к модели | Специальная расстановка

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] - указатели на панели образующие нишу в том же порядке

ПСК будет установлена в ЛСК указанной ниши. Положение ЛСК ниши зависит от исходного положения ПСК от открытости сторон ниши

Pluso.png Поскольку данная команда перемещает систему координат, то рекомендуется до перед использованием команды запомнить текущее положение системы координат (например, функцией GetSnap()), а после выполнения команды восстановить запомненное положение (например, функцией ReSnap())

Пример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 поворота ниши не происходит и ниша ориентирована так же, как и локальная система координат объекта, в котором указывается ниша. Это удобно при создании задний стенок.

I.png Глубина ниши по оси Y всегда устанавливается равной нулю

Пример:

defarr ArrOut[17];
MbGet "Укажите положение" door ArrOut
I.png После указания ниши выбранная ниша рисуется перекрещенными линиями. Эти линии реально в сцене не присутствуют, а только показывают выбранную нишу. Эти линии исчезают после выполнения функции resnap(). Поскольку указание ниши перемещает систему координат, рекомендуется до указания ниши запомнить прежнее положение системы координат при помощи функции getsnap(), а после указания и обработки полученных данных вернуть систему координат в прежнее положение функцией resnap(), которая и "сотрет" нишу.

Установка профиля[править | править код]

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> 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
Pluso.png Торец типа "сплайн" не выбирается

Указание положения профильного объекта по двум отрезкам[править | править код]

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;

Макро | Мебельные команды и функции | Мебельные объекты | Указание | Создание схемы сборки | Перенумерация | Показ кромок | Показ крепежа | Расстановка крепежа и сверловки | Поиск пятен контакта | Показать информацию | Каталоги стандартных моделей | Сдвиг | Количество | Позиции | Комментарий | Классификатор мебельных элементов | Работа с комплектующими | Дополнительные материалы к модели | Специальная расстановка