Измерение и вычисление геометрических характеристик
Команды данного раздела вычисляют различные геометрические характеристики объектов.
Определение координат точки
coordinate <Point> [info] done
Команда coordinate определяет координаты точки <Point>
и выводит их в окно ввода команд. Необязательный ключ info
позволяет отобразить параметры точки в диалоговом окне (см. рисунок).
Чтобы сохранить координаты в массиве, нужно перед ключевым словом ввести имя массива из трех и более элементов. Массив должен быть предварительно описан.
Пример:
defarr c[3]; #c coordinate 10,20,40 done; =c[1]; 10 =c[2]; 20 =c[3]; 30
Определение расстояния
distance point <Point1> | object <Object1> point <Point2> object <Object2> [info] [mark] done
Команда distance измеряет расстояние между точкой (point) <Point1>
или объектом (object) <Object1>
и другой точкой <Point2>
или объектом <Object2>
. Ключ info отображает данные о расстоянии в диалоговом окне (см. рисунок). Ключ mark
создает две точки на концах отрезка, соединяющего точки или объекты, между которыми измерено расстояние.
Внимание!
Ключи
point
иobject
взаимоисключающие. По умолчанию измеряется расстояние между точками.
Чтобы сохранить измеренное расстояние в переменной, нужно перед ключевым словом ввести имя переменной.
Пример:
#par distance 0,0,0 100,0,0 done; =par 100
Вычисление длины кривой
clength <Object> done
Команда clength вычисляет длину кривой <Object>.
Чтобы сохранить измеренное расстояние в переменной, нужно перед ключевым словом ввести имя переменной.
Определение угла
Команда angle имеет несколько режимов работы, которые представлены ниже.
angle [acuteangle | normal <Point0>] <Point1> <Point2> <Point3> [info] done
Команда измеряет угол, определяемый точками <Point1>
, <Point2>
и <Point3>
. Точка <Point1>
является вершиной измеряемого угла, а точки <Point2>
и <Point3>
определяют его стороны. Стоит отметить, что измеряется угол, направленный против часовой стрелки между лучами из точки <Point1>
в точки <Point2>
и <Point3>
.Этот угол может быть как больше, так и меньше 180 градусов. Если задан необязательный ключ acuteangle
, то измеряется всегда угол меньше 180 градусов.
Если задан ключ normal
, то угол измеряется не между точками, а между проекциями точек на плоскость, нормаль к которой задается вектором <Point0>
.
Ключ info
отображает данные об угле в диалоговом окне (см. рисунок).
angle 2segment <Object1> <Object2> [info] done
Команда определяет минимальный угол между прямыми, определяемыми отрезками <Object1>
и <Object2>
. Указанные прямые должны пересекаться.
angle 2plane [point <Point1>]<Object1>, ... [point <Point>] <Object2>, … [info] done
Команда определяет угол между двумя плоскостями. Плоскости могут задаваться либо одним объектом (дуга или окружность), либо двумя отрезками, лежащими в одной плоскости, либо отрезком и точкой, либо тремя точками.
Чтобы сохранить измеренный угол в переменной, нужно перед ключевым словом ввести имя переменной.
Определение угла вектора
vangle axis | plane | xy | yz | zx <Object> [info] done
Команда vangle измеряет углы вектора (отрезка) <Object>
с координатными осями (axis
), либо с координатными плоскостями (plane
), либо углы проекции вектора на соответствующую координатную плоскость с координатными осями (xy
, yz
, zx
). Вместо объекта <Object>
допускается указание координат ловушки (<^x,y,z>
), в которую должен попасть выбранный объект. Принципиальное значение имеет тот конец отрезка, который оказался ближе к ловушке, поскольку он определяет направление вектора.
Ключ info
отображает данные об угле в диалоговом окне (см. рисунок).
Чтобы сохранить координаты в массиве, нужно перед ключевым словом ввести имя массива из двенадцати элементов. Интерпретация информации в массиве представлена на рисунке. Массив должен быть предварительно описан.
Внимание!
Поскольку данная команда определяет направление вектора, то в макропрограммах обязательно использование координат ловушки. При этом следует помнить, что никакой другой объект в ловушку попасть не должен.
Определение масс-инерционных характеристик
mix [density <Dens>] [nodc] [Wholly|Partly] <Objects> done
Команда mix определяет масс-инерционные характеристики объектов <Objects>
типа «Тело». Результат работы команды представлен на рисунке.
Ключ density
позволяет задать плотность тел <Dens>
. Данный ключ используется, если у тел плотность не задана явно атрибутом $Density.
Ключ nodc
запрещает вывод информации в диалоговое окно.
Начиная с версии от 19 декабря 2019 года доступны ключи Wholly
и Partly
. Они позволяют выбрать объекты на любом уровне — соответственно, Целиком и Частично. По умолчанию в макропрограммировании активизируется ключ Wholly
. В более ранних версиях (до 19.12.2019) эти ключи недоступны, команда работает только в режиме Целиком.
Чтобы сохранить координаты в массиве, нужно перед ключевым словом ввести имя массива из девятнадцати элементов. Интерпретация информации в массиве представлена в таблице. Массив должен быть предварительно описан.
|
|
---|---|
|
Площадь поверхности (S) |
|
Объем тела (V) |
|
Масса тела (m) |
|
Вес тела (P) |
|
Статический момент (Sxy) |
|
Статический момент (Syz) |
|
Статический момент (Szx) |
|
Осевой момент инерции (Jox) |
|
Осевой момент инерции (Joy) |
|
Осевой момент инерции (Joz) |
|
Плоскостной момент инерции (Jxy) |
|
Плоскостной момент инерции (Jyz) |
|
Плоскостной момент инерции (Jzx) |
|
Центробежный момент инерции (Mxy) |
|
Центробежный момент инерции (Myz) |
|
Центробежный момент инерции (Mzx) |
|
Координата X центра масс |
|
Координата Y центра масс |
|
Координата Z центра масс |
Определение площади поверхности
square [partly|wholly] <Objects>
Команда square вычисляет площадь поверхности объектов <Objects>
. Если в качестве объектов <Objects>
указана группа, то вычисляется площадь поверхности всех входящих в нее тел и поверхностей (Brep-ов).
Чтобы сохранить измеренную площадь поверхности в переменной, нужно перед ключевым словом ввести имя переменной.
Определение массы и центра масс
amass <Objects> yes | no
Команда amass определяет массу и координаты центра масс объектов <Objects>
типа «Тело». Ключ yes указывает, что нужно создать точку в центре масс объектов <Objects>
. Ключ no указывает, что точку создавать не нужно.
Чтобы сохранить массу и координаты центра масс в массиве, нужно перед ключевым словом ввести имя массива из четырех элементов. Интерпретация информации в массиве представлена в таблице. Массив должен быть предварительно описан.
|
|
---|---|
|
Масса объектов |
|
Координата X центра масс |
|
Координата Y центра масс |
|
Координата Z центра масс |
Определение габаритов объекта
ObjGab, ObjGab1, ObjGab2, ObjGab3
VOID ObjGab(OBJECT <Obj>, VARNAME <X>, VARNAME <Y>, VARNAME <Z>)
VOID ObjGab(OBJECT <Obj>, VARNAME ARRAY <G[3]>)
Функция ObjGab присваивает переменным <X>
, <Y>
, <Z>
или массиву <G>
значения соответствующих габаритов объекта <Obj>
.
DOUBLE ObjGab1(OBJECT <Obj>, INT <NCrd>)
Функция ObjGab1 возвращает габарит объекта <Obj>
по координате с соответствующим номером <NCrd>
(1 – X, 2 – Y, 3 – Z).
LOGICAL ObjGab2(OBJECT <Obj>, VARNAME ARRAY <G[6]>[, LOGICAL <IsLCS>])
Функция ObjGab2 заполняет массив <G>
габаритными координатами объекта в <Obj>
ГСК и возвращает 1 в случае, если объект имеет видимые габариты и 0 в случае, если объект погашен, это пустая группа и пр.
Если указан дополнительный параметр <IsLCS>
и он не равен 0, то габариты объекта <Obj>
вычисляются в локальной систем координат (ЛСК) этого объекта.
LOGICAL ObjGab3(OBJECT <Obj>, VARNAME ARRAY <G[6]>)
Функция ObjGab3 заполняет массив <G>
габаритными координатами объекта <Obj>
в ПСК и возвращает 1 в случае, если объект имеет видимые габариты и 0 в случае, если объект погашен, это пустая группа и пр.
Под габаритом понимается протяженность объекта по соответствующей координате. Например, отрезок из точки (10,20,30), в точку (100,100,100) будет иметь габариты 90,80,70.
Под габаритными координатами объекта в указанной системе координат понимаются три минимальные (X, Y, Z) и три максимальных значения координат объекта. Например, отрезок из точки (10,200,30), в точку (100,10,100) будет иметь габаритные координаты 10, 10, 30, 100, 200, 100 в ГСК.
Пример:
#l1 Line 10, 20, 30, 100, 100, 100; =ObjGab1(l1,2); 80 ObjGab(l1,xl,yl,zl); =xl 90 Defarrays g[3]; ObjGab(l1,g); =g[3] 70 Defarrays gk[6]; ObjGab2(l1,gk); =gk[6] 100
Пример на макроязыке к3:
Допустим, в сцене есть шкаф (группа) в составе которого есть панель с атрибутом UnitPos равным 133. Найдем габаритный бокс этой панели c учётом крепежа в текущей системе координат. Проделаем это в режиме командной строки.
Команда: selbyattr "unitpos==133" partly Выберите объекты: all Выбрано объектов: 1 Выберите объекты: done Всего выбрано: 1 Команда: pnt=getselnum(1) Команда: select partly pnt Выбрано объектов: 1 Всего выбрано: 1 Команда: defarr arr[6]; Команда: =objgab3(pnt,arr) 1 Команда: putmsg(arr) arr[1]=-1213 arr[2]=-48 arr[3]=1823.998 arr[4]=-419 arr[5]=390 arr[6]=1858 Команда: gabx=arr[4]-arr[1] Команда: =gabx 794 Команда: gaby=arr[5]-arr[2] Команда: =gaby 438 Команда: gabz=arr[6]-arr[3] Команда: =gabz 34.002Продолжим для полотна этой панели
Команда: selbyattr "furntype==\"010000\"" child pnt ; Выбрано объектов: 1 Всего выбрано: 1 Команда: ppnt=getselnum(1) Команда: select partly ppnt Выбрано объектов: 1 Всего выбрано: 1 Команда: =objgab3(ppnt,arr) 1 Команда: putmsg(ppnt) ppnt=Тело 0x347C7580 CSG 403 Команда: putmsg(arr) arr[1]=-1200 arr[2]=0 arr[3]=1842 arr[4]=-432 arr[5]=390 arr[6]=1858 Команда: =arr[6]-arr[3] 16
При нахождении габаритных координат объекта предпочтение следует отдавать функции ObjGab3 Важно отметить, что функция работает для вложенных в группу объектов и для вычисления их габаритного бокса извлекать их на верхний уровень не требуется.
Все функции выдают информацию только об непогашенных объектах или о непогашенных частях объектов, если объекты — группы и имеют внутри погашенные составляющие.
Если объект не погашен, но находится на погашенном слое, то функции ObjGab, ObjGab1, ObjGab2 считают этот объект погашенным и возвращают 0. Функция ObjGab3 в случае объекта на погашенном слое считает его видимым и выдает реальные габаритные координаты объекта.