Advertisement
Guest User

MAYA MEL Auto Extruder

a guest
Jun 25th, 2016
250
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 6.13 KB | None | 0 0
  1. proc string getTextureFromMaterial( string $material ){
  2. string $texture = "";
  3. if($material == ""){
  4. return "";
  5. }
  6. string $connections[] = `listConnections -c true $material`;
  7. int $mc = 0;
  8. for($con in $connections){
  9. if($mc == 1){
  10. $texture = $con;
  11. break;
  12. }
  13. if($con == ($material + ".transparency")){
  14. $mc = 1;
  15. }
  16. }
  17. return $texture;
  18. }
  19.  
  20. proc string getSGFromFace(string $currentFace, string $obj){
  21. string $facetSG = "";
  22.  
  23. // Get array of all Shading Groups
  24. string $shadingGroups[] = `ls -type shadingEngine`;
  25. for ( $shadingGroup in $shadingGroups ){
  26. // If this facet is a member of the shading set for this
  27. // Shading Group, tag this as the facet's shader
  28. if ( `sets -isMember $shadingGroup $currentFace` ){
  29. $facetSG = $shadingGroup;
  30. break;
  31. }
  32. }
  33. if($facetSG == ""){
  34. string $objSGs[] = getSGsFromObject($obj);
  35. return $objSGs[0];
  36. }
  37. return $facetSG;
  38. }
  39.  
  40. proc string[] getSGsFromObject( string $currentObject ){
  41. string $shadingEngines[];
  42.  
  43. // get shape from object
  44. string $currentShape[] = `listRelatives -s -path $currentObject`;
  45.  
  46. if ( `objExists $currentShape[0]` ){
  47. string $dest[] = `listConnections -destination true -source false -plugs false -type "shadingEngine" $currentShape[0]`;
  48. if ( size( $dest ) ){
  49. $shadingEngines = stringArrayRemoveDuplicates($dest);
  50. }
  51. }
  52.  
  53. return $shadingEngines;
  54. }
  55.  
  56. proc string getMaterialFromSG( string $SG ) {
  57. string $material = "";
  58. if ( "shadingEngine" == `nodeType $SG` && `connectionInfo -id ( $SG + ".surfaceShader" )` ) {
  59. string $buffer[];
  60. $material = `connectionInfo -sourceFromDestination ( $SG + ".surfaceShader" )`;
  61. tokenize $material "." $buffer;
  62. $material = $buffer[0];
  63. }
  64. return $material;
  65. }
  66.  
  67. proc string getMaterialFromFace(string $face, string $obj){
  68. string $sg = getSGFromFace($face, $obj);
  69. return getMaterialFromSG($sg);
  70. }
  71.  
  72. proc string getTextureFromFace(string $face, string $obj){
  73. string $mat = getMaterialFromFace($face, $obj);
  74. return getTextureFromMaterial($mat);
  75. }
  76.  
  77. proc float getAlpha(string $face, string $obj, float $u, float $v){
  78. string $text = getTextureFromFace($face, $obj);
  79. if($text == 0){
  80. return 0;
  81. }
  82. float $a[] = `colorAtPoint -u $u -v $v $text`;
  83. return $a[0];
  84. }
  85.  
  86. proc run(){
  87. global string $ThicknessFieldName;
  88. global string $TextureWidthFieldName;
  89. global string $gMainProgressBar;
  90. progressBar -edit
  91. -beginProgress
  92. -isInterruptable false
  93. -status "Removing trasparent faces ..."
  94. -maxValue 100
  95. $gMainProgressBar;
  96. float $thickness = `floatField -q -value $ThicknessFieldName`;
  97. int $width = `intField -q -value $TextureWidthFieldName`;
  98. int $divisions = `sqrt $width`;
  99. string $obj[]= `ls -sl`;
  100. if(size($obj) != 1){
  101. print "You have to select only 1 object!";
  102. return;
  103. }
  104. DeleteHistory;
  105. polySubdivideFacet -dv $divisions -m 0 -ch 0 $obj[0];
  106. ConvertSelectionToUVs;
  107. polyMapCut -ch 0 `ls -sl -flatten`;
  108. select -r $obj;
  109. ConvertSelectionToFaces;
  110. string $obj2[]= `ls -sl -flatten`;
  111. string $delete[] = {};
  112. int $deleteSize = 0;
  113. float $loopSize = (1.0 / ((float) size($obj2))) * 100.0;
  114. int $oldProgress = 0;
  115. for($i1 = 0; $i1 < size($obj2); $i1++){
  116. select -r $obj2[$i1];
  117. ConvertSelectionToUVs;
  118. float $loca[] = {0,0};
  119. string $selection[] = `ls -sl -flatten`;
  120. int $numUVs[] = `polyEvaluate -uv`;
  121. for($i = 0; $i < size($selection); $i++){
  122. float $loc[] = `polyEditUV -q -u -v ($selection[$i])`;
  123. $loca[0] = $loca[0] + $loc[0];
  124. $loca[1] = $loca[1] + $loc[1];
  125. }
  126. $loca[0] = $loca[0] * 0.25;
  127. $loca[1] = $loca[1] * 0.25;
  128. polyEditUV -pu $loca[0] -pv $loca[1] -su 0.5 -sv 0.5 ;
  129. DeleteHistory;
  130. float $a = getAlpha($obj2[$i1], $obj[0], $loca[0], $loca[1]);
  131. if($a == 0){
  132. $delete[$deleteSize] = $obj2[$i1];
  133. $deleteSize++;
  134. }
  135. int $progress = (int) (((float)$i1) * $loopSize);
  136. if($progress - $oldProgress >= 2){
  137. progressBar -edit
  138. -pr $progress $gMainProgressBar;
  139. $oldProgress = $progress;
  140. }
  141. }
  142. delete $delete;
  143.  
  144. progressBar -edit
  145. -status "Extruding faces ..."
  146. $gMainProgressBar;
  147.  
  148. select -r $obj;
  149. string $extrudeObj[] = `duplicate -rr`;
  150. select -r $extrudeObj[0];
  151. ConvertSelectionToFaces;
  152. string $extrude[] = `ls -sl -flatten`;
  153. string $extrudedFaces[] = {};
  154.  
  155. $loopSize = (1.0 / ((float) size($extrude))) * 100.0;
  156. $oldProgress = 0;
  157.  
  158. for($i = 0; $i < size($extrude); $i++){
  159. string $extruding = $extrude[$i];
  160. int $cont = 0;
  161. for($i1 = 0; $i1 < size($extrudedFaces); $i1++){
  162. if($extruding == $extrudedFaces[$i1]){
  163. $cont = 1;
  164. break;
  165. }
  166. }
  167. if($cont == 1){
  168. continue;
  169. }
  170. select -r $extruding;
  171. for ($i = 0; $i < $width * 4; $i++)
  172. GrowPolygonSelectionRegion;
  173.  
  174. string $extrude[] = `ls -sl -flatten`;
  175. for($i2 = 0; $i2 < size($extrude); $i2++){
  176. $extrudedFaces[size($extrudedFaces)] = $extrude[$i2];
  177. }
  178. polyExtrudeFacet -ch 0 -kft true -thickness $thickness $extrude;
  179. int $progress = (int) (((float)size($extrudedFaces)) * $loopSize);
  180. if($progress - $oldProgress >= 2){
  181. progressBar -edit
  182. -pr $progress $gMainProgressBar;
  183. $oldProgress = $progress;
  184. }
  185. }
  186.  
  187. //polyExtrudeFacet -kft true -thickness $thickness $extrude;
  188.  
  189. string $finalObj[] = `polyUnite -ch 0 -mergeUVSets 1 $obj $extrudeObj`;
  190.  
  191. select -r $finalObj;
  192.  
  193. DeleteHistory;
  194.  
  195. progressBar -edit
  196. -endProgress
  197. $gMainProgressBar;
  198. print ("Done");
  199. }
  200.  
  201. proc createWindow(){
  202. global string $ThicknessFieldName;
  203. global string $TextureWidthFieldName;
  204. if ( `window -exists MCExtruderWindow` ) {
  205. deleteUI ONRWindow;
  206. }
  207.  
  208. window -t "MC Extruder" MCExtruderWindow;
  209. columnLayout MCExtruderWindow;
  210. text -label "Created by: Dutch Animations\n\nMC Extruder!\nYour very own Extruder!" -align "center";
  211. text -label "Texture Width:";
  212. $TextureWidthFieldName = `intField -value 16`;
  213. text -label "Extrude Thickness:";
  214. $ThicknessFieldName = `floatField -value 0.125`;
  215. button -l "Run" -c "run()";
  216. showWindow MCExtruderWindow;
  217. }
  218. createWindow();
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement