1. Пользоваться форумом на планшетах и телефонах стало удобнее благодаря Tapatalk

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

Тема в разделе "MAXScript", создана пользователем Люк, 30 апр 2015.

Модераторы: Savin Denis
  1. Люк

    Люк Знаток

    С нами с:
    03.02.2013
    Сообщения:
    279
    Симпатии:
    7
    Баллы:
    24
    Все самое простое как всегда самое сложное. Как известно выравнивание по размеру объекта не работает в максе как этого бы хотелось типа взял и выровнял по любому объекту. Может кто то уже сделал скрипт который это делает? Никто не в курсе?
     
  2. igorznag

    igorznag Знаток

    С нами с:
    23.04.2010
    Сообщения:
    1.254
    Симпатии:
    172
    Баллы:
    65
    Мне ничего не известно.
    Что такое "выравнивание по размеру объекта"? Это инструмент Align (Alt+A)?
    Объясните подробнее на конкретном примере, что вас не устраивает.
    Выполните плохое выравнивание по размеру объекта и предоставьте изображение.
    Выполните вручную хорошее выравнивание по размеру объекта и предоставьте изображение.
     
  3. maiden666

    maiden666 Знаток

    С нами с:
    06.04.2010
    Сообщения:
    3.087
    Симпатии:
    86
    Баллы:
    73
    я так понял, имеется в виду выравнивание, скажем, по габаритным брэкетам, или максималых координат по различным осям, но учитывая, что они могут быть по разному ориентированы в пространстве, в общем случае мне эта идея кажется сомнительной
     
    Последнее редактирование: 1 май 2015
  4. Люк

    Люк Знаток

    С нами с:
    03.02.2013
    Сообщения:
    279
    Симпатии:
    7
    Баллы:
    24
    Выравнивание по размеру объекта есть ни что иное как 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 но не работает. Вот я и подумал может ктото сделал такой скрипт.
     
    Royal Ghost нравится это.
  5. igorznag

    igorznag Знаток

    С нами с:
    23.04.2010
    Сообщения:
    1.254
    Симпатии:
    172
    Баллы:
    65
    Пример:
    Создаем 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
     
    Последнее редактирование: 3 май 2015
  6. Люк

    Люк Знаток

    С нами с:
    03.02.2013
    Сообщения:
    279
    Симпатии:
    7
    Баллы:
    24
    Да самое то! Спасибо! Но работает идеально только если созданы два объекта в новой сцене и ничего больше. Пробовал в сложной сцене он немного косячит. Или улетает кудато объект(импортированный в сцену как obj может что то с разными единицами измерения разных сцен) или не совсем точно подгоняет размер. Я отделил подобъект в виде куба и попробовал по не му выровнять только что созданный бокс и почему то он сровнял не один в один а приблизительно. Хотя допускаю что дело не в скрипте а что то с размерами сцены или объекта.
     
Модераторы: Savin Denis

Поделиться этой страницей