Render.ru

reference rotate

Мелкий

Активный участник
Рейтинг
14
#1
В 3D max работаю давно, но вот одна неудобность, в таких пакетах как AutoCAD и Rhino я могу "соединить" 2 объекта по 2 точкам, как это сделать также удобно но в 3Dmax, а то я уже запарился всё в рино перекидывать и обратно, зарание спасибо
 

Вложения

igorznag

Мастер
Рейтинг
103
#2
Предоставьте видео (AutoCAD и Rhino) или объясните подробнее процесс "соединения".
 

Мелкий

Активный участник
Рейтинг
14
#3
Суть такая, указывается 1 точка центра вращения, 2 точка которая будет двигаться по окружности, т.е. вращаться, 3 точка место стыка. Таким образом точка 2 присоединится к точке 3. Только зачем я это рассказываю? разве из 2х предоставленных картинок неясно что необходимо получить
 

igorznag

Мастер
Рейтинг
103
#5
Попробуйте такой вариант. Пример:
В новой сцене создаем 2 объекта Box (Box1 и Box2).
С помощью привязки к вершинам, перемещаем Box1 к Box2.
Выделяем объект Box1.
Включаем привязку к вершинам.
Запускаем скрипт. В новом окне нажимаем кнопку Align.
Выбираем 3 точки в пространстве.
Точка1=общая точка (центр вращения).
Точка2=точка объекта Box1.
Точка3=точка объекта Box2.
Код:
try destroydialog igorznag_test catch()
rollout igorznag_test "Test" 
( 
button btn_align "Align"; on btn_align pressed do
(
if selection.count==1 then 
( 
obj=selection[1]; a01 = pickpoint snap:#3d
if classof a01 == point3 then
(
a02 = pickpoint snap:#3d rubberband:a01
if classof a02 == point3 then
(
b02 = pickpoint snap:#3d rubberband:a02
if classof b02 == point3 then
(
v1 = normalize (a02 - a01)
worldUpVector = [0,0,1] 
rightVector = normalize (cross worldUpVector v1)
upVector = normalize ( cross rightVector v1 )
mo=matrix3 rightVector upVector v1 a01
b01=a01; v1 = normalize (b02-b01)
rightVector = normalize (cross worldUpVector v1)
upVector = normalize ( cross rightVector v1 )
mt=matrix3 rightVector upVector v1 b01
undo on obj.transform*=(inverse mo)*mt
)--if classof pt3 == point3 then
)--if classof pt2 == point3 then
)--if classof pt1 == point3 then
)--if selection.count==1 then
)--on btn_align pressed do
); createdialog igorznag_test 100 30
Чтобы запустить скрипт нужно:
1. Создаем текстовый файл (NotePad) и копируем код (текст) скрипта.
2. Сохраняем текстовый файл с названием "test.ms"
3. В главное меню MaxScript выбираем пункт Run Script. Выбираем файл "test.ms"
 

AXElle

Пользователь сайта
Рейтинг
2
#7
Большое спасибо, столько времени прошло :) , а скрипт работает и в 2023 максе.
 

Larry Braun

Пользователь сайта
Рейтинг
2
#8
Попробуйте такой вариант. Пример:
В новой сцене создаем 2 объекта Box (Box1 и Box2).
С помощью привязки к вершинам, перемещаем Box1 к Box2.
Выделяем объект Box1.
Включаем привязку к вершинам.
Запускаем скрипт. В новом окне нажимаем кнопку Align.
Выбираем 3 точки в пространстве.
Точка1=общая точка (центр вращения).
Точка2=точка объекта Box1.
Точка3=точка объекта Box2. cuphead
Код:
try destroydialog igorznag_test catch()
rollout igorznag_test "Test"
(
button btn_align "Align"; on btn_align pressed do
(
if selection.count==1 then
(
obj=selection[1]; a01 = pickpoint snap:#3d
if classof a01 == point3 then
(
a02 = pickpoint snap:#3d rubberband:a01
if classof a02 == point3 then
(
b02 = pickpoint snap:#3d rubberband:a02
if classof b02 == point3 then
(
v1 = normalize (a02 - a01)
worldUpVector = [0,0,1]
rightVector = normalize (cross worldUpVector v1)
upVector = normalize ( cross rightVector v1 )
mo=matrix3 rightVector upVector v1 a01
b01=a01; v1 = normalize (b02-b01)
rightVector = normalize (cross worldUpVector v1)
upVector = normalize ( cross rightVector v1 )
mt=matrix3 rightVector upVector v1 b01
undo on obj.transform*=(inverse mo)*mt
)--if classof pt3 == point3 then
)--if classof pt2 == point3 then
)--if classof pt1 == point3 then
)--if selection.count==1 then
)--on btn_align pressed do
); createdialog igorznag_test 100 30
Чтобы запустить скрипт нужно:
1. Создаем текстовый файл (NotePad) и копируем код (текст) скрипта.
2. Сохраняем текстовый файл с названием "test.ms"
3. В главное меню MaxScript выбираем пункт Run Script. Выбираем файл "test.ms"
Спасибо. Вы сократили время решения моей проблемы.
 
Сверху