Рассчитывается угол между объектами (повёрнут ли один объект в сторону другого)

(
selobj = for o in objects collect o -- для каждого О в объектах собрать набор из О
select selobj -- выделить набор
Sel = selection as array -- сделать выделенное массивом
   if sel.count >1 -- если количество элементов в массиве sel больше 1
   then(-- тогда
o1 = Sel[1]
o2 = Sel[2]
V1 = normalize o1.transform.row1 -- нормализованный (единичный) вектор поворота по X матрицы трансформации
V2 = normalize (o2.pos - o1.pos) -- нормализованный (единичный) вектор направления от o1 до o2
-- угол между векторами, или арккосинус между единичными нормализованными векторами V1 и V2
o1.wirecolor = if angleO < 10 then green else red -- цвет объекта o1 зелёный если угол angleO меньше 10 градусов иначе цвет будет красный.
select sel[1]
angleO
)
)

_______________________________________________________________
















Поворачиваем объект с помощью кватерниона

$.rotation =(quat <X> <Y> <Z> <угол вращения>) -- X,Y,Z - координаты вектора вокруг которого будет происходить вращение

Пример:

RotAxis = polyop.getFaceNormal $ 1 -- нормаль выбранного полигона

$.rotation =(quat RotAxis[1] RotAxis[2] RotAxis[3] (acos (dot Vector1 Vector2)))

-- (acos (dot Vector1 Vector2) угол (или арккосинус) между двумя единичными (нормализованными) вектроами, значение в градусах.

_______________________________________________________________

Матрицы трансформаций

t1 = $Teapot001

t2 = Teapot()

t2.pos = [0,0,50] -- t2 двигается на 50 по оси Z в глобальных координатах

t2.transform *= t1.transform -- устанавливаем положение и ориентацию t2 к t1

_______________________________________________________________

$.transform = rotateXmatrix <int (угол в градусах)> -- поворот матрицы на угол

$.transform = rotateYmatrix <int (угол в градусах)> -- поворот матрицы на угол

$.transform = rotateZmatrix <int (угол в градусах)> -- поворот матрицы на угол

$.dir -- вектор локальной оси z

$.transform = rotateY $.transform 45 -- поворачивает матрицу относительно начала коорд.

$.transform = rotateYmatrix 45 * $.transform -- локальный поворот

_______________________________________________________________

$.transform -- матрица трансформации

$.transform = matrix3 1 -- единичная матрица (начального положения объекта)

$.transform.scalepart -- только просмотр части масштаба от матрицы трансформации

$.transform.rotationpart -- только просмотр части поворота матрицы трансформации

$.transform.translationpart -- только просмотр части перемещения матрицы трансформации

_______________________________________________________________

$.transform.row4 = [0,0,0] -- на прямую Row4 (строка матрицы) не меняется (результата не будет)

-- отдельные трансфортмации матриц трансформации меняются через переменную

tmpTr = $.transform

tmpTr.Row4 = [110,0,0]

$.transform = tmpTr

_______________________________________________________________

SelEdge = polyop.getEdgeSelection $ as array -- массив выделенных рёбер

polyop.getVertsUsingEdge $ SelEdge as array -- Массив использованных рёбрами вершин

_______________________________________________________________

-- Проверка на принадлежность двух элементов массива элементам другого массива (код проверяте, принадлежит ли пара выделенных рёбер отверстию в геометрии)

compare = false

arrOpenEdges = (polyop.getOpenEdges $) as array -- массив рёбер, принадлежащих дыре в геометрии

SelEdges = (polyop.getEdgeSelection $) as array -- массив выделенных рёбер

 

for i=1 to arrOpenEdges.count do -- от 1 до конца рёбер из числа открытых делать

if SelEdges[1] == arrOpenEdges[i] then -- Если одно ребро из выделенных есть среди открытых рёбер (рёбер дыры) тогда

for j=1 to arrOpenEdges.count do -- от 1 до конца рёбер из числа открытых делать

if SelEdges[2] == arrOpenEdges[j] then (-- Если второе выделенное ребро есть среди рёбер из числа открытых тогда

compare = true -- переменная станет true

exit -- выход из цикла

)

compare -- возвращается результат после выполнения блока или функции для дальнейшей его обработки если это требуется. То есть вместо “OK”, после вычисления блока будет возвращено значение переменной.

_______________________________________________________________


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: