Выборка информации об объектах сцены

Материал из K3-Macro
Макро | Функции работы с объектами сцены | Инициализация списков объектов | Экспорт изображения объектов сцены | Выборка информации об объектах сцены | Функции работы с контурами | Проверка попадания объектов в область

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

Получение объекта по номеру[править | править код]

OBJECT GetObjNum(INT <N>)

Функция возвращает <N>-й объект сцены верхнего уровня в диапазоне от 1 до sysvar(60). Объекты нумеруются, начиная с единицы в порядке добавления в сцену. Следует иметь ввиду, что любая функция или команда редактирования объектов реально удаляет и вновь создает объект с новыми параметрами. То есть, редактируемый объект помещается в конец списка.


OBJECT GetSelNum(INT <N>)

Функция возвращает <N>-й объект из списка выбранных объектов. Список выбранных объектов можно сформировать с помощью команды Select. Так же его создаёт большинство команд, имеющих сценарий группового выбора, например Move, Rotate и т.п.


OBJECT GetObjNumS(INT <N>)

Функция возвращает <N>-й объект сцены на любом уровне. <N> может быть в диапазоне от 0 до sysvar(62).

Определение типа объекта[править | править код]

GetObjType[править | править код]

INT GetObjType(OBJECT <Obj>[, INT VARNAME <BrepType>[, INT VARNAME <BrepKind>]])

Функция возвращает тип объекта <Obj> и разновидность объекта типа Тело или Поверхность (Brep). Результат может принимать следующие значения:

0 — Текст (Text)
1 — Точка (Point)
2 — Отрезок (Line)
3 — Окружность (Circle)
4 — Дуга (Arc)
5 — Контур (Path)
6 — Тело (BRep)
7 — Группа (Group)
10 — Размер (Dim)
11 — Вставка блока (Insert)
12 — Сплайн (Spline)
15 — Набор линий (Frame)
-12 — Плоская область или полилиния (Polyline)
-13 — Источник света (Light)
-14 — Универсальная панель (Panel)
-15 — Полочка-выноска (Note)
-16 — мебельная комната (Room)
-19 — набор треугольников (Triangle)

Для объектов остальных типов функция возвращает отрицательное значение.

Если объект <Obj> имеет тип типа Тело или Поверхность (Brep), то в переменные <BrepType> и <BrepKind> записывается код разновидности и вида объекта соответственно.

<BrepType>:

-1 — Объект <Obj> не является объектом типа Тело или Поверхность (Brep);
0 — Объект <Obj> является объектом типа Тело;
1 — Объект <Obj> является объектом типа Поверхность;
2 — Объект <Obj> является объектом типа Каркас.

<BrepKind>:

-1 — Объект <Obj>: не является объектом типа Тело или Поверхность (Brep);
0 — Объект <Obj>: общего вида;
1 — Объект <Obj>: — параллелепипед;
2 — Объект <Obj>: — цилиндр;
3 — Объект <Obj>: — сфера;
4 — Объект <Obj>: — конус;
5 — Объект <Obj>: — тор;
6 — Объект <Obj>: — призма;
7 — Объект <Obj>: — пирамида;
8 — Объект <Obj>: — эллипсоид;
9 — Объект <Obj>: — шаровой пояс.

Если объект имеет тип (-12) - плоская область или полилиния, то для определения того, к какому конкретно типу относится объект, нужно использовать функцию ContStatus.

Пример:

Point 10 20 30;
Line 0 0 0 100 0 0;
p1=GetObjNum(1);
l1=GetObjNum(2);
=GetObjType(p1);
1
=GetObjType(l1);
2

objtype[править | править код]

objtype <Object>

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

GetObjTypeNm[править | править код]

STRING GetObjTypeNm(OBJECT <Obj>[, INT VARNAME <BrepType>[, INT VARNAME <BrepKind>]])

Функция возвращает имя типа объекта <Obj> и разновидность объекта типа Тело или Поверхность (Brep). Результат может принимать следующие значения:

”Text”, “Point”, ”Line”, ”Circle”, ”Arc”, ”Path”, “BRep”, “Group”, “Dim”, “Insert”, “Spline”, “Frame”, “PolyLine”, “Light”, "Note" и другие в зависимости от приложения (Мебель, Коттедж и пр)

Если объект <Obj> имеет тип типа Тело или Поверхность (Brep), то в переменные <BrepType> и <BrepKind> записывается код разновидности и вида объекта соответственно.

<BrepType>:

-1 — Объект <Obj> не является объектом типа Тело или Поверхность (Brep);
0 — Объект <Obj> является объектом типа Тело;
1 - Объект <Obj> является объектом типа Поверхность;
2 — Объект <Obj> является объектом типа Каркас.

