Выборка информации об объектах сцены
Данные функции возвращают либо сам объект, либо различную информацию об объекте сцены. Также в данном разделе присутствует ряд функций, приписывающих ту или иную информацию уже существующему объекту.
Получение объекта по номеру
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>
. Функция возвращает количество заполненных элементов массива (см. таблицу):
|
| ||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Где:
- (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 информации
Данные функции используются в основном, при работе с длинномерами в приложении К3-Мебель.
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);