Работа со структурными объектами
Данные команды не создают геометрических объектов, а служат для добавления, извлечения, развала структурных объектов, представляющих собой совокупность одного или нескольких структурных или геометрических объектов, то есть группу.
Группировка объектов[править | править код]
[#var] group <Objects>
Команда group создаёт группу из объектов <Objects>
.
Если задана #var, то переменной var присвоится ссылка на созданную группу.
ЛСК созданной группы будет расположена в ПСК.
Добавление объектов в группу[править | править код]
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>
должны быть структурными объектами типа "контур" или "группа".
Создание контура[править | править код]
Команда 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 Scan_Scene Array "UnitPos==1";
Изменение цвета у объекта в группе[править | править код]
Logical ChObjColorG(object <Obj>, int <Color>)
Функция изменяет цвет объекта <Obj>
на цвет <Color>
(целое число от 0 до 239). Функция возвращает:
- 1 – успешное завершение функции
- 0 – ошибка.