Работа со структурными объектами

Материал из K3-Macro
Версия от 15:14, 29 июля 2021; Aleksandro (обсуждение | вклад) (Новая страница: «Category:Макро Данные команды не создают геометрических объектов, а служат для добавления...»)
(разн.) ← Предыдущая версия | Текущая версия (разн.) | Следующая версия → (разн.)

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

Группировка объектов

group <Objects>

Команда group создаёт группу из объектов <Objects>.

Добавление объектов в группу

add [partly] <Object> <Objects>

Команда add добавляет объекты <Objects> в группу <Object>.

Извлечение объектов из группы

extract [partly] <Object> <Objects>

Команда extract извлекает объекты <Objects> из группы <Object>.

Удаление объекта в группе

delobjing <Object>

Команда delobjing удаляет объект <Object> из группы, в которую он входит.

Замена объекта в группе

replobjing <Object1> <Object2>

Команда replobjing заменяет объект <Object1>, находящийся внутри группы на объект <Object2>. Объекты <Object1> и <Object2> должны быть структурными объектами типа "контур" или "группа".

Создание контура

Файл:Img93.png
path <Object>

Команда path имеет несколько режимов работы, представленных ниже.

path <Object> create|dublicate

Команда создаёт контур из отрезков, дуг окружностей, сплайнов. Объект <Object> задаёт начальный объект контура. Объекты в контур включаются при выполнении следующих условий: объект является объектом нужного типа (отрезок, дуга окружности, сплайн) и начальная точка каждого последующего объекта совпадает с конечной точкой предыдущего объекта, начиная с объекта <Object>. В макропрограммах использовать такой способ создания контуров не рекомендуется, поскольку возможна неоднозначность, пример которой представлен на рисунке. В интерактивном режиме K3 выдаст соответствующий запрос о том, что нужно выбрать продолжаемый объект, а в макропрограмме такое невозможно.

Ключ create создаёт контур из указанных объектов. При этом сами объекты удаляются.

Ключ dublicate создаёт контур из указанных объектов. При этом сами объекты не удаляются.


path select <Objects> <Object> create|dublicate

Команда создаёт контур из отрезков, дуг окружностей, сплайнов. Объект <Object> задаёт начальный объект контура. Объекты в контур включаются при выполнении следующих условий: объект является объектом нужного типа (отрезок, дуга окружности, сплайн), входит в число выбранных объектов <Objects> и начальная точка каждого последующего объекта совпадает с конечной точкой предыдущего объекта, начиная с объекта <Object>.

Ключ create создаёт контур из указанных объектов. При этом сами объекты удаляются.

Ключ dublicate создаёт контур из указанных объектов. При этом сами объекты не удаляются.


path polyline <Object>

Команда создает контур на основе полилинии <Object>. Исходная полилиния удаляется.

Создание блока

block <Objects> <Point> <Name>

Команда block создаёт объект типа «Блок» с именем <Name> из объектов <Objects> и базовой точкой <Point>.

Вставка блока в сцену

insert <Name> [other <Name1>] <Point1>, …, [other <NameN>] <PointN> done

Команда insert вставляет объект типа «Блок» с именем <Name> в точки с координатами <Point1>, …, <PointN>. Ключ other позволяет указать другое имя блока для вставки.

Создание набора

frame <Objects>

Команда frame создаёт набор (каркас) из линейных объектов <Objects>.

Развал структурных объектов

explode <Objects>

Команда explode разваливает структурные объекты <Objects>.

Однако, в системе присутствуют объекты, которые не разваливаются при помощи команды explode.

В частности, в системе Мебель это:

  • Мебельная панель
  • Мебельный профиль
  • Мебельный каркас
  • Мебельная комната
  • Комплектующий
  • Линейка свободного крепежа
  • Длинномер
  • Линейка свободного отверстия

Поиск объекта в группе - GetObjHold, FindObjHoldG

logical GetObjHold(object <Obj>, varname <Hold>)

Функция присваивает переменной <Hold> ссылку на родителя объекта <Obj>. Функция возвращает:

1 – присвоение прошло успешно
0 – ошибка (объект не имеет родителя и пр.)


Logical FindObjHoldG(object <Group>, object <Obj>[, varname <Hold>])

Функция проверяет, находится ли объект <Obj> в группе <Group> на любом уровне. Если задан необязательный параметр <Hold>, то ему присваивается ссылка на непосредственного родителя объекта <Obj>. Функция возвращает:

