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

Материал из K3-Macro
Макро | Создание макропрограмм | Переменные и выражения | Вызов из ZIP | Типовые параметры | Создание геом. объектов | Буфер обмена | Сценарии | Параметрические библиотеки | Геометрические характеристики | Атрибуты | Структурные объекты | Текстовые файлы | Системные параметры | Работа с файлами | Редактирование объектов | Удаление объектов | Размеры | Штриховка | Объект «Текст» | Камера | Работа с видом | Наборы параметров | Запрос информации у пользователя | Фильтры | Слои | Графы | Универсальные плоские объекты | Функции работы с системой | Функции работы с объектами сцены | Работа с динамически подключаемыми библиотеками | Функции работы с массивами | Работа со строками | Математические функции | Работа с файлами DBF dBASE IV | Унифицированная работа с базами данных | Вычисление выражений | Присвоение имени объекту | Откатка и восстановление команд | Изменение режима трассировки макропрограмм | Вызов внешних приложений и задач | Проверка условия | Проверка типа переменной | Установка статуса вывода сообщений | Выдача системного сообщения | Выбор объектов | Версия системы | Информация о системе | Проверка принадлежности к списку | Помещение строки в буфер команд | Получение метапути | Установка курсора ожидания | Мебельные команды и функции для макропрограммирования‎

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

Группировка объектов[править | править код]

[#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 выдаст соответствующий запрос о том, что нужно выбрать продолжаемый объект, а в макропрограмме такое невозможно.

path <Object>. Какой из объектов включать в контур — отрезок или дугу?

Ключ 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 – ошибка.

Макро | Создание макропрограмм | Переменные и выражения | Вызов из ZIP | Типовые параметры | Создание геом. объектов | Буфер обмена | Сценарии | Параметрические библиотеки | Геометрические характеристики | Атрибуты | Структурные объекты | Текстовые файлы | Системные параметры | Работа с файлами | Редактирование объектов | Удаление объектов | Размеры | Штриховка | Объект «Текст» | Камера | Работа с видом | Наборы параметров | Запрос информации у пользователя | Фильтры | Слои | Графы | Универсальные плоские объекты | Функции работы с системой | Функции работы с объектами сцены | Работа с динамически подключаемыми библиотеками | Функции работы с массивами | Работа со строками | Математические функции | Работа с файлами DBF dBASE IV | Унифицированная работа с базами данных | Вычисление выражений | Присвоение имени объекту | Откатка и восстановление команд | Изменение режима трассировки макропрограмм | Вызов внешних приложений и задач | Проверка условия | Проверка типа переменной | Установка статуса вывода сообщений | Выдача системного сообщения | Выбор объектов | Версия системы | Информация о системе | Проверка принадлежности к списку | Помещение строки в буфер команд | Получение метапути | Установка курсора ожидания | Мебельные команды и функции для макропрограммирования‎