学习目标:
创建与个Maya插件,可以通过修改顶点法线的角度来视觉上硬化导角边
学习内容:
1、 通过面积筛选
2、 对选中的面进行法线批量修改
3、 复制法线
4、 粘贴法线
学习时间:
15天
学习产出:
过于臃肿 之后会做简化
VertexNormalSort_EN.mel
//VertexNormalBatch
global proc VertexNormalSort(){
if(`window -query -exists adia_myVertexNormalSort_Window`)
deleteUI adia_myVertexNormalSort_Window;
string $s = "Adia_vertexNormalBatch";
string $chkbxState = "not checked";
window -title $s -menuBar true -maximizeButton true -minimizeButton true adia_myVertexNormalSort_Window;
columnLayout -adjustableColumn true;
text -label "Refer the manual to use" -en off;
radioButtonGrp -label "Mode:" -numberOfRadioButtons 4
-labelArray4 "1 Hardening" "2 soften" "Copy vertex normal" "Paste vertex normal" -sl 1
adia_Select;
floatFieldGrp -precision 3 -numberOfFields 1 -extraLabel "°" -label
"Filter less than:" -value1 100.0 -columnWidth 1 65 adia_NormalValue;
floatFieldGrp -precision 3 -numberOfFields 1 -extraLabel "°" -label "Face area" -value1 0.0 -columnWidth 1 65 -en off adia_NormalValue2;
button -height 23 -width 23 -backgroundColor 255 241 155 -label "Get area"
-command "Do4()";
text -label " " -en off;
button -height 23 -width 23 -backgroundColor 255 241 155 -label "Filter area"
-command "Do3_2()";
text -label " " -en off;
button -height 23 -width 23 -backgroundColor 255 241 155 -label "Run"
-command "Do3_1()";
text -label " " -en off;
window -edit -widthHeight 600 210 adia_myVertexNormalSort_Window;
showWindow adia_myVertexNormalSort_Window;
}
global string $vertexName_G[]={};
global string $element_G[]={};
global string $objectName_G[]={};
global float $vertexNormal_G[]={};
global proc Do3()
{
disableIncorrectNameWarning;
global string $vertexName_G[];
global string $element_G[];
global string $objectName_G[]={};
global float $vertexNormal_G[]={};
string $selectList[];
$selectList = `ls -selection -flatten`;
string $element[];
$element = `filterExpand -expand on -selectionMask 34 $selectList`;
$elementVertex = `filterExpand -expand on -selectionMask 31 -selectionMask 70 $selectList`;
for($ele in $element)
{
$element_G[size($element_G)] = $ele;
}
if(size($element)>0)
{
print("Executing...");
for($i = 0 ; $i < size($element); $i++)
{
float $sizeUI = `floatFieldGrp -q -v1 adia_NormalValue`;
string $objectName[] = stringToStringArray($element[$i], ".");
$objectName_G[0] = $objectName[0];
string $sFaceVertexNormal[]=`polyInfo -faceToVertex $element[$i]`;
string $vertex[] = stringToStringArray($sFaceVertexNormal[0], " ");
string $face[] = stringToStringArray($vertex[1],":");
string $vName0 = $objectName[0]+".vtxFace["+ $vertex[2] +"]["+$face[0] +"]";
string $vName1 = $objectName[0]+".vtxFace["+ $vertex[3] +"]["+$face[0] +"]";
string $vName2 = $objectName[0]+".vtxFace["+ $vertex[4] +"]["+$face[0] +"]";
string $vName3 = $objectName[0]+".vtxFace["+ $vertex[5] +"]["+$face[0] +"]";
string $pointPosName1 = $objectName[0]+".vtx["+ $vertex[2] +"]";
string $pointPosName2 = $objectName[0]+".vtx["+ $vertex[3] +"]";
string $pointPosName3 = $objectName[0]+".vtx["+ $vertex[4] +"]";
string $pointPosName4 = $objectName[0]+".vtx["+ $vertex[5] +"]";
$vertexName_G[size($vertexName_G)] = $pointPosName1;
$vertexName_G[size($vertexName_G)] = $pointPosName2;
$vertexName_G[size($vertexName_G)] = $pointPosName3;
$vertexName_G[size($vertexName_G)] = $pointPosName4;
string $test1_o[] = stringToStringArray($pointPosName1, ".");
string $test2_o[] = stringToStringArray($pointPosName2, ".");
string $test3_o[] = stringToStringArray($pointPosName3, ".");
string $test4_o[] = stringToStringArray($pointPosName4, ".");
string $test1[] = stringToStringArray($test1_o[1], "]");
string $test2[] = stringToStringArray($test2_o[1], "]");
string $test3[] = stringToStringArray($test3_o[1], "]");
string $test4[] = stringToStringArray($test4_o[1], "]");
if($test1[0]=="vtx["+"\n"||$test2[0]=="vtx["+"\n"||$test3[0]=="vtx["+"\n"||$test4[0]=="vtx["+"\n")
{
}else
{
float $pointPos1[] = `pointPosition -w $pointPosName1` ;
float $pointPos2[] = `pointPosition -w $pointPosName2` ;
float $pointPos3[] = `pointPosition -w $pointPosName3` ;
float $pointPos4[] = `pointPosition -w $pointPosName4` ;
float $faceArea = adia_CountArea($pointPos1,$pointPos2,$pointPos3);
if($faceArea<=$sizeUI)
{
}else {
select -cl ;
select -tgl $vName0 ;
select -tgl $vName1 ;
select -tgl $vName2 ;
select -tgl $vName3 ;
polySetToFaceNormal ;
select -cl ;
string $vName0_0="";
string $vName1_1="";
string $vName2_2="";
string $vName3_3="";
if(`radioButtonGrp -q -sl adia_Select`==1)
{
$vName0_0 = $objectName[0]+".vtxFace["+ $vertex[2] +"]["+(string)((int)($face[0])+1) +"]";
$vName1_1 = $objectName[0]+".vtxFace["+ $vertex[3] +"]["+(string)((int)($face[0])-1) +"]";
$vName2_2 = $objectName[0]+".vtxFace["+ $vertex[4] +"]["+(string)((int)($face[0])-1) +"]";
$vName3_3 = $objectName[0]+".vtxFace["+ $vertex[5] +"]["+(string)((int)($face[0])+1) +"]";
}else if(`radioButtonGrp -q -sl adia_Select`==2)
{
string $mesh = $objectName[0];
string $localer[]= `spaceLocator -p 0 0 0`;
move -r $pointPos1[0] $pointPos1[1] $pointPos1[2];
string $cpom = `createNode closestPointOnMesh`;
connectAttr -f ($mesh+".outMesh")($cpom+".inMesh");
connectAttr -f ($localer[0]+".translate")($cpom+".inPosition");
int $closestVert = `getAttr ($cpom + ".closestVertexIndex")`;
string $vertName = $mesh+".vtx["+$closestVert+"]";
$vName0_0 = $vertName;
$vName1_1 = $vertName;
$vName2_2 = $vertName;
$vName3_3 = $vertName;
delete $cpom;
delete $localer[0];
}
if(catch(`select -tgl $vName0_0`)||catch(`ls -sl $vName0_0`))
{
}else{
select -tgl $vName0;
if(catch(`select -tgl $vName0_0`))
{
}else{
select -tgl $vName0_0;
polyAverageNormal -prenormalize 1 -allowZeroNormal 0 -postnormalize 0 -distance 0.1 -replaceNormalXYZ 1 0 0 ;
select -cl ;
}
select -cl ;
select -tgl $vName1;
if(catch(`select -tgl $vName1_1`))
{
}else{
select -tgl $vName1_1;
polyAverageNormal -prenormalize 1 -allowZeroNormal 0 -postnormalize 0 -distance 0.1 -replaceNormalXYZ 1 0 0 ;
select -cl ;
}
select -cl ;
select -tgl $vName2;
if(catch(`select -tgl $vName2_2`))
{
}else{
select -tgl $vName2_2;
polyAverageNormal -prenormalize 1 -allowZeroNormal 0 -postnormalize 0 -distance 0.1 -replaceNormalXYZ 1 0 0 ;
select -cl ;
}
select -cl ;
select -tgl $vName3;
if(catch(`select -tgl $vName2_2`))
{
}else{
select -tgl $vName3_3;
polyAverageNormal -prenormalize 1 -allowZeroNormal 0 -postnormalize 0 -distance 0.1 -replaceNormalXYZ 1 0 0 ;
select -cl ;
}
}
}
}
}
string $shorterList[] = stringArrayRemoveDuplicates($vertexName_G);
string $diff[] = stringArrayRemoveExact($shorterList,$vertexName_G);
for($each in $diff)
{
if(catch (`select -tgl $each`))
{
}
else
{
select -cl;
select -tgl $each ;
polyAverageNormal -prenormalize 1 -allowZeroNormal 0 -postnormalize 0 -distance 0.1 -replaceNormalXYZ 1 0 0 ;
select -cl;
}
}
if(catch(`select -r $objectName_G[0]`))
{
}else{select -r $objectName_G[0];}
for($ele in $element_G)
{
if(catch(`select -tgl $ele`))
{
print("erro");
}
else{
select -add $ele;
}
}
print("succeed!");
}
if(size($elementVertex)>0)
{
if(`radioButtonGrp -q -sl adia_Select`==3)
{
$vertexNormal_G = `polyNormalPerVertex -q -xyz $elementVertex[0]`;
print("Copy Value:"+"x:"+ $vertexNormal_G[0] +"__y:"+$vertexNormal_G[1] +"__z:"+$vertexNormal_G[2]);
}else if(`radioButtonGrp -q -sl adia_Select`==4)
{
for($i=0;$i<size($elementVertex);$i++)
{
polyNormalPerVertex -xyz $vertexNormal_G[0] $vertexNormal_G[1] $vertexNormal_G[2] $elementVertex[$i];
}
print("Successfully pasted normal information!");
}
}
pause -sec 1;
clear $element_G;
clear $vertexName_G;
clear $objectName_G;
}
global proc Do3_1()
{
disableIncorrectNameWarning;
global string $vertexName_G[];
global string $element_G[];
global string $objectName_G[]={};
global float $vertexNormal_G[]={};
string $selectList[];
$selectList = `ls -selection -flatten`;
string $element[];
$element = `filterExpand -expand on -selectionMask 34 $selectList`;
$elementVertex = `filterExpand -expand on -selectionMask 31 -selectionMask 70 $selectList`;
for($ele in $element)
{
$element_G[size($element_G)] = $ele;
}
if(size($element)>0)
{
print("Executing...");
for($i = 0 ; $i < size($element); $i++)
{
float $sizeUI = `floatFieldGrp -q -v1 adia_NormalValue`;
string $objectName[] = stringToStringArray($element[$i], ".");
$objectName_G[0] = $objectName[0];
string $sFaceVertexNormal[]=`polyInfo -faceToVertex $element[$i]`;
string $vertex[] = stringToStringArray($sFaceVertexNormal[0], " ");
string $face[] = stringToStringArray($vertex[1],":");
string $vName0 = $objectName[0]+".vtxFace["+ $vertex[2] +"]["+$face[0] +"]";
string $vName1 = $objectName[0]+".vtxFace["+ $vertex[3] +"]["+$face[0] +"]";
string $vName2 = $objectName[0]+".vtxFace["+ $vertex[4] +"]["+$face[0] +"]";
string $vName3 = $objectName[0]+".vtxFace["+ $vertex[5] +"]["+$face[0] +"]";
string $pointPosName1 = $objectName[0]+".vtx["+ $vertex[2] +"]";
string $pointPosName2 = $objectName[0]+".vtx["+ $vertex[3] +"]";
string $pointPosName3 = $objectName[0]+".vtx["+ $vertex[4] +"]";
string $pointPosName4 = $objectName[0]+".vtx["+ $vertex[5] +"]";
$vertexName_G[size($vertexName_G)] = $pointPosName1;
$vertexName_G[size($vertexName_G)] = $pointPosName2;
$vertexName_G[size($vertexName_G)] = $pointPosName3;
$vertexName_G[size($vertexName_G)] = $pointPosName4;
string $test1_o[] = stringToStringArray($pointPosName1, ".");
string $test2_o[] = stringToStringArray($pointPosName2, ".");
string $test3_o[] = stringToStringArray($pointPosName3, ".");
string $test4_o[] = stringToStringArray($pointPosName4, ".");
string $test1[] = stringToStringArray($test1_o[1], "]");
string $test2[] = stringToStringArray($test2_o[1], "]");
string $test3[] = stringToStringArray($test3_o[1], "]");
string $test4[] = stringToStringArray($test4_o[1], "]");
if($test1[0]=="vtx["+"\n"||$test2[0]=="vtx["+"\n"||$test3[0]=="vtx["+"\n"||$test4[0]=="vtx["+"\n")
{
}else
{
float $pointPos1[] = `pointPosition -w $pointPosName1` ;
float $pointPos2[] = `pointPosition -w $pointPosName2` ;
float $pointPos3[] = `pointPosition -w $pointPosName3` ;
float $pointPos4[] = `pointPosition -w $pointPosName4` ;
float $faceArea = adia_CountArea($pointPos1,$pointPos2,$pointPos3);
if($faceArea>$sizeUI)
{
if(size($element_G)>1)
{
string $e[];
$e[0] = $element[$i];
$element_G = stringArrayRemove($e,$element_G);
}
}else {
select -cl ;
select -tgl $vName0 ;
select -tgl $vName1 ;
select -tgl $vName2 ;
select -tgl $vName3 ;
polySetToFaceNormal ;
select -cl ;
string $vName0_0="";
string $vName1_1="";
string $vName2_2="";
string $vName3_3="";
if(`radioButtonGrp -q -sl adia_Select`==1)
{
$vName0_0 = $objectName[0]+".vtxFace["+ $vertex[2] +"]["+(string)((int)($face[0])+1) +"]";
$vName1_1 = $objectName[0]+".vtxFace["+ $vertex[3] +"]["+(string)((int)($face[0])-1) +"]";
$vName2_2 = $objectName[0]+".vtxFace["+ $vertex[4] +"]["+(string)((int)($face[0])-1) +"]";
$vName3_3 = $objectName[0]+".vtxFace["+ $vertex[5] +"]["+(string)((int)($face[0])+1) +"]";
}else if(`radioButtonGrp -q -sl adia_Select`==2)
{
string $mesh = $objectName[0];
string $localer[]= `spaceLocator -p 0 0 0`;
move -r $pointPos1[0] $pointPos1[1] $pointPos1[2];
string $cpom = `createNode closestPointOnMesh`;
connectAttr -f ($mesh+".outMesh")($cpom+".inMesh");
connectAttr -f ($localer[0]+".translate")($cpom+".inPosition");
int $closestVert = `getAttr ($cpom + ".closestVertexIndex")`;
string $vertName = $mesh+".vtx["+$closestVert+"]";
$vName0_0 = $vertName;
$vName1_1 = $vertName;
$vName2_2 = $vertName;
$vName3_3 = $vertName;
delete $cpom;
delete $localer[0];
}
if(catch(`select -tgl $vName0_0`)||catch(`ls -sl $vName0_0`))
{
}else{
select -tgl $vName0;
if(catch(`select -tgl $vName0_0`))
{
}else{
select -tgl $vName0_0;
polyAverageNormal -prenormalize 1 -allowZeroNormal 0 -postnormalize 0 -distance 0.1 -replaceNormalXYZ 1 0 0 ;
select -cl ;
}
select -cl ;
select -tgl $vName1;
if(catch(`select -tgl $vName1_1`))
{
}else{
select -tgl $vName1_1;
polyAverageNormal -prenormalize 1 -allowZeroNormal 0 -postnormalize 0 -distance 0.1 -replaceNormalXYZ 1 0 0 ;
select -cl ;
}
select -cl ;
select -tgl $vName2;
if(catch(`select -tgl $vName2_2`))
{
}else{
select -tgl $vName2_2;
polyAverageNormal -prenormalize 1 -allowZeroNormal 0 -postnormalize 0 -distance 0.1 -replaceNormalXYZ 1 0 0 ;
select -cl ;
}
select -cl ;
select -tgl $vName3;
if(catch(`select -tgl $vName3_3`))
{
}else{
select -tgl $vName3_3;
polyAverageNormal -prenormalize 1 -allowZeroNormal 0 -postnormalize 0 -distance 0.1 -replaceNormalXYZ 1 0 0 ;
select -cl ;
}
}
}
}
}
if(`radioButtonGrp -q -sl adia_Select`==1)
{
string $vtxlist[] = `polyListComponentConversion -ff -tv $element_G`;
$vtxlist = `filterExpand -sm 31 -ex true $vtxlist`;
for($vtx in $vtxlist)
{
string $faceList[] = `polyListComponentConversion -fv -tf $vtx`;
$faceList =`filterExpand -sm 34 -ex true $faceList`;
string $faceList2[] = stringArrayRemove($element,$faceList);
float $avNormal[] = {0,0,0};
int $i = 0;
if(size($faceList2)==0)
{
$faceList2 = $faceList;
}
for($ff in $faceList2)
{
string $nrm[] = `polyInfo -faceNormals $ff`;
string $tkBuf[];
float $tNml[] = {0,0,0};
tokenize $nrm[0] " " $tkBuf;
$tNml[0]+=((float)($tkBuf[2]));
$tNml[1]+=((float)($tkBuf[3]));
$tNml[2]+=((float)($tkBuf[4]));
$avNormal[0] += $tNml[0];
$avNormal[1] += $tNml[1];
$avNormal[2] += $tNml[2];
$i++;
}
if($i)
{
$avNormal[0] = $avNormal[0]/$i;
$avNormal[1] = $avNormal[1]/$i;
$avNormal[2] = $avNormal[2]/$i;
normalize($avNormal);
polyNormalPerVertex -xyz $avNormal[0] $avNormal[1] $avNormal [2] $vtx;
}
}
}
string $shorterList[] = stringArrayRemoveDuplicates($vertexName_G);
string $diff[] = stringArrayRemoveExact($shorterList,$vertexName_G);
if(size($diff)>0)
{
for($each in $diff)
{
string $check[]={};
tokenize $each "vtx[" $check;
if($check[1]!="\n"+"]")
{
if(catch (`select -tgl $each`))
{
}
else
{
select -cl;
select -tgl $each ;
polyAverageNormal -prenormalize 1 -allowZeroNormal 0 -postnormalize 0 -distance 0.1 -replaceNormalXYZ 1 0 0 ;
select -cl;
}
}
}
if(catch(`select -r $objectName_G[0]`))
{
}else{select -r $objectName_G[0];}
for($ele in $element_G)
{
if(catch(`select -tgl $ele`))
{
print("erro");
}
else{
select -add $ele;
}
}
}
print("succeed!");
}
if(size($elementVertex)>0)
{
if(`radioButtonGrp -q -sl adia_Select`==3)
{
$vertexNormal_G = `polyNormalPerVertex -q -xyz $elementVertex[0]`;
print("Copy Value:"+"x:"+ $vertexNormal_G[0] +"__y:"+$vertexNormal_G[1] +"__z:"+$vertexNormal_G[2]);
}else if(`radioButtonGrp -q -sl adia_Select`==4)
{
for($i=0;$i<size($elementVertex);$i++)
{
polyNormalPerVertex -xyz $vertexNormal_G[0] $vertexNormal_G[1] $vertexNormal_G[2] $elementVertex[$i];
}
print("Successfully pasted normal information!");
}
}
pause -sec 1;
clear $element_G;
clear $vertexName_G;
clear $objectName_G;
}
global proc Do3_2()
{
disableIncorrectNameWarning;
global string $vertexName_G[];
global string $element_G[];
global string $objectName_G[]={};
global float $vertexNormal_G[]={};
string $selectList[];
$selectList = `ls -selection -flatten`;
string $element[];
$element = `filterExpand -expand on -selectionMask 34 $selectList`;
$elementVertex = `filterExpand -expand on -selectionMask 31 -selectionMask 70 $selectList`;
for($ele in $element)
{
$element_G[size($element_G)] = $ele;
}
if(size($element)>0)
{
print("Executing...");
for($i = 0 ; $i < size($element); $i++)
{
float $sizeUI = `floatFieldGrp -q -v1 adia_NormalValue`;
string $objectName[] = stringToStringArray($element[$i], ".");
$objectName_G[0] = $objectName[0];
string $sFaceVertexNormal[]=`polyInfo -faceToVertex $element[$i]`;
string $vertex[] = stringToStringArray($sFaceVertexNormal[0], " ");
string $face[] = stringToStringArray($vertex[1],":");
string $vName0 = $objectName[0]+".vtxFace["+ $vertex[2] +"]["+$face[0] +"]";
string $vName1 = $objectName[0]+".vtxFace["+ $vertex[3] +"]["+$face[0] +"]";
string $vName2 = $objectName[0]+".vtxFace["+ $vertex[4] +"]["+$face[0] +"]";
string $vName3 = $objectName[0]+".vtxFace["+ $vertex[5] +"]["+$face[0] +"]";
string $pointPosName1 = $objectName[0]+".vtx["+ $vertex[2] +"]";
string $pointPosName2 = $objectName[0]+".vtx["+ $vertex[3] +"]";
string $pointPosName3 = $objectName[0]+".vtx["+ $vertex[4] +"]";
string $pointPosName4 = $objectName[0]+".vtx["+ $vertex[5] +"]";
$vertexName_G[size($vertexName_G)] = $pointPosName1;
$vertexName_G[size($vertexName_G)] = $pointPosName2;
$vertexName_G[size($vertexName_G)] = $pointPosName3;
$vertexName_G[size($vertexName_G)] = $pointPosName4;
string $test1_o[] = stringToStringArray($pointPosName1, ".");
string $test2_o[] = stringToStringArray($pointPosName2, ".");
string $test3_o[] = stringToStringArray($pointPosName3, ".");
string $test4_o[] = stringToStringArray($pointPosName4, ".");
string $test1[] = stringToStringArray($test1_o[1], "]");
string $test2[] = stringToStringArray($test2_o[1], "]");
string $test3[] = stringToStringArray($test3_o[1], "]");
string $test4[] = stringToStringArray($test4_o[1], "]");
if($test1[0]=="vtx["+"\n"||$test2[0]=="vtx["+"\n"||$test3[0]=="vtx["+"\n"||$test4[0]=="vtx["+"\n")
{
string $e[];
$e[0] = $element[$i];
$element_G = stringArrayRemove($e,$element_G);
}else
{
float $pointPos1[] = `pointPosition -w $pointPosName1` ;
float $pointPos2[] = `pointPosition -w $pointPosName2` ;
float $pointPos3[] = `pointPosition -w $pointPosName3` ;
float $pointPos4[] = `pointPosition -w $pointPosName4` ;
float $faceArea = adia_CountArea($pointPos1,$pointPos2,$pointPos3);
if($faceArea>$sizeUI)
{
if(size($element_G)>0)
{
string $e[];
$e[0] = $element[$i];
$element_G = stringArrayRemove($e,$element_G);
}
}
}
}
select -cl;
for($ele in $element_G)
{
if(catch(`select -tgl $ele`))
{
print("erro");
}
else{
select -add $ele;
}
}
pause -sec 1;
clear $element_G;
clear $vertexName_G;
clear $objectName_G;
print("succeed!");
}
}
global proc Do4()
{
string $selectList[];
$selectList = `ls -selection -flatten`;
string $element[];
$element = `filterExpand -expand on -selectionMask 34 $selectList`;
if(size($element)==1)
{
string $objectName[] = stringToStringArray($element[0], ".");
string $sFaceVertexNormal[]=`polyInfo -faceToVertex $element[0]`;
string $vertex[] = stringToStringArray($sFaceVertexNormal[0], " ");
string $face[] = stringToStringArray($vertex[1],":");
string $vName0 = $objectName[0]+".vtxFace["+ $vertex[2] +"]["+$face[0] +"]";
string $vName1 = $objectName[0]+".vtxFace["+ $vertex[3] +"]["+$face[0] +"]";
string $vName2 = $objectName[0]+".vtxFace["+ $vertex[4] +"]["+$face[0] +"]";
string $pointPosName1 = $objectName[0]+".vtx["+ $vertex[2] +"]";
string $pointPosName2 = $objectName[0]+".vtx["+ $vertex[3] +"]";
string $pointPosName3 = $objectName[0]+".vtx["+ $vertex[4] +"]";
float $pointPos1[] = `pointPosition -l $pointPosName1` ;
float $pointPos2[] = `pointPosition -l $pointPosName2` ;
float $pointPos3[] = `pointPosition -l $pointPosName3` ;
float $faceArea = adia_CountArea($pointPos1,$pointPos2,$pointPos3);
floatFieldGrp -e -v1 $faceArea adia_NormalValue2;
}
}
global proc matrix myWG_CreateVecMatrix(float $x, float$y, float$z)
{
matrix $mRes_Mtx[1][4]=<<$x,$y,$z,0>>;
return($mRes_Mtx);
}
global proc matrix adia_GetObjectMatrix(string $objectName)
{
float $objectMatrix[] = `getAttr ($objectName+".inverseMatrix")`;
matrix $objectMatrixInfo4x4[4][4]=<<
$objectMatrix[0],$objectMatrix[4],$objectMatrix[8],$objectMatrix[12];
$objectMatrix[1],$objectMatrix[5],$objectMatrix[9],$objectMatrix[13];
$objectMatrix[2],$objectMatrix[6],$objectMatrix[10],$objectMatrix[14];
$objectMatrix[3],$objectMatrix[7],$objectMatrix[11],$objectMatrix[15]
>>;
return($objectMatrixInfo4x4);
}
global proc matrix adia_ObjectSpaceToWorldSpace(matrix $in_matrix,string $objectName)
{
matrix $objectMatrixInfo4x4[4][4] = adia_GetObjectMatrix($objectName);
matrix $Out_Matrix[1][4]=$in_matrix * $objectMatrixInfo4x4;
return($Out_Matrix);
}
global proc float adia_CountArea(float $a[], float $b[],float $c[])
{
float $area = -1;
float $side[3];
$side[0] = sqrt(pow($a[0]-$b[0],2)+pow($a[1]-$b[1],2)+pow($a[2]-$b[2],2));
$side[1] = sqrt(pow($a[0]-$c[0],2)+pow($a[1]-$c[1],2)+pow($a[2]-$c[2],2));
$side[2] = sqrt(pow($c[0]-$b[0],2)+pow($c[1]-$b[1],2)+pow($c[2]-$b[2],2));
if($side[0]+$side[1]<=$side[2]||$side[0]+$side[2]<=$side[1]||$side[1]+$side[2]<=$side[0])
{
return $area;
}
//s=sqr(p*(p-a)(p-b)(p-c));
float $p = ($side[0]+$side[1]+$side[2])/2;
$area = sqrt($p*($p-$side[0])*($p-$side[1])*($p-$side[2]));
return $area*2;
}
VertexNormalSort();
VertexNormalBatch_Main.mel (直接添加到工具架)
global string $gShelfTopLevel;
string $shelves[] = `tabLayout -q -childArray $gShelfTopLevel`;
int $counter=0;
int $btmCounter=0;
string $imageSet = "selectSurfaceBorder.png";
string $buttonLab = "VertexNoramlBatch";
string $buttonAnnotation = "VertexNoramlBatch(PleaseReadUserGuide)";
string $script = " //VertexNormalBatch\n global proc VertexNormalSort(){\n if(`window -query -exists adia_myVertexNormalSort_Window`)\n deleteUI adia_myVertexNormalSort_Window;\n string $s = \"Adia_vertexNormalBatchV1\";\n string $chkbxState = \"not checked\";\n window -title $s -menuBar true -maximizeButton true -minimizeButton true adia_myVertexNormalSort_Window;\n columnLayout -adjustableColumn true;\n text -label \"Refer the manual to use\" -en off;\n radioButtonGrp -label \"Mode\" -numberOfRadioButtons 4\n -labelArray4 \"1 Hardening\" \"2 soften\" \"Copy \" \"Paste \" -sl 1\n adia_Select;\n floatFieldGrp -precision 3 -numberOfFields 1 -extraLabel \"cm\" -label \n \"Less than\" -value1 100.0 -columnWidth 1 65 adia_NormalValue;\n floatFieldGrp -precision 3 -numberOfFields 1 -extraLabel \"cm\" -label \"Face area\" -value1 0.0 -columnWidth 1 65 -en off adia_NormalValue2;\n button -height 23 -width 23 -backgroundColor 255 241 155 -label \"Get area\"\n -command \"Do4()\";\n text -label \" \" -en off;\n button -height 23 -width 23 -backgroundColor 255 241 155 -label \"Filter area\"\n -command \"Do3_2()\";\n text -label \" \" -en off;\n button -height 23 -width 23 -backgroundColor 255 241 155 -label \"Run\"\n -command \"Do3_1()\";\n text -label \" \" -en off;\n window -edit -widthHeight 600 210 adia_myVertexNormalSort_Window;\n showWindow adia_myVertexNormalSort_Window;\n }\n global string $vertexName_G[]={};\n global string $element_G[]={};\n global string $objectName_G[]={};\n global float $vertexNormal_G[]={};\n global proc Do3()\n {\n disableIncorrectNameWarning;\n global string $vertexName_G[];\n global string $element_G[];\n global string $objectName_G[]={};\n global float $vertexNormal_G[]={};\n string $selectList[];\n $selectList = `ls -selection -flatten`;\n string $element[];\n $element = `filterExpand -expand on -selectionMask 34 $selectList`;\n $elementVertex = `filterExpand -expand on -selectionMask 31 -selectionMask 70 $selectList`;\n for($ele in $element)\n {\n $element_G[size($element_G)] = $ele;\n }\n if(size($element)>0)\n {\n print(\"Executing...\");\n for($i = 0 ; $i < size($element); $i++)\n {\n float $sizeUI = `floatFieldGrp -q -v1 adia_NormalValue`;\n string $objectName[] = stringToStringArray($element[$i], \".\");\n $objectName_G[0] = $objectName[0];\n string $sFaceVertexNormal[]=`polyInfo -faceToVertex $element[$i]`; \n string $vertex[] = stringToStringArray($sFaceVertexNormal[0], \" \");\n string $face[] = stringToStringArray($vertex[1],\":\");\n string $vName0 = $objectName[0]+\".vtxFace[\"+ $vertex[2] +\"][\"+$face[0] +\"]\";\n string $vName1 = $objectName[0]+\".vtxFace[\"+ $vertex[3] +\"][\"+$face[0] +\"]\";\n string $vName2 = $objectName[0]+\".vtxFace[\"+ $vertex[4] +\"][\"+$face[0] +\"]\";\n string $vName3 = $objectName[0]+\".vtxFace[\"+ $vertex[5] +\"][\"+$face[0] +\"]\";\n string $pointPosName1 = $objectName[0]+\".vtx[\"+ $vertex[2] +\"]\";\n string $pointPosName2 = $objectName[0]+\".vtx[\"+ $vertex[3] +\"]\";\n string $pointPosName3 = $objectName[0]+\".vtx[\"+ $vertex[4] +\"]\";\n string $pointPosName4 = $objectName[0]+\".vtx[\"+ $vertex[5] +\"]\";\n $vertexName_G[size($vertexName_G)] = $pointPosName1;\n $vertexName_G[size($vertexName_G)] = $pointPosName2;\n $vertexName_G[size($vertexName_G)] = $pointPosName3;\n $vertexName_G[size($vertexName_G)] = $pointPosName4;\n string $test1_o[] = stringToStringArray($pointPosName1, \".\");\n string $test2_o[] = stringToStringArray($pointPosName2, \".\");\n string $test3_o[] = stringToStringArray($pointPosName3, \".\"); \n string $test4_o[] = stringToStringArray($pointPosName4, \".\");\n string $test1[] = stringToStringArray($test1_o[1], \"]\");\n string $test2[] = stringToStringArray($test2_o[1], \"]\");\n string $test3[] = stringToStringArray($test3_o[1], \"]\"); \n string $test4[] = stringToStringArray($test4_o[1], \"]\");\n if($test1[0]==\"vtx[\"+\"\\n\"||$test2[0]==\"vtx[\"+\"\\n\"||$test3[0]==\"vtx[\"+\"\\n\"||$test4[0]==\"vtx[\"+\"\\n\")\n {\n }else\n {\n float $pointPos1[] = `pointPosition -w $pointPosName1` ;\n float $pointPos2[] = `pointPosition -w $pointPosName2` ;\n float $pointPos3[] = `pointPosition -w $pointPosName3` ;\n float $pointPos4[] = `pointPosition -w $pointPosName4` ;\n float $faceArea = adia_CountArea($pointPos1,$pointPos2,$pointPos3);\n if($faceArea<=$sizeUI)\n {\n }else {\n select -cl ;\n select -tgl $vName0 ;\n select -tgl $vName1 ;\n select -tgl $vName2 ;\n select -tgl $vName3 ;\n polySetToFaceNormal ;\n select -cl ;\n string $vName0_0=\"\";\n string $vName1_1=\"\";\n string $vName2_2=\"\";\n string $vName3_3=\"\";\n if(`radioButtonGrp -q -sl adia_Select`==1)\n {\n $vName0_0 = $objectName[0]+\".vtxFace[\"+ $vertex[2] +\"][\"+(string)((int)($face[0])+1) +\"]\";\n $vName1_1 = $objectName[0]+\".vtxFace[\"+ $vertex[3] +\"][\"+(string)((int)($face[0])-1) +\"]\";\n $vName2_2 = $objectName[0]+\".vtxFace[\"+ $vertex[4] +\"][\"+(string)((int)($face[0])-1) +\"]\";\n $vName3_3 = $objectName[0]+\".vtxFace[\"+ $vertex[5] +\"][\"+(string)((int)($face[0])+1) +\"]\";\n }else if(`radioButtonGrp -q -sl adia_Select`==2)\n {\n string $mesh = $objectName[0];\n string $localer[]= `spaceLocator -p 0 0 0`;\n move -r $pointPos1[0] $pointPos1[1] $pointPos1[2];\n string $cpom = `createNode closestPointOnMesh`;\n connectAttr -f ($mesh+\".outMesh\")($cpom+\".inMesh\");\n connectAttr -f ($localer[0]+\".translate\")($cpom+\".inPosition\");\n int $closestVert = `getAttr ($cpom + \".closestVertexIndex\")`;\n string $vertName = $mesh+\".vtx[\"+$closestVert+\"]\";\n $vName0_0 = $vertName;\n $vName1_1 = $vertName;\n $vName2_2 = $vertName;\n $vName3_3 = $vertName;\n delete $cpom;\n delete $localer[0];\n } \n if(catch(`select -tgl $vName0_0`)||catch(`ls -sl $vName0_0`))\n {\n }else{\n select -tgl $vName0;\n if(catch(`select -tgl $vName0_0`))\n {\n }else{\n select -tgl $vName0_0;\n polyAverageNormal -prenormalize 1 -allowZeroNormal 0 -postnormalize 0 -distance 0.1 -replaceNormalXYZ 1 0 0 ;\n select -cl ;\n }\n select -cl ;\n select -tgl $vName1;\n if(catch(`select -tgl $vName1_1`))\n {\n }else{\n select -tgl $vName1_1;\n polyAverageNormal -prenormalize 1 -allowZeroNormal 0 -postnormalize 0 -distance 0.1 -replaceNormalXYZ 1 0 0 ;\n select -cl ;\n }\n select -cl ;\n select -tgl $vName2;\n if(catch(`select -tgl $vName2_2`))\n {\n }else{\n select -tgl $vName2_2;\n polyAverageNormal -prenormalize 1 -allowZeroNormal 0 -postnormalize 0 -distance 0.1 -replaceNormalXYZ 1 0 0 ;\n select -cl ;\n }\n select -cl ;\n select -tgl $vName3;\n if(catch(`select -tgl $vName2_2`))\n {\n }else{\n select -tgl $vName3_3;\n polyAverageNormal -prenormalize 1 -allowZeroNormal 0 -postnormalize 0 -distance 0.1 -replaceNormalXYZ 1 0 0 ;\n select -cl ;\n }\n }\n }\n }\n }\n string $shorterList[] = stringArrayRemoveDuplicates($vertexName_G);\n string $diff[] = stringArrayRemoveExact($shorterList,$vertexName_G);\n for($each in $diff)\n {\n if(catch (`select -tgl $each`))\n {\n }\n else\n {\n select -cl;\n select -tgl $each ;\n polyAverageNormal -prenormalize 1 -allowZeroNormal 0 -postnormalize 0 -distance 0.1 -replaceNormalXYZ 1 0 0 ;\n select -cl;\n }\n }\n if(catch(`select -r $objectName_G[0]`))\n {\n }else{select -r $objectName_G[0];}\n for($ele in $element_G)\n {\n if(catch(`select -tgl $ele`))\n {\n print(\"erro\");\n }\n else{\n select -add $ele;\n }\n }\n print(\"succeed!\");\n }\n if(size($elementVertex)>0)\n {\n if(`radioButtonGrp -q -sl adia_Select`==3)\n {\n $vertexNormal_G = `polyNormalPerVertex -q -xyz $elementVertex[0]`;\n print(\"Copy Value:\"+\"x:\"+ $vertexNormal_G[0] +\"__y:\"+$vertexNormal_G[1] +\"__z:\"+$vertexNormal_G[2]);\n }else if(`radioButtonGrp -q -sl adia_Select`==4)\n {\n for($i=0;$i<size($elementVertex);$i++)\n {\n polyNormalPerVertex -xyz $vertexNormal_G[0] $vertexNormal_G[1] $vertexNormal_G[2] $elementVertex[$i];\n }\n print(\"Successfully pasted normal information!\");\n }\n }\n pause -sec 1;\n clear $element_G;\n clear $vertexName_G;\n clear $objectName_G;\n }\n global proc Do3_1()\n {\n disableIncorrectNameWarning;\n global string $vertexName_G[];\n global string $element_G[];\n global string $objectName_G[]={};\n global float $vertexNormal_G[]={};\n string $selectList[];\n $selectList = `ls -selection -flatten`;\n string $element[];\n $element = `filterExpand -expand on -selectionMask 34 $selectList`;\n $elementVertex = `filterExpand -expand on -selectionMask 31 -selectionMask 70 $selectList`;\n for($ele in $element)\n {\n $element_G[size($element_G)] = $ele;\n }\n if(size($element)>0)\n {\n print(\"Executing...\");\n for($i = 0 ; $i < size($element); $i++)\n {\n float $sizeUI = `floatFieldGrp -q -v1 adia_NormalValue`;\n string $objectName[] = stringToStringArray($element[$i], \".\");\n $objectName_G[0] = $objectName[0];\n string $sFaceVertexNormal[]=`polyInfo -faceToVertex $element[$i]`; \n string $vertex[] = stringToStringArray($sFaceVertexNormal[0], \" \");\n string $face[] = stringToStringArray($vertex[1],\":\");\n string $vName0 = $objectName[0]+\".vtxFace[\"+ $vertex[2] +\"][\"+$face[0] +\"]\";\n string $vName1 = $objectName[0]+\".vtxFace[\"+ $vertex[3] +\"][\"+$face[0] +\"]\";\n string $vName2 = $objectName[0]+\".vtxFace[\"+ $vertex[4] +\"][\"+$face[0] +\"]\";\n string $vName3 = $objectName[0]+\".vtxFace[\"+ $vertex[5] +\"][\"+$face[0] +\"]\";\n string $pointPosName1 = $objectName[0]+\".vtx[\"+ $vertex[2] +\"]\";\n string $pointPosName2 = $objectName[0]+\".vtx[\"+ $vertex[3] +\"]\";\n string $pointPosName3 = $objectName[0]+\".vtx[\"+ $vertex[4] +\"]\";\n string $pointPosName4 = $objectName[0]+\".vtx[\"+ $vertex[5] +\"]\";\n $vertexName_G[size($vertexName_G)] = $pointPosName1;\n $vertexName_G[size($vertexName_G)] = $pointPosName2;\n $vertexName_G[size($vertexName_G)] = $pointPosName3;\n $vertexName_G[size($vertexName_G)] = $pointPosName4;\n string $test1_o[] = stringToStringArray($pointPosName1, \".\");\n string $test2_o[] = stringToStringArray($pointPosName2, \".\");\n string $test3_o[] = stringToStringArray($pointPosName3, \".\"); \n string $test4_o[] = stringToStringArray($pointPosName4, \".\");\n string $test1[] = stringToStringArray($test1_o[1], \"]\");\n string $test2[] = stringToStringArray($test2_o[1], \"]\");\n string $test3[] = stringToStringArray($test3_o[1], \"]\"); \n string $test4[] = stringToStringArray($test4_o[1], \"]\");\n if($test1[0]==\"vtx[\"+\"\\n\"||$test2[0]==\"vtx[\"+\"\\n\"||$test3[0]==\"vtx[\"+\"\\n\"||$test4[0]==\"vtx[\"+\"\\n\")\n {\n }else\n {\n float $pointPos1[] = `pointPosition -w $pointPosName1` ;\n float $pointPos2[] = `pointPosition -w $pointPosName2` ;\n float $pointPos3[] = `pointPosition -w $pointPosName3` ;\n float $pointPos4[] = `pointPosition -w $pointPosName4` ;\n float $faceArea = adia_CountArea($pointPos1,$pointPos2,$pointPos3);\n if($faceArea>$sizeUI)\n {\n if(size($element_G)>1)\n {\n string $e[];\n $e[0] = $element[$i];\n $element_G = stringArrayRemove($e,$element_G);\n }\n }else {\n select -cl ;\n select -tgl $vName0 ;\n select -tgl $vName1 ;\n select -tgl $vName2 ;\n select -tgl $vName3 ;\n polySetToFaceNormal ;\n select -cl ;\n string $vName0_0=\"\";\n string $vName1_1=\"\";\n string $vName2_2=\"\";\n string $vName3_3=\"\";\n if(`radioButtonGrp -q -sl adia_Select`==1)\n {\n $vName0_0 = $objectName[0]+\".vtxFace[\"+ $vertex[2] +\"][\"+(string)((int)($face[0])+1) +\"]\";\n $vName1_1 = $objectName[0]+\".vtxFace[\"+ $vertex[3] +\"][\"+(string)((int)($face[0])-1) +\"]\";\n $vName2_2 = $objectName[0]+\".vtxFace[\"+ $vertex[4] +\"][\"+(string)((int)($face[0])-1) +\"]\";\n $vName3_3 = $objectName[0]+\".vtxFace[\"+ $vertex[5] +\"][\"+(string)((int)($face[0])+1) +\"]\";\n }else if(`radioButtonGrp -q -sl adia_Select`==2)\n {\n string $mesh = $objectName[0];\n string $localer[]= `spaceLocator -p 0 0 0`;\n move -r $pointPos1[0] $pointPos1[1] $pointPos1[2];\n string $cpom = `createNode closestPointOnMesh`;\n connectAttr -f ($mesh+\".outMesh\")($cpom+\".inMesh\");\n connectAttr -f ($localer[0]+\".translate\")($cpom+\".inPosition\");\n int $closestVert = `getAttr ($cpom + \".closestVertexIndex\")`;\n string $vertName = $mesh+\".vtx[\"+$closestVert+\"]\";\n $vName0_0 = $vertName;\n $vName1_1 = $vertName;\n $vName2_2 = $vertName;\n $vName3_3 = $vertName;\n delete $cpom;\n delete $localer[0];\n } \n if(catch(`select -tgl $vName0_0`)||catch(`ls -sl $vName0_0`))\n {\n }else{\n select -tgl $vName0;\n if(catch(`select -tgl $vName0_0`))\n {\n }else{\n select -tgl $vName0_0;\n polyAverageNormal -prenormalize 1 -allowZeroNormal 0 -postnormalize 0 -distance 0.1 -replaceNormalXYZ 1 0 0 ;\n select -cl ;\n }\n select -cl ;\n select -tgl $vName1;\n if(catch(`select -tgl $vName1_1`))\n {\n }else{\n select -tgl $vName1_1;\n polyAverageNormal -prenormalize 1 -allowZeroNormal 0 -postnormalize 0 -distance 0.1 -replaceNormalXYZ 1 0 0 ;\n select -cl ;\n }\n select -cl ;\n select -tgl $vName2;\n if(catch(`select -tgl $vName2_2`))\n {\n }else{\n select -tgl $vName2_2;\n polyAverageNormal -prenormalize 1 -allowZeroNormal 0 -postnormalize 0 -distance 0.1 -replaceNormalXYZ 1 0 0 ;\n select -cl ;\n }\n select -cl ;\n select -tgl $vName3;\n if(catch(`select -tgl $vName3_3`))\n {\n }else{\n select -tgl $vName3_3;\n polyAverageNormal -prenormalize 1 -allowZeroNormal 0 -postnormalize 0 -distance 0.1 -replaceNormalXYZ 1 0 0 ;\n select -cl ;\n }\n }\n }\n }\n }\n if(`radioButtonGrp -q -sl adia_Select`==1)\n {\n string $vtxlist[] = `polyListComponentConversion -ff -tv $element_G`;\n $vtxlist = `filterExpand -sm 31 -ex true $vtxlist`;\n for($vtx in $vtxlist)\n {\n string $faceList[] = `polyListComponentConversion -fv -tf $vtx`;\n $faceList =`filterExpand -sm 34 -ex true $faceList`;\n string $faceList2[] = stringArrayRemove($element,$faceList);\n float $avNormal[] = {0,0,0};\n int $i = 0;\n if(size($faceList2)==0)\n {\n $faceList2 = $faceList;\n }\n for($ff in $faceList2)\n {\n string $nrm[] = `polyInfo -faceNormals $ff`;\n string $tkBuf[];\n float $tNml[] = {0,0,0};\n tokenize $nrm[0] \" \" $tkBuf;\n $tNml[0]+=((float)($tkBuf[2]));\n $tNml[1]+=((float)($tkBuf[3]));\n $tNml[2]+=((float)($tkBuf[4]));\n $avNormal[0] += $tNml[0];\n $avNormal[1] += $tNml[1];\n $avNormal[2] += $tNml[2];\n $i++;\n }\n if($i)\n {\n $avNormal[0] = $avNormal[0]/$i;\n $avNormal[1] = $avNormal[1]/$i;\n $avNormal[2] = $avNormal[2]/$i;\n normalize($avNormal);\n polyNormalPerVertex -xyz $avNormal[0] $avNormal[1] $avNormal [2] $vtx;\n }\n }\n }\n string $shorterList[] = stringArrayRemoveDuplicates($vertexName_G);\n string $diff[] = stringArrayRemoveExact($shorterList,$vertexName_G);\n if(size($diff)>0)\n {\n for($each in $diff)\n {\n string $check[]={};\n tokenize $each \"vtx[\" $check;\n if($check[1]!=\"\\n\"+\"]\")\n {\n if(catch (`select -tgl $each`))\n {\n }\n else\n {\n select -cl;\n select -tgl $each ;\n polyAverageNormal -prenormalize 1 -allowZeroNormal 0 -postnormalize 0 -distance 0.1 -replaceNormalXYZ 1 0 0 ;\n select -cl;\n }\n }\n }\n if(catch(`select -r $objectName_G[0]`))\n {\n }else{select -r $objectName_G[0];}\n for($ele in $element_G)\n {\n if(catch(`select -tgl $ele`))\n {\n print(\"erro\");\n }\n else{\n select -add $ele;\n }\n }\n }\n print(\"succeed!\");\n }\n if(size($elementVertex)>0)\n {\n if(`radioButtonGrp -q -sl adia_Select`==3)\n {\n $vertexNormal_G = `polyNormalPerVertex -q -xyz $elementVertex[0]`;\n print(\"Copy Value:\"+\"x:\"+ $vertexNormal_G[0] +\"__y:\"+$vertexNormal_G[1] +\"__z:\"+$vertexNormal_G[2]);\n }else if(`radioButtonGrp -q -sl adia_Select`==4)\n {\n for($i=0;$i<size($elementVertex);$i++)\n {\n polyNormalPerVertex -xyz $vertexNormal_G[0] $vertexNormal_G[1] $vertexNormal_G[2] $elementVertex[$i];\n }\n print(\"Successfully pasted normal information!\");\n }\n }\n pause -sec 1;\n clear $element_G;\n clear $vertexName_G;\n clear $objectName_G;\n }\n global proc Do3_2()\n {\n disableIncorrectNameWarning;\n global string $vertexName_G[];\n global string $element_G[];\n global string $objectName_G[]={};\n global float $vertexNormal_G[]={};\n string $selectList[];\n $selectList = `ls -selection -flatten`;\n string $element[];\n $element = `filterExpand -expand on -selectionMask 34 $selectList`;\n $elementVertex = `filterExpand -expand on -selectionMask 31 -selectionMask 70 $selectList`;\n for($ele in $element)\n {\n $element_G[size($element_G)] = $ele;\n }\n if(size($element)>0)\n {\n print(\"Executing...\");\n for($i = 0 ; $i < size($element); $i++)\n {\n float $sizeUI = `floatFieldGrp -q -v1 adia_NormalValue`;\n string $objectName[] = stringToStringArray($element[$i], \".\");\n $objectName_G[0] = $objectName[0];\n string $sFaceVertexNormal[]=`polyInfo -faceToVertex $element[$i]`; \n string $vertex[] = stringToStringArray($sFaceVertexNormal[0], \" \");\n string $face[] = stringToStringArray($vertex[1],\":\");\n string $vName0 = $objectName[0]+\".vtxFace[\"+ $vertex[2] +\"][\"+$face[0] +\"]\";\n string $vName1 = $objectName[0]+\".vtxFace[\"+ $vertex[3] +\"][\"+$face[0] +\"]\";\n string $vName2 = $objectName[0]+\".vtxFace[\"+ $vertex[4] +\"][\"+$face[0] +\"]\";\n string $vName3 = $objectName[0]+\".vtxFace[\"+ $vertex[5] +\"][\"+$face[0] +\"]\";\n string $pointPosName1 = $objectName[0]+\".vtx[\"+ $vertex[2] +\"]\";\n string $pointPosName2 = $objectName[0]+\".vtx[\"+ $vertex[3] +\"]\";\n string $pointPosName3 = $objectName[0]+\".vtx[\"+ $vertex[4] +\"]\";\n string $pointPosName4 = $objectName[0]+\".vtx[\"+ $vertex[5] +\"]\";\n $vertexName_G[size($vertexName_G)] = $pointPosName1;\n $vertexName_G[size($vertexName_G)] = $pointPosName2;\n $vertexName_G[size($vertexName_G)] = $pointPosName3;\n $vertexName_G[size($vertexName_G)] = $pointPosName4;\n string $test1_o[] = stringToStringArray($pointPosName1, \".\");\n string $test2_o[] = stringToStringArray($pointPosName2, \".\");\n string $test3_o[] = stringToStringArray($pointPosName3, \".\"); \n string $test4_o[] = stringToStringArray($pointPosName4, \".\");\n string $test1[] = stringToStringArray($test1_o[1], \"]\");\n string $test2[] = stringToStringArray($test2_o[1], \"]\");\n string $test3[] = stringToStringArray($test3_o[1], \"]\"); \n string $test4[] = stringToStringArray($test4_o[1], \"]\");\n if($test1[0]==\"vtx[\"+\"\\n\"||$test2[0]==\"vtx[\"+\"\\n\"||$test3[0]==\"vtx[\"+\"\\n\"||$test4[0]==\"vtx[\"+\"\\n\")\n {\n string $e[];\n $e[0] = $element[$i];\n $element_G = stringArrayRemove($e,$element_G);\n }else\n {\n float $pointPos1[] = `pointPosition -w $pointPosName1` ;\n float $pointPos2[] = `pointPosition -w $pointPosName2` ;\n float $pointPos3[] = `pointPosition -w $pointPosName3` ;\n float $pointPos4[] = `pointPosition -w $pointPosName4` ;\n float $faceArea = adia_CountArea($pointPos1,$pointPos2,$pointPos3);\n if($faceArea>$sizeUI)\n {\n if(size($element_G)>0)\n {\n string $e[];\n $e[0] = $element[$i];\n $element_G = stringArrayRemove($e,$element_G);\n }\n }\n }\n }\n select -cl;\n for($ele in $element_G)\n {\n if(catch(`select -tgl $ele`))\n {\n print(\"erro\");\n }\n else{\n select -add $ele;\n }\n }\n pause -sec 1;\n clear $element_G;\n clear $vertexName_G;\n clear $objectName_G;\n print(\"succeed!\");\n }\n }\n global proc Do4()\n {\n string $selectList[];\n $selectList = `ls -selection -flatten`;\n string $element[];\n $element = `filterExpand -expand on -selectionMask 34 $selectList`;\n if(size($element)==1)\n {\n string $objectName[] = stringToStringArray($element[0], \".\");\n string $sFaceVertexNormal[]=`polyInfo -faceToVertex $element[0]`; \n string $vertex[] = stringToStringArray($sFaceVertexNormal[0], \" \");\n string $face[] = stringToStringArray($vertex[1],\":\");\n string $vName0 = $objectName[0]+\".vtxFace[\"+ $vertex[2] +\"][\"+$face[0] +\"]\";\n string $vName1 = $objectName[0]+\".vtxFace[\"+ $vertex[3] +\"][\"+$face[0] +\"]\";\n string $vName2 = $objectName[0]+\".vtxFace[\"+ $vertex[4] +\"][\"+$face[0] +\"]\";\n string $pointPosName1 = $objectName[0]+\".vtx[\"+ $vertex[2] +\"]\";\n string $pointPosName2 = $objectName[0]+\".vtx[\"+ $vertex[3] +\"]\";\n string $pointPosName3 = $objectName[0]+\".vtx[\"+ $vertex[4] +\"]\";\n float $pointPos1[] = `pointPosition -l $pointPosName1` ;\n float $pointPos2[] = `pointPosition -l $pointPosName2` ;\n float $pointPos3[] = `pointPosition -l $pointPosName3` ;\n float $faceArea = adia_CountArea($pointPos1,$pointPos2,$pointPos3);\n floatFieldGrp -e -v1 $faceArea adia_NormalValue2;\n }\n }\n global proc matrix myWG_CreateVecMatrix(float $x, float$y, float$z)\n {\n matrix $mRes_Mtx[1][4]=<<$x,$y,$z,0>>;\n return($mRes_Mtx);\n }\n global proc matrix adia_GetObjectMatrix(string $objectName)\n {\n float $objectMatrix[] = `getAttr ($objectName+\".inverseMatrix\")`;\n matrix $objectMatrixInfo4x4[4][4]=<<\n $objectMatrix[0],$objectMatrix[4],$objectMatrix[8],$objectMatrix[12];\n $objectMatrix[1],$objectMatrix[5],$objectMatrix[9],$objectMatrix[13];\n $objectMatrix[2],$objectMatrix[6],$objectMatrix[10],$objectMatrix[14];\n $objectMatrix[3],$objectMatrix[7],$objectMatrix[11],$objectMatrix[15]\n >>;\n return($objectMatrixInfo4x4);\n }\n global proc matrix adia_ObjectSpaceToWorldSpace(matrix $in_matrix,string $objectName)\n {\n matrix $objectMatrixInfo4x4[4][4] = adia_GetObjectMatrix($objectName);\n matrix $Out_Matrix[1][4]=$in_matrix * $objectMatrixInfo4x4;\n return($Out_Matrix);\n }\n global proc float adia_CountArea(float $a[], float $b[],float $c[])\n {\n float $area = -1;\n float $side[3];\n $side[0] = sqrt(pow($a[0]-$b[0],2)+pow($a[1]-$b[1],2)+pow($a[2]-$b[2],2));\n $side[1] = sqrt(pow($a[0]-$c[0],2)+pow($a[1]-$c[1],2)+pow($a[2]-$c[2],2));\n $side[2] = sqrt(pow($c[0]-$b[0],2)+pow($c[1]-$b[1],2)+pow($c[2]-$b[2],2));\n if($side[0]+$side[1]<=$side[2]||$side[0]+$side[2]<=$side[1]||$side[1]+$side[2]<=$side[0])\n {\n return $area; \n }\n //s=sqr(p*(p-a)(p-b)(p-c));\n float $p = ($side[0]+$side[1]+$side[2])/2;\n $area = sqrt($p*($p-$side[0])*($p-$side[1])*($p-$side[2]));\n return $area*2;\n }\n VertexNormalSort();\n ";
for($s in $shelves)
{
if($s=="Adia_Tools")
{
string $shelfButtons[] = `shelfLayout -q -childArray "Adia_Tools"`;
for($b in $shelfButtons)
{
string $label;
if(`objectTypeUI -isType "shelfButton" $b`)
{
$label = `shelfButton -q -label $b`;
if($label==$buttonLab)
{
$btmCounter++;
if($btmCounter>1)
{
deleteUI $b;
}
}
else{
deleteUI $b;
string $myButton = `shelfButton
-parent "Adia_Tools"
-enable 1
-width 34
-height 34
-manage 1
-visible 1
-annotation $buttonAnnotation
-label $buttonLab
-image1 $imageSet
-style "iconOnly"
-command $script`;
}
}
}
if(size($shelfButtons)==0)
{
string $myButton = `shelfButton
-rpt true
-parent "Adia_Tools"
-enable 1
-width 34
-height 34
-manage 1
-visible 1
-annotation $buttonAnnotation
-label $buttonLab
-image1 $imageSet
-style "iconOnly"
-command $script`;
}
//saveShelf $s ($tempDir + "Adia_Tools");
}else{
$counter++;
if($counter==size($shelves))
{
addNewShelfTab "Adia_Tools";
string $myButton = `shelfButton
-rpt true
-parent "Adia_Tools"
-enable 1
-width 34
-height 34
-manage 1
-visible 1
-annotation $buttonAnnotation
-label $buttonLab
-image1 $imageSet
-style "iconOnly"
-command $script`;
}
}
}