マージはあるけど、同じ位置に移動させる機能がない。
近いけどばらけた頂点達を1頂点ずつのスナップじゃ時間がかかる。
入力
- オブジェクトを複数選ぶ
- 頂点取得
- 頂点座標に近い頂点を探す
- その2点の中間座標を両方に入力
- その2点を候補からはずす
1から4を繰り返す
設定
- 選択した頂点で処理
- ボーダーエッジで処理
- 近似値の設定
ボーダーエッジ、アベレージスナップも追加。
別オブジェの頂点をスナップさせたいときに便利。
今後は法線も同じ情報にするかもしれない。
アベレージを無効にすると、はじめに選択したオブジェの頂点にスナップする。
こんなツールがあるかもしれないけど探すより早かったので作った。
s_MayaScriptsにも追加。
頂点選択もしくはオブジェ選択の両方で機能する。
global proc do_VertexSnap()
{
string $sel[] = `ls -sl -fl`;
if(!size($sel))return ;
string $SingleData,$TotalVertex[];
float $x,$y,$z;
float $AverageValue = `floatField -q -v vsThresholdField`;
if(!`gmatch $sel[0] "*.*"`)
{
for($SingleData in $sel)
{
if(`checkBox -q -v vsBoEdgeCheck`)
{
select $SingleData;
polySelectConstraint -t 0x0001 -w 1 -bo 1 -m 3;
string $VertexGroup[] = `ls -sl -fl`;
$TotalVertex = stringArrayCatenate ($TotalVertex,$VertexGroup);
}
else
{
string $VertexGroup[] = `ls -fl ($SingleData + ".vtx[*]")`;
$TotalVertex = stringArrayCatenate ($TotalVertex,$VertexGroup);
}
}
resetPolySelectConstraint;
}
else
{
$TotalVertex = $sel;
}
int $n,$m;
for ($n=0 ; $n < size($TotalVertex) ; $n++)
{
float $VertexValueFirst[] = `pointPosition $TotalVertex[$n]`;
for($m=0 ; $m < size($TotalVertex) ; $m++)
{
if($n != $m)
{
//print ($TotalVertex[$m] +"\n");
float $VertexValueNext[] = `pointPosition $TotalVertex[$m]`;
if(equivalentTol($VertexValueFirst[0] , $VertexValueNext[0], $AverageValue) && equivalentTol($VertexValueFirst[1] , $VertexValueNext[1], $AverageValue) && equivalentTol($VertexValueFirst[2] , $VertexValueNext[2], $AverageValue))
{
if(`checkBox -q -v VertexSnapAverage`)
{
$x = ($VertexValueFirst[0] + $VertexValueNext[0]) / 2 ;
$y = ($VertexValueFirst[1] + $VertexValueNext[1]) / 2 ;
$z = ($VertexValueFirst[2] + $VertexValueNext[2]) / 2 ;
move $x $y $z $TotalVertex[$n];
move $x $y $z $TotalVertex[$m];
}
else
{
$x = $VertexValueFirst[0];
$y = $VertexValueFirst[1];
$z = $VertexValueFirst[2];
move $x $y $z $TotalVertex[$m];
}
}
}
}
}
}
global proc yjp_VertexSnap()
{
if(`window -q -ex yjp_VertexSnapwin`)
{
deleteUI yjp_VertexSnapwin ;
}
window -wh 140 120 -tb 1 -tlb 0 -t "VertexSnap1.1" yjp_VertexSnapwin ;
columnLayout -w 130;
checkBox -l "Average" -v 1 VertexSnapAverage;
checkBox -l "BorderEdge" -v 1 vsBoEdgeCheck;
floatField -w 95 -h 22 -v 0.1 vsThresholdField;
button -w 130 -h 25 -l "Apply" -c do_VertexSnap ;
button -w 130 -h 25 -l "Close" -c ("deleteUI -window yjp_VertexSnapwin") ;
setParent..;
showWindow yjp_VertexSnapwin ;
window -e -wh 140 120 yjp_VertexSnapwin ;
}
0 件のコメント:
コメントを投稿