Все самое простое как всегда самое сложное. Как известно выравнивание по размеру объекта не работает в максе как этого бы хотелось типа взял и выровнял по любому объекту. Может кто то уже сделал скрипт который это делает? Никто не в курсе?
Мне ничего не известно.
Что такое "выравнивание по размеру объекта"? Это инструмент Align (Alt+A)?
Объясните подробнее на конкретном примере, что вас не устраивает.
Выполните плохое выравнивание по размеру объекта и предоставьте изображение.
Выполните вручную хорошее выравнивание по размеру объекта и предоставьте изображение.
я так понял, имеется в виду выравнивание, скажем, по габаритным брэкетам, или максималых координат по различным осям, но учитывая, что они могут быть по разному ориентированы в пространстве, в общем случае мне эта идея кажется сомнительной
Мне ничего не известно.
Что такое "выравнивание по размеру объекта"? Это инструмент Align (Alt+A)?
Объясните подробнее на конкретном примере, что вас не устраивает.
Выполните плохое выравнивание по размеру объекта и предоставьте изображение.
Выполните вручную хорошее выравнивание по размеру объекта и предоставьте изображение.
Выравнивание по размеру объекта есть ни что иное как much scale самая нижняя группа окна инструмента Align совершенно верно. Но дело в том что если взять один произвольный объект и да как сказал maiden666 попытаться выровнять его размеры (ширину к ширине объекта по которому выравнивается нужный объект длинну к длине и высоту к высоте) то этого сделать не получится( даже если их сориентировать предварительно align orientation) именно поэтому нечего скриншотить). Возможно лишь в ручную подгонять вершины одного объекта под другой чтобы получить этот mutch scale.
Вот что об этом в хелпе:
Use the X Axis, Y Axis, and Z Axis options to match the scale axis values between the two selected objects. This matches only the scale values you'd see in the Transform Type-In. It does not necessarily cause two objects to be the same size. There will be no change in size if neither of the objects has previously been scaled.
Тобиш либо меняются значения лишь в поле ввода не меняя сам размер объекта чего я тоже не наблюдаю. Либо он сработает только на объекте к которому непосредственно до применения инструмента Aling была применена трансформация масштабирования и он его возвращает к прежним размерам ( объект по которому выравнивается выступает в роли хранителя памяти о прежних размерах)
А мне надо взять ни как не связаные исторически объекты и дать габаритному котнейнеру одного из них размеры габаритного контейнера другого. Все просто и как я понимаю должен работать much scale инструмента Align но не работает. Вот я и подумал может ктото сделал такой скрипт.
Пример:
Создаем 2 объекта Box разного размера и конвертируем их в Editable Poly.
Выделяем объект Box01. Запускаем скрипт.
В новом окне нажимаем кнопку "Pick Object" и выбираем объект Box02.
Код:
try destroydialog test catch()
rollout test "Match Scale"
(
checkbox cb_x "X Axis" pos:[5,5] checked:true
checkbox cb_y "Y Axis" pos:[60,5] checked:true
checkbox cb_z "Z Axis" pos:[115,5] checked:true
button btn_match_scale "Pick Object"
on btn_match_scale pressed do
(
if selection.count==1 then
(
sobj=selection[1]
if classof sobj==Editable_Poly then
(
tobj=pickobject rubberBand:sobj.pos
if tobj!=undefined and tobj!=#escape and tobj!=sobj and classof tobj==Editable_Poly then
(
scalex=1;scaley=1;scalez=1;
sdeltax=0;sdeltay=0;sdeltaz=0;
tdeltax=0;tdeltay=0;tdeltaz=0;
in coordsys sobj.objecttransform
(
snlbb=nodelocalboundingbox sobj
sdeltax=snlbb[2].x-snlbb[1].x
sdeltay=snlbb[2].y-snlbb[1].y
sdeltaz=snlbb[2].z-snlbb[1].z
)--in coordsys sobj.objecttransform
in coordsys tobj.objecttransform
(
tnlbb=nodelocalboundingbox tobj
tdeltax=tnlbb[2].x-tnlbb[1].x
tdeltay=tnlbb[2].y-tnlbb[1].y
tdeltaz=tnlbb[2].z-tnlbb[1].z
)--in coordsys sobj.objecttransform
if sdeltax!=0 and tdeltax!=0 and cb_x.checked==true then scalex=1.0*tdeltax/sdeltax
if sdeltay!=0 and tdeltay!=0 and cb_y.checked==true then scaley=1.0*tdeltay/sdeltay
if sdeltaz!=0 and tdeltaz!=0 and cb_z.checked==true then scalez=1.0*tdeltaz/sdeltaz
undo on
(
in coordsys sobj.objecttransform
(
n=polyop.getNumVerts sobj
for i=1 to n where not polyop.isVertDead sobj i do
(
old_pos=polyop.getVert sobj.baseobject i
new_pos=old_pos*[scalex,scaley,scalez]
polyop.setVert sobj.baseobject i new_pos
)--for i=1 to n where not polyop.isVertDead sobj i do
completeredraw()
)-- in coordsys sobj.objecttransform
)--undo on
)--if tobj!=undefined and tobj!=#escape and tobj!=sobj then
)--if classof sobj==Editable_Poly then
else messagebox "Select one object Editable Poly without modifiers!" title:"Warning!"
)--if selection.count==1 then
else messagebox "Select one object!" title:"Warning!"
)--on btn_match_scale pressed do
); createdialog test 200 50
Да самое то! Спасибо! Но работает идеально только если созданы два объекта в новой сцене и ничего больше. Пробовал в сложной сцене он немного косячит. Или улетает кудато объект(импортированный в сцену как obj может что то с разными единицами измерения разных сцен) или не совсем точно подгоняет размер. Я отделил подобъект в виде куба и попробовал по не му выровнять только что созданный бокс и почему то он сровнял не один в один а приблизительно. Хотя допускаю что дело не в скрипте а что то с размерами сцены или объекта.