1 – объект <Obj> находится в составе группы <Group>.
0 – объект <Obj> не находится в составе группы <Group>.

Подсчет количества и заполнение массива объектами

GetCntObjG

INT GetCntObjG(OBJECT <Obj>)

Функция возвращает количество объектов первого уровня, входящих в структурный объект <Obj>. Если объект <Obj> не является структурным объектом, функция возвращает ноль.

Пример:

#obj1 circle 0,0,0 100;
#obj2 circle 0,0,100 100;
=GetCntObjG(obj1);
0
#obj3 group obj1,obj2 done;
=GetCntObjG(obj3);
2
#obj4 circle 0,0,200 100;
#obj5 group obj3,obj4 done;
=GetCntObjG(obj5);
2

GetArrObjG, GetCntObjS, GetArrObjS, GetCntObjA

INT GetArrObjG(OBJECT <Obj>, varname ARRAY <Arr>)

Функция заполняет массив <Arr> ссылками на объекты первого уровня структурного объекта <Obj> и возвращает количество заполненных элементов массива.


Int GetCntObjS()

Функция возвращает количество объектов верхнего уровня в сцене. Данная функция полностью аналогична функции SysVar(60).


Int GetArrObjS(varname array <Arr>)

Функция заполняет массив <Arr> ссылками на объекты верхнего уровня в сцене. Функция возвращает количество заполненных элементов массива. Массив предварительно должен быть описан. Если размерность массива меньше количества объектов, функция возвращает ноль.


Int GetCntObjA()

Функция возвращает количество листьев (объектов нижнего уровня) у всех объектов сцены.

Пример:

#obj1 circle 0,0,0 100;
#obj2 circle 0,0,100 100;
=GetCntObjS();
2
#obj3 group obj1,obj2 done;
=GetCntObjS();
1
=GetCntObjA();
2
=SysVar(60);
1

GetCntObjGA

INT GetCntObjGA(OBJECT <Obj>)

Функция возвращает количество листьев (объектов нижнего уровня) у объекта <Obj>. Если объект <Obj> не является структурным объектом, функция возвращает ноль.

ScanScene, ScanAll, ScanG

Int ScanScene(varname array <Arr>[, INTEGER <BegNum>])

Функция заполняет массив <Arr> ссылками на все объекты всех уровней сцены. Вставки (Inserts) считаются одним объектом. Функция возвращает количество заполненных элементов массива. Массив предварительно должен быть описан. Если размерность массива меньше количества объектов, функция заполняет доступные элементы массива. Если задан необязательный параметр <BegNum>, то в массив помещаются ссылки на объекты, начиная с номера <BegNum>.


Int ScanAll(varname array <Arr>)

Функция заполняет массив <Arr> ссылками на все листья (объекты нижнего уровня) сцены. Вставки (Inserts) считаются одним объектом. Функция возвращает количество заполненных элементов массива. Массив предварительно должен быть описан. Если размерность массива меньше количества объектов, функция возвращает ноль.


Int ScanG(object <Obj>, varname array <Arr>)

Функция заполняет массив <Arr> всеми листьями (объектами нижнего уровня) в структурном объекте <Obj>. Функция возвращает количество заполненных элементов массива. Если размерность массива меньше количества объектов, функция возвращает ноль.

Пример:

#c1 circle 0,0,0 10;
#c2 circle 0,0,100 20;
defarr arr[100];
=scang(c1,arr) ;
0
#g1 group c1,c2 done;
=scang(g1,arr);
2
#c3 ciircle 0,0,200 30;
#g2 group g1,c3 done;
=scang(g2,arr);
3

Scan_Scene

Scan_Scene <Array> <Condition>

Команда сканирует все объекты сцены, в том числе и невидимые, и заносит в массив <Array> ссылки на те, для которых заданное логическое выражение <Condition> истинно (выражение в качестве переменных использует имена атрибутов).

В переменную n заносится количество заполненных элементов в массиве.

Если размерность массива меньше количества объектов, удовлетворяющих логическому выражению <Condition>, то оставшиеся объекты в массив не заносятся. Пример:

Defarr Array[100];
#n Scane_Scene Array "UnitPos==1"<

Изменение цвета у объекта в группе

Logical ChObjColorG(object <Obj>, int <Color>)

Функция изменяет цвет объекта <Obj> на цвет <Color> (целое число от 0 до 239). Функция возвращает:

1 – успешное завершение функции
0 – ошибка.