nanoblock_mel(); //----------------------------------------------------------------------------------------- //------- 所有的颗粒类型 -------------------------------------------- //----------------------------------------------------------------------------------------- global string $arrayTypeAC[]={"1x1y","1x1","1x2","1x3","1x4","1x6","1x8","1x10","1x3g","3x1y", "2x2","2x3","2x4","2x6","2x8","2x10", "1x1p","1x2p","1x3p","1x4p","1x6p","1x8p","2x2p","2x3p","2x4p", "1x1z","1x2z","1x3z","1x4z","2x1z","1x3l","1x3t", "1x2y","1x3y","1x4y","2x2y", "1x2ao","1x2tu","2x2ao","2x2tu","1x2ti","2x1ti", "1x2x","2x1x","1x2o","1x3x","2x3x","2x4x","2x2x", "1x1c","1x1h","2x2z","3x3g", "4x4","4x6","4x8","6x8","8x8","10x10","14x14","7x25","20x20","36x36" }; global int $allColor=92; global string $allSelectA[]; //----------------------------------------------------------------------------------------- //------- 所有的颗粒颜色 -------------------------------------------------------------- //----------------------------------------------------------------------------------------- global proc nanoblock_mel(){ //定义全局变量 global string $arrayTypeAC[]; print("arrayTypeAC:"+size($arrayTypeAC)); global int $allColor; //创建工具窗口 if (`window -q -ex createNanoblockUI`)deleteUI createNanoblockUI; window -t "SCBlock 2015年10月新版" -w 200 -h 30 createNanoblockUI; string $tabs=`tabLayout`; /////////////////////////////////////////////////////////// string $child0=`rowColumnLayout -nc 1 `; text -l "D:/Work/nanoblock/maya/Mel_1009/" path; text -l ""; //添加颜色和摄像机 button -c "onImport Color" -l "Color"; //添加线段 text -l ""; button -l "快速选择" -c "onQuickSelectUI"; button -l "去除小数点" -c "onDel"; button -l "打组镜像" -c "onMirr"; button -l "快速打组" -c "onGroup"; text -l ""; button -c "onImport Line" -l "Line"; text -l ""; button -l " 红线 " -bgc 1 0 0 -c "onLineR"; button -l " 蓝线 " -bgc 0 0.5 1 -c "onLineB"; button -l " 绿线 " -bgc 0 1 0 -c "onLineG" ; text -l ""; button -l "统计颗粒" -c "onKeli"; text -l ""; button -l "打开渲染目录" -c "openRenderFile"; button -l "渲染前合并模型" -c "preRender"; setParent..; /////////////////////////////////////////////////////////// string $child1=`rowColumnLayout -nc 10 `; string $pathFile=`text -q -l path`; string $tt; for($tt in $arrayTypeAC){ //print($tt+" "); iconTextButton -style "iconAndTextVertical" -image1 ($pathFile+"type/"+$tt+"_0.png") -label ($tt+"") -c ("onImport SC_"+$tt); } setParent..; /////////////////////////////////////////////////////////// string $child2=`rowColumnLayout -nc 13 `; string $pathFile=`text -q -l path`; //根据 全局变量 颗粒颜色 创建颗粒按钮 for($t=0;$t<$allColor;$t++){ iconTextButton -style "iconAndTextVertical" -image1 ($pathFile+"color/"+$t+".png") -label ($t+"") -c ("onColor vray_"+$t+" "+$t); if($t==29){text -l "森宝→" -bgc 0.2 0.2 0.2 ;} } setParent..; /////////////////////////////////////////////////////////// string $child3=`rowColumnLayout -nc 7 -bgc 0 1 1`; setParent..; tabLayout -edit -tabLabel $child0 "准备" -tabLabel $child1 "颗粒" -tabLabel $child2 "颜色" -tabLabel $child3 "工具" $tabs; showWindow createNanoblockUI; } //打开渲染目录----------------------------------------- proc openRenderFile(){ string $pro=`internalVar -userWorkspaceDir`; $pro+="default/images/"; system("load " + $pro); } //打组镜像------------------------------------------------------------------------------------------------------ proc onMirr(){ Group; duplicate -rr; string $sel[]=`ls -sl`; setAttr ($sel[0]+".scaleX") -1; } //导入颗粒------------------------------------------------------------------------------------------------------ proc onImport(string $_name){ string $pathFile=`text -q -l path`; print("导入文件:"+($pathFile+"mc/"+$_name+".mb")); file -import -type "mayaBinary" -gr -ra true -options "v=0" -pr -loadReferenceDepth "all" ($pathFile+"mc/"+$_name+".mb"); } //给颗粒上颜色------------------------------------------------------------------------------- proc onColor(string $_name,int $_num){ string $sel[]=`ls -sl`; for ($ppName in $sel){ if(`attributeQuery -node $ppName -ex "Color"`){ setAttr ($ppName+".Color") $_num; }else{ addAttr -ln "Color" -at long $ppName; //setAttr -k on ($ppName+".Color"); setAttr -e -channelBox true ($ppName+".Color"); setAttr ($ppName+".Color") $_num; } //defaultNavigation -source ("Color_"+$_name) -destination ($ppName+"Shape.instObjGroups[0]") -connectToExisting; hyperShade -assign ("Color_"+$_name); } //hyperShade -assign ("Color_"+$_name); //print("Color_"+$_name); } //获取场景中所有颗粒的类型 并计算颗粒的数量----------------------------------------------------------------- proc onKeli(){ global string $allSelectA[]; select -all; select -hi; string $selAll[]=`ls -sl`; string $obj; select -cl; //--创建类型 和颜色 的数值 //string $mcType[]; string $mc_Type_Color[]; int $mcTypeNum=0; float $mcWeight; float $mcPrice; for($obj in $selAll){ if(`nodeType $obj`=="transform"){ if(`attributeQuery -node $obj -ex "Type"`){ ////print("mcTpyeNum:"+$mcTpyeNum); string $getType=`getAttr -as ($obj+".Type")`; string $getColor=`getAttr -as ($obj+".Color")`; $mc_Type_Color[$mcTypeNum]=$getType+"_"+$getColor; $mcTypeNum++; $mcWeight+=`getAttr -as ($obj+".Weight")`; } if(`attributeQuery -node $obj -ex "Price"`){ $mcPrice+=`getAttr -as ($obj+".Price")`; } } } ArrangeB($mc_Type_Color); ////print(size($mc_Type_Color)); //print("--------产品总重量约:"+$mcWeight+"克"+"\n"); //获取场景中类型与颜色的数组 --------------$mcTypeA-----$mcColorA string $mcType_rd[]=stringArrayRemoveDuplicates($mc_Type_Color); int $mcType_count[]; ////print($mcType_rd); for($i=0;$i<size($mcType_rd);$i++){ int $count = stringArrayCount($mcType_rd[$i], $mc_Type_Color); $mcType_count[$i]=$count; //这里可以算出场景中有什么类型的颗粒 每个类型的颗粒有多少个 ////print($mcType_rd[$i]+":"+$mcType_count[$i]); ////print("\n"); } $allSelectA=$mcType_rd; /* 创建颗粒表窗口 */ string $pathFile=`text -q -l path`; if (`window -q -ex countUI`)deleteUI countUI; window -t " " -w 800 -h 500 countUI; columnLayout -bgc 1 1 1 ; text -l ("产品重量约:"+$mcWeight+"克"+" 颗粒总数:"+size($mc_Type_Color)+" 成本大约为:"+$mcPrice+"元") allCount; //这里可以更改下拉菜单的尺寸------------------------------------------------------------------------------ scrollLayout -w 1600 -h 1000; gridLayout -numberOfColumns 10 -cellWidthHeight 150 170; for($a=0;$a<size($mcType_rd);$a++){ columnLayout -bgc 1 1 1 ; iconTextButton -style "iconOnly" -image1 ($pathFile+"images/"+$mcType_rd[$a]+".png") -l $mcType_rd[$a] -c ("onSelect "+$a); rowLayout -bgc 1 1 1 -numberOfColumns 3; iconTextButton -style "iconOnly" -image1 ($pathFile+"images/XXX.png") -l ($mcType_rd[$a]+"x"); iconTextButton -style "iconOnly" -image1 ($pathFile+"images/number/"+$mcType_count[$a]+".png") -l ($mcType_rd[$a]+"n"); setParent..; setParent..; } setParent..; showWindow countUI; } //快速选择工具 proc onQuickSelectUI(){ if (`window -q -ex selectUI`)deleteUI selectUI; window -t "快速选择" -w 200 -h 100 selectUI; rowColumnLayout -numberOfColumns 2; text -l "Type:"; textField qsType; text -l "Color:"; textField qsColor; button -l "快速清除" -c "onQuickClean"; button -l "快速选择" -c "onQuickSelect"; showWindow selectUI; } proc onQuickSelect(){ string $qsType=`textField -q -tx qsType`; string $qsColor=`textField -q -tx qsColor`; if($qsType!=""){ select -all; select -hi; string $selAll[]=`ls -sl`; string $obj; select -cl; for($obj in $selAll){ if(`nodeType $obj`=="transform"){ if(`attributeQuery -node $obj -ex "Type"`){ string $getType=`getAttr -as ($obj+".Type")`; if($getType==$qsType){ select -add $obj; } } } } } if($qsColor!=""){ select -all; select -hi; string $selAll[]=`ls -sl`; string $obj; select -cl; for($obj in $selAll){ if(`nodeType $obj`=="transform"){ if(`attributeQuery -node $obj -ex "Type"`){ string $getColor=`getAttr -as ($obj+".Color")`; if($getColor==$qsColor){ select -add $obj; } } } } } } proc onQuickClean(){ textField -e -tx "" qsType; textField -e -tx "" qsColor; } //选择------------------------------------------------------------------------ proc onSelect(int $type){ global string $allSelectA[]; //print($allSelectA[$type]); select -all; select -hi; string $selAll[]=`ls -sl`; string $obj; select -cl; for($obj in $selAll){ if(`nodeType $obj`=="transform"){ if(`attributeQuery -node $obj -ex "Type"`){ ////print("mcTpyeNum:"+$mcTpyeNum); string $getType=`getAttr -as ($obj+".Type")`; string $getColor=`getAttr -as ($obj+".Color")`; if(($getType+"_"+$getColor)==$allSelectA[$type]){ select -add $obj; } } } } } //快速打组工具 proc onGroup(){ Group ; string $sl[]=`ls -sl`; int $cTime=`currentTime -q`; setKeyframe $sl[0]; currentTime ($cTime-1); setKeyframe -v 500 -at translateZ $sl[0]; currentTime ($cTime+1); setKeyframe -v 500 -at translateZ $sl[0]; currentTime ($cTime); rename $sl[0] "line"; } //给线上颜色 proc onLineR(){ string $sel[]=`ls -sl`; for ($aa in $sel){ string $thisColor=`hyperShade -smn $aa`; setAttr ($thisColor+".color") -type double3 1 0 0 ; } } proc onLineB(){ string $sel[]=`ls -sl`; for ($aa in $sel){ string $thisColor=`hyperShade -smn $aa`; setAttr ($thisColor+".color") -type double3 0 0.5 1 ; } } proc onLineG(){ string $sel[]=`ls -sl`; for ($aa in $sel){ string $thisColor=`hyperShade -smn $aa`; setAttr ($thisColor+".color") -type double3 0 1 0 ; } } //重新排列颜色------------------------------------------------------------------- proc Arrange(string $array[]){ global string $arrayTypeAC[]; global int $allColor; string $arrIndex[]; for($t=0;$t<$allColor;$t++){ $arrIndex[$t]=$t; } //定义临时数组 string $arr_0[]; //定义临时数组索引 int $int_0=0; string $newArray[]; //执行前清空数组 clear $arr_0; clear $newArray; string $a; for($i=size($arrIndex)-1;$i>-1;$i--){ for($a in $array){ string $arraySTSA[]; $arraySTSA = stringToStringArray($a, "_"); string $name=$arraySTSA[1]; if($name==$arrIndex[$i]){ $arr_0[$int_0]=$a; $int_0 ++; } } $newArray=stringArrayCatenate($arr_0,$newArray); clear $arr_0; $int_0=0; } clear $array; $array=$newArray; } //重新排列类型------------------------------------------------------------------- proc ArrangeB(string $array[]){ global string $arrayTypeAC[]; global string $arrayColor[]; string $arrIndex[]=$arrayTypeAC; //定义临时数组 string $arr_0[]; //定义临时数组索引 int $int_0=0; string $newArray[]; //执行前清空数组 clear $arr_0; clear $newArray; string $a; for($i=size($arrIndex)-1;$i>-1;$i--){ for($a in $array){ string $arraySTSA[]; $arraySTSA = stringToStringArray($a, "_"); string $name=$arraySTSA[0]; ////print("$name:"+$name+"\n"); if($name==$arrIndex[$i]){ $arr_0[$int_0]=$a; $int_0 ++; } } $newArray=stringArrayCatenate($arr_0,$newArray); clear $arr_0; $int_0=0; } clear $array; $array=$newArray; Arrange($array); } //自动处理渲染所需要的模型 proc preRender(){ global string $allSelectA[]; select -all; select -hi; string $selAll[]=`ls -sl`; string $obj; select -cl; //--创建类型 和颜色 的数值 //string $mcType[]; string $mc_Type_Color[]; int $mcTypeNum=0; for($obj in $selAll){ if(`nodeType $obj`=="transform"){ if(`attributeQuery -node $obj -ex "Type"`){ ////print("mcTpyeNum:"+$mcTpyeNum); string $getColor=`getAttr -as ($obj+".Color")`; $mc_Type_Color[$mcTypeNum]=$getColor; $mcTypeNum++; } } } //print("--------产品总重量约:"+$mcWeight+"克"+"\n"); //获取场景中类型与颜色的数组 --------------$mcTypeA-----$mcColorA string $mcType_rd[]=stringArrayRemoveDuplicates($mc_Type_Color); int $mcType_count[]; print("_____"+size($mcType_rd)); //-------------- for($i in $mcType_rd) { select -all; select -hi; string $selAll[]=`ls -sl`; string $obj; select -cl; for($obj in $selAll){ if(`nodeType $obj`=="transform"){ if(`attributeQuery -node $obj -ex "Type"`){ string $getColor=`getAttr -as ($obj+".Color")`; if($getColor==$i){ select -add $obj; } } } } print("$i"+$i); string $selAllB[]=`ls -sl`; for($i in $selAllB){ polyBevel -com 0 -fraction 1.5 -offsetAsFraction 1 -autoFit 1 -segments 2 -worldSpace 1 -uvAssignment 1 -smoothingAngle 30 -fillNgons 1 -mergeVertices 1 -mergeVertexTolerance 0.0001 -miteringAngle 180 -angleTolerance 180 -ch 1 $i; } if(size($selAllB)>1){ CombinePolygons; string $ss[]=`ls -sl`; rename $ss[0] ("n_"+$i); DeleteHistory; }else{ parent -w; string $ss[]=`ls -sl`; rename $ss[0] ("n_"+$i); DeleteHistory; } } }
原文:http://www.cnblogs.com/sy88/p/4875793.html