Render.ru

Выравнивание по размеру

Рейтинг
61
#1
Все самое простое как всегда самое сложное. Как известно выравнивание по размеру объекта не работает в максе как этого бы хотелось типа взял и выровнял по любому объекту. Может кто то уже сделал скрипт который это делает? Никто не в курсе?
 

igorznag

Мастер
Рейтинг
103
#2
Как известно выравнивание по размеру объекта не работает в максе как этого бы хотелось типа взял и выровнял по любому объекту.
Мне ничего не известно.
Что такое "выравнивание по размеру объекта"? Это инструмент Align (Alt+A)?
Объясните подробнее на конкретном примере, что вас не устраивает.
Выполните плохое выравнивание по размеру объекта и предоставьте изображение.
Выполните вручную хорошее выравнивание по размеру объекта и предоставьте изображение.
 

maiden666

Мастер
Рейтинг
112
#3
я так понял, имеется в виду выравнивание, скажем, по габаритным брэкетам, или максималых координат по различным осям, но учитывая, что они могут быть по разному ориентированы в пространстве, в общем случае мне эта идея кажется сомнительной
 
Последнее редактирование:
Рейтинг
61
#4
Мне ничего не известно.
Что такое "выравнивание по размеру объекта"? Это инструмент 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 но не работает. Вот я и подумал может ктото сделал такой скрипт.
 

igorznag

Мастер
Рейтинг
103
#5
Возможно лишь в ручную подгонять вершины одного объекта под другой чтобы получить этот mutch scale.
Пример:
Создаем 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
 
Последнее редактирование:
Рейтинг
61
#6
Да самое то! Спасибо! Но работает идеально только если созданы два объекта в новой сцене и ничего больше. Пробовал в сложной сцене он немного косячит. Или улетает кудато объект(импортированный в сцену как obj может что то с разными единицами измерения разных сцен) или не совсем точно подгоняет размер. Я отделил подобъект в виде куба и попробовал по не му выровнять только что созданный бокс и почему то он сровнял не один в один а приблизительно. Хотя допускаю что дело не в скрипте а что то с размерами сцены или объекта.
 
Сверху