<BrepKind>:

-1 — Объект <Obj> не является объектом типа Тело или Поверхность (Brep);
0 — Объект <Obj> общего вида;
1 — Объект <Obj> — параллелепипед;
2 — Объект <Obj> — цилиндр;
3 — Объект <Obj> — сфера;
4 — Объект <Obj> — конус;
5 — Объект <Obj> — тор;
6 — Объект <Obj> — призма;
7 — Объект <Obj> — пирамида;
8 — Объект <Obj> — эллипсоид;
9 — Объект <Obj> — шаровой пояс.

Работа с геометрией объекта[править | править код]

GetObjGeo[править | править код]

INT GetObjGeo(OBJECT <Obj>, Double array <Arr[15]>)

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

Геометрия объектов
Тип объекта
Элементы массива


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
Точка
x
y
z
Отрезок
xb
yb
zb
xe
ye
ze
Окружность
r
xn
yn
zn
xc
yc
zc
Дуга
r
xn
yn
zn
xc
yc
zc
xb
yb
zb
xe
ye
ze
ab
ar

Где:

(x,y,z) — Координаты точки в ГСК

(xb,yb,zb), (xe,ye,ze) — Координаты начальной и конечной точек отрезка, дуги в ГСК

r - Радиус окружности, дуги в ГСК

(xn,yn,zn) — Вектор нормали окружности, дуги в ГСК

(xc,yc,zc) — Координаты точки центра окружности, дуги в ГСК

ab, ar — Начальный угол и угол раствора дуги в ЛСК

Пример:

#p1 point 10 20 30;
Defarr crd[3];
=GetObjGeo(p1,crd);
3
=crd[1]
10
=crd[2]
20
=crd[3]
30

SetObjGeo[править | править код]

INT SetObjGeo(OBJECT <Obj>, double ARRAY <Arr[15>])

Функция устанавливает геометрическую информацию в объект. Данная функция является обратной к функции GetObjGeo.

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

Получение свойств объекта[править | править код]

INT GetObjVisual(OBJECT <Obj>)

Функция проверяет, включено ли отображение объекта <Obj>. Функция возвращает:

1, если объект <Obj> включен (visible)

0, если объект <Obj> выключен (invisible)

-1, если объект <Obj>выключен, так как выключен его родитель (invisible)

-2, если объект <Obj>выключен, так как выключен слой на котором он лежит (invisible)

-3, произошла какая-то ошибка при определении состояния объекта <Obj>.

Коды ответа -1, -2 и -3 добавлены 18.10.2023. Задачи, собранные до этой даты, возвращают только 1 и 0.


INT GetColor(OBJECT <Obj>)

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


INT GetObjProp(OBJECT <Obj>, variant ARRAY <Arr[5]>)

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

В массив <Arr> заносятся:

arr[1] — индекс цвета объекта (от 0 до 239).

arr[2] — имя слоя объекта

arr[3] — код типа линии объекта

arr[4] — толщина линий объекта в мм

arr[5] — графический коэффициент объекта

Извлечение и запись CSG информации[править | править код]

Данные функции используются в основном, при работе с длинномерами в приложении "Мебель".

CSG - внутренняя структура данных K3, содержащая различную информацию об объекте. Данные CSG и их интерпретация зависят не только от конкретного приложения K3 ("Мебель", "Коттедж" и пр.), но и от типа объекта. Поэтому "просмотреть" всю эту информацию в приложении не представляется возможным. Возможно лишь сохранить ее целиком (GetCsg) в буфер и приписать ее целиком объекту (SetCsg).

Структура данных CSG может содержать различную служебную информацию, необходимую для корректного описания объекта.


void GetCsg(object <Object>)

Функция записывает во внутренний буфер CSG (Constructive Solid Geometry) информацию объекта <Object>. Функция возвращает не имеющий литерального представления адрес памяти, по которому записана CSG информация объекта <Object>.


Object SetCsg(object <Object>, void <CSG>)

Функция приписывает объекту <Object> CSG (Constructive Solid Geometry) информацию, записанную в памяти по адресу <CSG>. Функция возвращает ссылку на объект <Object>. Дальнейшее использование адреса памяти <CSG> недопустимо!

Пример:

objident last 1 obj1;
objident last 2 obj2;
csg=GetCsg(obj1);
booloean sub obj1 obj2 done;
obj1=SetCsg(obj1,csg);

Макро | Функции работы с объектами сцены | Инициализация списков объектов | Экспорт изображения объектов сцены | Выборка информации об объектах сцены | Функции работы с контурами | Проверка попадания объектов в область