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

Как точно выровнить в одной плоскости группу точек, граней или полигонов.

Тема в разделе "Maya", создана пользователем redcom1963, 29 окт 2012.

Модераторы: Dark™, Skif
  1. redcom1963

    redcom1963 Пользователь сайта

    С нами с:
    24.07.2010
    Сообщения:
    4
    Симпатии:
    0
    Баллы:
    2
    Подскажите, пожалуйста, есть ли Maya инструмент для точного выравнивания группы точек, граней или полигонов в одной плоскости, аналогичный Максовскому инструменту make planar.
     
  2. Strahovid

    Strahovid Активный участник

    С нами с:
    02.09.2012
    Сообщения:
    103
    Симпатии:
    0
    Баллы:
    11
    Есть скрипт, для выравнивания вертексов:
    Код:
    if (`window -ex AvgVert`) deleteUI AvgVert;
    window -w 400 -h 100 -title "Average Verts" AvgVert;
    columnLayout;
    radioCollection AllRadioButtons; 
    radioButton -label "x" -changeCommand "changeRadio" -select RadioButton1; 
    radioButton -label "y" -changeCommand "changeRadio" RadioButton2; 
    radioButton -label "z" -changeCommand "changeRadio" RadioButton3; 
    radioButton -label "ALL" -changeCommand "changeRadio" RadioButton4; 
    button -w 150 -label "Average!" -c "DoAverage"; 
    showWindow AvgVert;
    global string $selectedAxis = "x";
    global proc changeRadio() 
    { 
    string $selectedButton = `radioCollection -query -select AllRadioButtons`; 
    global string $selectedAxis;
    if ($selectedButton == "RadioButton1") 
    { 
    $selectedAxis = "x";
    print "x selected";
    } 
    else if ($selectedButton == "RadioButton2") 
    { 
    $selectedAxis = "y";
    print "y selected";
    } 
    else if ($selectedButton == "RadioButton3") 
    { 
    $selectedAxis = "z";
    print "z selected";
    } 
    else
    { 
    $selectedAxis = "all";
    print "all selected";
    } 
    } 
    global proc DoAverage () {
    global string $selectedAxis;
    string $selVtx[] = `filterExpand -sm 31 -ex 1 -fp 1`;
    if (size($selVtx)<2) error "Not enough vertices selected.";
    float $bB[6] = `polyEvaluate -bc`;
    float $averX = ($bB[1]+$bB[0])/2;
    float $averY = ($bB[3]+$bB[2])/2;
    float $averZ = ($bB[5]+$bB[4])/2;
    if ($selectedAxis == "x") 
    { 
    move -a -x $averX;
    } 
    else if ($selectedAxis == "y") 
    { 
    move -a -y $averY;
    } 
    else if ($selectedAxis == "z") 
    { 
    move -a -z $averZ;
    } 
    else
    { 
    move -a -x $averX;
    move -a -y $averY;
    move -a -z $averZ;
    } 
    }
     
  3. tadpole

    tadpole Знаток

    С нами с:
    12.08.2005
    Сообщения:
    712
    Симпатии:
    1
    Баллы:
    24
    component editor
     
  4. A.D.I.D.A.S.

    A.D.I.D.A.S. Активный участник

    С нами с:
    04.09.2010
    Сообщения:
    274
    Симпатии:
    1
    Баллы:
    14
    А как етот скрипт оформить в виде процедуры , что бы запихнуть его в своё окно со скриптами ? У меня не выходит .
     
  5. Strahovid

    Strahovid Активный участник

    С нами с:
    02.09.2012
    Сообщения:
    103
    Симпатии:
    0
    Баллы:
    11
    На счёт того, как добавить это в другое окно:
    Код:
    gridLayout -numberOfColumns 4 -cwh 50 30;
    radioCollection AllRadioButtons; 
    radioButton -l "x" -cc "changeRadio" RadioButton1; 
    radioButton -l "y" -cc "changeRadio" RadioButton2; 
    radioButton -l "z" -cc "changeRadio" RadioButton3; 
    radioButton -l "ALL" -cc "changeRadio" RadioButton4; 
    button -l "Average" -c "DoAverage"; 
    setParent..;
    
    Добавить перед командой showWindow **********; Ну или по середине где.
    Ну и все глобал проци добавить в конце основного скрипта, от куда вызываются все процедуры.
     
  6. Strahovid

    Strahovid Активный участник

    С нами с:
    02.09.2012
    Сообщения:
    103
    Симпатии:
    0
    Баллы:
    11
    Пардон, наверное не так понял. Оформить в процедуру:
    Код:
    global proc WindowDoAverage ()
    {
    if (`window -ex AvgVert`) deleteUI AvgVert; 
    window -w 400 -h 100 -title "Average Verts" AvgVert; 
    columnLayout; 
    radioCollection AllRadioButtons; 
    radioButton -label "x" -changeCommand "changeRadio" -select RadioButton1; 
    radioButton -label "y" -changeCommand "changeRadio" RadioButton2; 
    radioButton -label "z" -changeCommand "changeRadio" RadioButton3; 
    radioButton -label "ALL" -changeCommand "changeRadio" RadioButton4; 
    button -w 150 -label "Average!" -c "DoAverage"; 
    showWindow AvgVert; 
    }
    
    И повесить команду WindowDoAverage; на какую нибудь кнопку например.
     
  7. Александр Чернега

    Александр Чернега Знаток

    С нами с:
    24.12.2009
    Сообщения:
    1.058
    Симпатии:
    56
    Баллы:
    53
    Господа, я конечно тоже любитель скриптов, но по-моему, для решения этой задачи вполне достаточно существующего функционала программы.

    1 Выделяем вертексы, эджи и полигоны
    2 Включаем инструмент Скейл
    3 Зажимаем J (либо в маркинг меню скейла ставим галочку Снап скейл)
    4 И спокойно выравниваем по нужно оси.
     
  8. redcom1963

    redcom1963 Пользователь сайта

    С нами с:
    24.07.2010
    Сообщения:
    4
    Симпатии:
    0
    Баллы:
    2
    Большое спасибо, всем и в первую очередь Александру Чернеге. То что доктор прописал.
     
  9. tadpole

    tadpole Знаток

    С нами с:
    12.08.2005
    Сообщения:
    712
    Симпатии:
    1
    Баллы:
    24
    это все конечно чудесно - но не факт что после выравнивания по оси точки будут там где хотелось... component editor с этой точки зрения удобнее.
     
  10. Strahovid

    Strahovid Активный участник

    С нами с:
    02.09.2012
    Сообщения:
    103
    Симпатии:
    0
    Баллы:
    11
    Не, проверил способ, предложенный Александром (не знал про это). Вот это действительно самый лучший способ.
     
Модераторы: Dark™, Skif

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