// =========================================================================== // Copyright 2018 Autodesk, Inc. All rights reserved. // // Use of this software is subject to the terms of the Autodesk license // agreement provided at the time of installation or download, or which // otherwise accompanies this software in either electronic or hard copy form. // =========================================================================== // // Procedure Name: // deleteButtonCMDS // // Description; // The command used to delete a MASH node. Modern MASH nodes play nicely, legacy nodes (MASH 1.0/ 2.0) are generally pot luck. // global proc MASHdeleteNodeButton ( string $attr ) { string $nodeName[]; tokenize($attr, ".", $nodeName); button -label (getPluginResource("MASH", "kDeleteThisNode")) -c ("deleteButtonCMDS (\"" + $nodeName[0] + "\", 1, 1)") deleteNodeMASHButton; separator -w 100 -h 5 -hr 1 -st "none"; } global proc MASHdeleteNodeButtonEdit ( string $attr ) { string $nodeName[]; tokenize($attr, ".", $nodeName); button -e -c ("deleteButtonCMDS (\"" + $nodeName[0] + "\", 1, 1)") deleteNodeMASHButton; } global proc deleteButtonCMDS (string $nodeName, int $whichCMD, int $showDialog) { if ($whichCMD == 1) { string $parent[]; //special case, if it's a light node we'll need to bin it's parent (which we do at the end) if (`nodeType $nodeName` == "MASH_Flight") { $parent = `listRelatives -allParents $nodeName`; } // // Complex deletion is now handled via Python // if (`nodeType $nodeName` == "MASH_Dynamics" || `nodeType $nodeName` == "MASH_Explode" || `nodeType $nodeName` == "MASH_Trails") { python("import MASH.deleteMashNode as dmn; dmn.deleteMashNode('" + $nodeName + "')"); return; } // These nodes calls dmn.deleteMashNode from C++ as it supports deletion from the outliner. if (`nodeType $nodeName` == "MASH_Points" || `nodeType $nodeName` == "MASH_Flight") { delete $nodeName; } if (`nodeType $nodeName` == "MASH_Distribute") { string $conns[] = `listConnections ($nodeName+".waiterMessage")`; if (size($conns) > 0) { delete $conns[0]; } return; } // first check for the new style connections (in and out) string $inConns[] = `listConnections -d 0 -s 1 -p 1 ($nodeName+".inputPoints")`; string $outConns[]; if (`objExists ($nodeName+".outputPoints")`) { $outConns = `listConnections -d 1 -s 0 -p 1 ($nodeName+".outputPoints")`; } if (size($inConns) != 0 || size($outConns) != 0) { python("import MASH.deleteMashNode as dmn; dmn.deleteMashNode('" + $nodeName + "')"); } else if (`objExists ($nodeName +".translateInPP")` ){ // Nodes that use this method: // Curve // Delay // Distribute // Explode // Influence // Merge // Orient // Python // Replicator // Spring // Symmetry // Transform //disconnect the message attribute otherwise we'll take the waiter with us! string $message[] = `listConnections -d 1 -s 0 -c 0 -p 1 ($nodeName+".message")`; if (`objExists $message[0]`) { for ( $i = 0; $i < size($message); $i++) { disconnectAttr ($nodeName+".message") $message[$i]; } } //in string $inConnectionPosition[] = `listConnections -d 0 -s 1 -p 1 ($nodeName+".positionInPP")`; string $inConnectionRotation[] = `listConnections -d 0 -s 1 -p 1 ($nodeName+".rotationInPP")`; //out string $outConnectionPosition[] = `listConnections -d 1 -s 0 -p 1 ($nodeName+".positionOutPP")`; string $outConnectionRotation[] = `listConnections -d 1 -s 0 -p 1 ($nodeName+".rotationOutPP")`; //shake it all about for ($conn in $inConnectionPosition) { catchQuiet (`disconnectAttr $conn ($nodeName+".positionInPP")`); } for ($conn in $outConnectionPosition) { catchQuiet (`disconnectAttr ($nodeName+".positionOutPP") $conn`); catchQuiet (`connectAttr -force $inConnectionPosition[0] $conn`); } for ($conn in $inConnectionRotation) { catchQuiet (`disconnectAttr $conn ($nodeName+".rotationInPP")`); } for ($conn in $outConnectionRotation) { catchQuiet (`disconnectAttr ($nodeName+".rotationOutPP") $conn`); catchQuiet (`connectAttr -force $inConnectionRotation[0] $conn`); } //optional channels if (`objExists ($nodeName +".scaleInPP")`){ string $inConnectionScale[] = `listConnections -d 0 -s 1 -p 1 ($nodeName+".scaleInPP")`; string $outConnectionScale[] = `listConnections -d 1 -s 0 -p 1 ($nodeName+".scaleOutPP")`; for ($conn in $inConnectionScale) { catchQuiet (`disconnectAttr $conn ($nodeName+".scaleInPP")`); } for ($conn in $outConnectionScale) { catchQuiet (`disconnectAttr ($nodeName+".scaleOutPP") $conn`); catchQuiet (`connectAttr -force $inConnectionScale[0] $conn`); } } if (`objExists ($nodeName +".idInPP")`){ string $inConnectionID[] = `listConnections -d 0 -s 1 -p 1 ($nodeName+".idInPP")`; string $outConnectionID[] = `listConnections -d 1 -s 1 -p 1 ($nodeName+".idOutPP")`; for ($conn in $inConnectionID) { catchQuiet (`disconnectAttr $conn ($nodeName+".idInPP")`); } for ($conn in $outConnectionID) { catchQuiet (`disconnectAttr ($nodeName+".idOutPP") $conn`); catchQuiet (`connectAttr -force $inConnectionID[0] $conn`); } } if (`objExists ($nodeName +".visibilityInPP")`){ string $inConnectionVisibility[] = `listConnections -d 0 -s 1 -p 1 ($nodeName+".visibilityInPP")`; string $outConnectionVisibility[] = `listConnections -d 1-s 0 -p 1 ($nodeName+".visibilityOutPP")`; for ($conn in $inConnectionVisibility) { catchQuiet (`disconnectAttr $conn ($nodeName+".visibilityInPP")`); } for ($conn in $outConnectionVisibility) { catchQuiet (`connectAttr -force $inConnectionVisibility[0] $conn`); catchQuiet (`disconnectAttr ($nodeName+".visibilityOutPP") $conn`); } } //special case for Merge if (`objExists ($nodeName +".altTranslateInPP")`) { string $inConnectionPosition[] = `listConnections -d 0 -s 1 -p 1 ($nodeName+".altPositionInPP")`; string $inConnectionRotation[] = `listConnections -d 0 -s 1 -p 1 ($nodeName+".altRotationInPP")`; string $inConnectionScale[] = `listConnections -d 0 -s 1 -p 1 ($nodeName+".altScaleInPP")`; string $inConnectionID[] = `listConnections -d 0 -s 1 -p 1 ($nodeName+".altIdInPP")`; string $inConnectionVisibility[] = `listConnections -d 0 -s 1 -p 1 ($nodeName+".altVisibilityInPP")`; for ($conn in $inConnectionPosition) { catchQuiet (`disconnectAttr $conn ($nodeName+".altPositionInPP")`); } for ($conn in $inConnectionRotation) { catchQuiet (`disconnectAttr $conn($nodeName+".altRotationInPP")`); } for ($conn in $inConnectionScale) { catchQuiet (`disconnectAttr $conn ($nodeName+".altScaleInPP")`); } for ($conn in $inConnectionID) { catchQuiet (`disconnectAttr $conn ($nodeName+".altIdInPP")`); } for ($conn in $inConnectionVisibility) { catchQuiet (`disconnectAttr $conn ($nodeName+".altVisibilityInPP")`); } } delete $nodeName; } else { // Nodes that use the leagacy method: // Audio // Flight // ID // Mute // Noise // Offset // Random // Trig // Visibility //use the legacy crappy crap crap walk through the options method that may well delete you and all those around you. string $in[] = `listConnections -d 0 -s 1 -c 1 -p 1 ($nodeName+".inputArray")`; string $out[]; string $message[] = `listConnections -d 1 -s 0 -c 0 -p 1 ($nodeName+".message")`; if (`objExists $message[0]`) { for ( $i = 0; $i < size($message); $i++) { disconnectAttr ($nodeName+".message") $message[$i]; } } if (`objExists ($nodeName+".outputArray")`) { $out = `listConnections -d 1 -s 0 -c 1 -p 1 ($nodeName+".outputArray")`; } if (`objExists ($nodeName+".outScale")`) { string $scaleConn[] = `listConnections -d 1 -s 0 -c 0 -p 1 ($nodeName+".outScale")`; for ( $i = 0; $i < size($scaleConn); $i++) { disconnectAttr ($nodeName+".outScale") $scaleConn[$i]; } } if (`objExists ($nodeName+".outRotation")`) { string $rotationConn[] = `listConnections -d 1 -s 0 -c 0 -p 1 ($nodeName+".outRotation")`; for ( $i = 0; $i < size($rotationConn); $i++) { disconnectAttr ($nodeName+".outRotation") $rotationConn[$i]; } } if (`objExists ($nodeName+".outRotationPP")`) { string $rotationConn[] = `listConnections -d 1 -s 0 -c 0 -p 1 ($nodeName+".outRotationPP")`; for ( $i = 0; $i < size($rotationConn); $i++) { disconnectAttr ($nodeName+".outRotationPP") $rotationConn[$i]; } } if (`objExists ($nodeName+".outVisibilityPP")`) { string $outConnectionVisibility[] = `listConnections -d 1-s 0 -p 1 ($nodeName+".outVisibilityPP")`; catchQuiet (`disconnectAttr ($nodeName+".outVisibilityPP") $outConnectionVisibility[0]`); } if ((size($in)) > 0) { connectAttr -force $in[1] $out[1]; } else if (`objExists ($nodeName+".outputArray")`) { $waiter = `listConnections -d 1 -s 0 -c 0 -p 1 ($nodeName+".outputArray")`; int $size = size($waiter); if ($size > 0) { disconnectAttr ($nodeName+".outputArray") $waiter[$size-1]; } } delete $nodeName; } if (size($parent) > 0) { delete $parent[0]; } } }