Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- proc string getTextureFromMaterial( string $material ){
- string $texture = "";
- if($material == ""){
- return "";
- }
- string $connections[] = `listConnections -c true $material`;
- int $mc = 0;
- for($con in $connections){
- if($mc == 1){
- $texture = $con;
- break;
- }
- if($con == ($material + ".transparency")){
- $mc = 1;
- }
- }
- return $texture;
- }
- proc string getSGFromFace(string $currentFace, string $obj){
- string $facetSG = "";
- // Get array of all Shading Groups
- string $shadingGroups[] = `ls -type shadingEngine`;
- for ( $shadingGroup in $shadingGroups ){
- // If this facet is a member of the shading set for this
- // Shading Group, tag this as the facet's shader
- if ( `sets -isMember $shadingGroup $currentFace` ){
- $facetSG = $shadingGroup;
- break;
- }
- }
- if($facetSG == ""){
- string $objSGs[] = getSGsFromObject($obj);
- return $objSGs[0];
- }
- return $facetSG;
- }
- proc string[] getSGsFromObject( string $currentObject ){
- string $shadingEngines[];
- // get shape from object
- string $currentShape[] = `listRelatives -s -path $currentObject`;
- if ( `objExists $currentShape[0]` ){
- string $dest[] = `listConnections -destination true -source false -plugs false -type "shadingEngine" $currentShape[0]`;
- if ( size( $dest ) ){
- $shadingEngines = stringArrayRemoveDuplicates($dest);
- }
- }
- return $shadingEngines;
- }
- proc string getMaterialFromSG( string $SG ) {
- string $material = "";
- if ( "shadingEngine" == `nodeType $SG` && `connectionInfo -id ( $SG + ".surfaceShader" )` ) {
- string $buffer[];
- $material = `connectionInfo -sourceFromDestination ( $SG + ".surfaceShader" )`;
- tokenize $material "." $buffer;
- $material = $buffer[0];
- }
- return $material;
- }
- proc string getMaterialFromFace(string $face, string $obj){
- string $sg = getSGFromFace($face, $obj);
- return getMaterialFromSG($sg);
- }
- proc string getTextureFromFace(string $face, string $obj){
- string $mat = getMaterialFromFace($face, $obj);
- return getTextureFromMaterial($mat);
- }
- proc float getAlpha(string $face, string $obj, float $u, float $v){
- string $text = getTextureFromFace($face, $obj);
- if($text == 0){
- return 0;
- }
- float $a[] = `colorAtPoint -u $u -v $v $text`;
- return $a[0];
- }
- proc run(){
- global string $ThicknessFieldName;
- global string $TextureWidthFieldName;
- global string $gMainProgressBar;
- progressBar -edit
- -beginProgress
- -isInterruptable false
- -status "Removing trasparent faces ..."
- -maxValue 100
- $gMainProgressBar;
- float $thickness = `floatField -q -value $ThicknessFieldName`;
- int $width = `intField -q -value $TextureWidthFieldName`;
- int $divisions = `sqrt $width`;
- string $obj[]= `ls -sl`;
- if(size($obj) != 1){
- print "You have to select only 1 object!";
- return;
- }
- DeleteHistory;
- polySubdivideFacet -dv $divisions -m 0 -ch 0 $obj[0];
- ConvertSelectionToUVs;
- polyMapCut -ch 0 `ls -sl -flatten`;
- select -r $obj;
- ConvertSelectionToFaces;
- string $obj2[]= `ls -sl -flatten`;
- string $delete[] = {};
- int $deleteSize = 0;
- float $loopSize = (1.0 / ((float) size($obj2))) * 100.0;
- int $oldProgress = 0;
- for($i1 = 0; $i1 < size($obj2); $i1++){
- select -r $obj2[$i1];
- ConvertSelectionToUVs;
- float $loca[] = {0,0};
- string $selection[] = `ls -sl -flatten`;
- int $numUVs[] = `polyEvaluate -uv`;
- for($i = 0; $i < size($selection); $i++){
- float $loc[] = `polyEditUV -q -u -v ($selection[$i])`;
- $loca[0] = $loca[0] + $loc[0];
- $loca[1] = $loca[1] + $loc[1];
- }
- $loca[0] = $loca[0] * 0.25;
- $loca[1] = $loca[1] * 0.25;
- polyEditUV -pu $loca[0] -pv $loca[1] -su 0.5 -sv 0.5 ;
- DeleteHistory;
- float $a = getAlpha($obj2[$i1], $obj[0], $loca[0], $loca[1]);
- if($a == 0){
- $delete[$deleteSize] = $obj2[$i1];
- $deleteSize++;
- }
- int $progress = (int) (((float)$i1) * $loopSize);
- if($progress - $oldProgress >= 2){
- progressBar -edit
- -pr $progress $gMainProgressBar;
- $oldProgress = $progress;
- }
- }
- delete $delete;
- progressBar -edit
- -status "Extruding faces ..."
- $gMainProgressBar;
- select -r $obj;
- string $extrudeObj[] = `duplicate -rr`;
- select -r $extrudeObj[0];
- ConvertSelectionToFaces;
- string $extrude[] = `ls -sl -flatten`;
- string $extrudedFaces[] = {};
- $loopSize = (1.0 / ((float) size($extrude))) * 100.0;
- $oldProgress = 0;
- for($i = 0; $i < size($extrude); $i++){
- string $extruding = $extrude[$i];
- int $cont = 0;
- for($i1 = 0; $i1 < size($extrudedFaces); $i1++){
- if($extruding == $extrudedFaces[$i1]){
- $cont = 1;
- break;
- }
- }
- if($cont == 1){
- continue;
- }
- select -r $extruding;
- for ($i = 0; $i < $width * 4; $i++)
- GrowPolygonSelectionRegion;
- string $extrude[] = `ls -sl -flatten`;
- for($i2 = 0; $i2 < size($extrude); $i2++){
- $extrudedFaces[size($extrudedFaces)] = $extrude[$i2];
- }
- polyExtrudeFacet -ch 0 -kft true -thickness $thickness $extrude;
- int $progress = (int) (((float)size($extrudedFaces)) * $loopSize);
- if($progress - $oldProgress >= 2){
- progressBar -edit
- -pr $progress $gMainProgressBar;
- $oldProgress = $progress;
- }
- }
- //polyExtrudeFacet -kft true -thickness $thickness $extrude;
- string $finalObj[] = `polyUnite -ch 0 -mergeUVSets 1 $obj $extrudeObj`;
- select -r $finalObj;
- DeleteHistory;
- progressBar -edit
- -endProgress
- $gMainProgressBar;
- print ("Done");
- }
- proc createWindow(){
- global string $ThicknessFieldName;
- global string $TextureWidthFieldName;
- if ( `window -exists MCExtruderWindow` ) {
- deleteUI ONRWindow;
- }
- window -t "MC Extruder" MCExtruderWindow;
- columnLayout MCExtruderWindow;
- text -label "Created by: Dutch Animations\n\nMC Extruder!\nYour very own Extruder!" -align "center";
- text -label "Texture Width:";
- $TextureWidthFieldName = `intField -value 16`;
- text -label "Extrude Thickness:";
- $ThicknessFieldName = `floatField -value 0.125`;
- button -l "Run" -c "run()";
- showWindow MCExtruderWindow;
- }
- createWindow();
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement