Render.ru

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

redcom1963

Пользователь сайта
Рейтинг
2
#1
Подскажите, пожалуйста, есть ли Maya инструмент для точного выравнивания группы точек, граней или полигонов в одной плоскости, аналогичный Максовскому инструменту make planar.
 

Strahovid

Активный участник
Рейтинг
11
#2
Есть скрипт, для выравнивания вертексов:
Код:
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;
} 
}
 
Рейтинг
34
#4
А как етот скрипт оформить в виде процедуры , что бы запихнуть его в своё окно со скриптами ? У меня не выходит .
 

Strahovid

Активный участник
Рейтинг
11
#5
На счёт того, как добавить это в другое окно:
Код:
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 **********; Ну или по середине где.
Ну и все глобал проци добавить в конце основного скрипта, от куда вызываются все процедуры.
 

Strahovid

Активный участник
Рейтинг
11
#6
Пардон, наверное не так понял. Оформить в процедуру:
Код:
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; на какую нибудь кнопку например.
 
Рейтинг
47
#7
Господа, я конечно тоже любитель скриптов, но по-моему, для решения этой задачи вполне достаточно существующего функционала программы.

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

redcom1963

Пользователь сайта
Рейтинг
2
#8
Большое спасибо, всем и в первую очередь Александру Чернеге. То что доктор прописал.
 

tadpole

Знаток
Рейтинг
24
#9
это все конечно чудесно - но не факт что после выравнивания по оси точки будут там где хотелось... component editor с этой точки зрения удобнее.
 

Strahovid

Активный участник
Рейтинг
11
#10
Не, проверил способ, предложенный Александром (не знал про это). Вот это действительно самый лучший способ.
 
Сверху