// =========================================================================== // 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: // MASHnewNodeCallback // // Description; // Called every time a node is created, certain MASH nodes will get extra connections, this makes creating MASH networks in the Node Editor more automatic. // global proc MASHnewNodeCallback(string $nodeName) { //As the 'Add node' callback is triggered when a file is opened, we need to check for that and do nothing in that instance. int $fileIO = `python("from maya import OpenMaya as om; om.MFileIO.isReadingFile()")`; if (!$fileIO) { string $type; if (!catchQuiet ($type = `nodeType $nodeName`) ) { if (size(`match "MASH_*" $type`) > 0) { // refresh any open MASH Outliner evalDeferred("python(\"import MASH.editor; MASH.editor.updateMASHEditor()\") ") -lp; if ($type == "MASH_Color") { // In Maya 2016r2 this node defaulted to off as it was added to all MASH Scenes using Repro // In Maya 2017 this node isn't automatically added, and therefore should default to on. setAttr ($nodeName+".enable") 1; } else if ($type == "MASH_Time") { connectAttr time1.outTime ($nodeName+".time"); // In Maya 2016r2 this node defaulted to off as it was added to all MASH Scenes using Repro // In Maya 2017 this node isn't automatically added, and therefore should default to on. setAttr ($nodeName+".enable") 1; } else if ($type == "MASH_Python") { connectAttr time1.outTime ($nodeName+".time"); } else if ($type == "MASH_Noise") { connectAttr time1.outTime ($nodeName+".time"); } else if ($type == "MASH_Trig") { connectAttr time1.outTime ($nodeName+".time"); } else if ($type == "MASH_Spring") { connectAttr time1.outTime ($nodeName+".time"); } else if ($type == "MASH_Audio") { connectAttr time1.outTime ($nodeName+".time"); // In Maya 2016r2 these settings defaulted to off // In Maya 2017 they should default to on. setAttr ($nodeName+".enableX") 1; setAttr ($nodeName+".enableZ") 1; } else if ($type == "MASH_Curve") { connectAttr time1.outTime ($nodeName+".time"); } else if ($type == "MASH_Delay") { connectAttr time1.outTime ($nodeName+".time"); } else if ($type == "MASH_Id") { connectAttr time1.outTime ($nodeName+".time"); } else if ($type == "MASH_Offset") { connectAttr time1.outTime ($nodeName+".time"); } else if ($type == "MASH_Strength") { connectAttr time1.outTime ($nodeName+".time"); } else if ($type == "MASH_Signal") { connectAttr time1.outTime ($nodeName+".time"); } else if ($type == "MASH_Mute") { connectAttr time1.outTime ($nodeName+".time"); setAttr ($nodeName+".Envelope") 0; setAttr ($nodeName+".randEnvelope") 0; setAttr ($nodeName+".StepEnvelope") 0; setAttr ($nodeName+".StepEnvelope") 0; setAttr ($nodeName+".mColour") -type double3 0 0 0; setAttr ($nodeName+".beatRamp[0].beatRamp_Position") 0; setAttr ($nodeName+".beatRamp[0].beatRamp_FloatValue") 0; } else if ($type == "MASH_Trails") { connectAttr time1.outTime ($nodeName+".time"); string $trailsTransform = `createNode transform -n ($nodeName+"_Mesh")`; string $trailsMesh = `createNode mesh -n ($nodeName+"_MeshShape") -p $trailsTransform`; connectAttr -f ($nodeName+".outputMesh") ($trailsMesh+".inMesh"); sets -forceElement initialShadingGroup $trailsTransform; } else if ($type == "MASH_Orient") { connectAttr time1.outTime ($nodeName+".time"); } else if ($type == "MASH_BulletSolver") { connectAttr time1.outTime ($nodeName+".time"); } else if ($type == "MASH_Transform") { setAttr ($nodeName+".enablePointScale") 1; } else if ($type == "MASH_Dynamics") { connectAttr time1.outTime ($nodeName+".time"); } else if ($type == "MASH_Replicator") { connectAttr time1.outTime ($nodeName+".time"); setAttr ($nodeName+".positionRamp[1].positionRamp_Position") 1; setAttr ($nodeName+".positionRamp[1].positionRamp_FloatValue") 1; setAttr ($nodeName+".scaleRamp[1].scaleRamp_Position") 1; setAttr ($nodeName+".scaleRamp[1].scaleRamp_FloatValue") 1; setAttr ($nodeName+".rotationRamp[1].rotationRamp_Position") 1; setAttr ($nodeName+".rotationRamp[1].rotationRamp_FloatValue") 1; } else if ($type == "MASH_World") { setAttr ($nodeName+".avoidanceRamp[0].avoidanceRamp_Position") 0; setAttr ($nodeName+".avoidanceRamp[0].avoidanceRamp_FloatValue") 1; setAttr ($nodeName+".avoidanceRamp[1].avoidanceRamp_Position") 1; setAttr ($nodeName+".avoidanceRamp[1].avoidanceRamp_FloatValue") 0; } else if ($type == "MASH_Falloff") { connectAttr time1.outTime ($nodeName+".time"); string $transform; string $parents[] = `listRelatives -fullPath -parent $nodeName`; $transform = $parents[0]; connectAttr -force ($transform+".worldMatrix[0]") ($nodeName+".inMatrix"); } else if ($type == "MASH_Symmetry") { $plane = `polyPlane -ch on -o on -ax 0 1 0 -w 10 -h 10 -sw 1 -sh 1 -cuv 2 -name ("mirrorPlane#")` ; connectAttr -f ($nodeName +".reflectionVector0") ($plane[1] +".axisZ") ; connectAttr -f ($nodeName +".reflectionVector1") ($plane[1] +".axisY") ; connectAttr -f ($nodeName +".reflectionVector2") ($plane[1] +".axisX") ; setAttr -l true { ($plane[0] +".r") }; string $shape[] = `listRelatives -shapes $plane[0]`; setAttr ($shape[0]+".primaryVisibility") 0; setAttr ($shape[0]+".visibleInReflections") 0; setAttr ($shape[0]+".visibleInRefractions") 0; setAttr ($shape[0]+".castsShadows") 0; setAttr ($shape[0]+".overrideLevelOfDetail") 1; setAttr ($shape[0]+".overrideColor") 9; setAttr ($shape[0]+".overrideEnabled") 1; string $parents[] = `listRelatives -fullPath -parent $shape[0]`; connectAttr -f ($parents[0] +".translate") ($nodeName +".offsetPosition") ; } else if ($type == "MASH_Flight") { connectAttr time1.outTime ($nodeName+".time"); //align ramp setAttr ($nodeName+".alignRamp[0].alignRamp_Position") 0; setAttr ($nodeName+".alignRamp[0].alignRamp_FloatValue") 0; setAttr ($nodeName+".alignRamp[1].alignRamp_Position") 0.5; setAttr ($nodeName+".alignRamp[1].alignRamp_FloatValue") 1; setAttr ($nodeName+".alignRamp[2].alignRamp_Position") 1; setAttr ($nodeName+".alignRamp[2].alignRamp_FloatValue") 0; setAttr ($nodeName+".alignRamp[0].alignRamp_Interp") 2; setAttr ($nodeName+".alignRamp[1].alignRamp_Interp") 2; //cohere ramp setAttr ($nodeName+".cohereRamp[0].cohereRamp_Position") 0; setAttr ($nodeName+".cohereRamp[0].cohereRamp_FloatValue") 0; setAttr ($nodeName+".cohereRamp[1].cohereRamp_Position") 1; setAttr ($nodeName+".cohereRamp[1].cohereRamp_FloatValue") 1; setAttr ($nodeName+".cohereRamp[0].cohereRamp_Interp") 2; //separate ramp setAttr ($nodeName+".separateRamp[0].separateRamp_Position") 0; setAttr ($nodeName+".separateRamp[0].separateRamp_FloatValue") 1; setAttr ($nodeName+".separateRamp[1].separateRamp_Position") 1; setAttr ($nodeName+".separateRamp[1].separateRamp_FloatValue") 0; setAttr ($nodeName+".separateRamp[0].separateRamp_Interp") 2; //obstacle ramp setAttr ($nodeName+".obstacleRamp[0].obstacleRamp_Position") 0; setAttr ($nodeName+".obstacleRamp[0].obstacleRamp_FloatValue") 1; setAttr ($nodeName+".obstacleRamp[1].obstacleRamp_Position") 1; setAttr ($nodeName+".obstacleRamp[1].obstacleRamp_FloatValue") 0; setAttr ($nodeName+".obstacleRamp[0].obstacleRamp_Interp") 2; //attractor ramp setAttr ($nodeName+".attractorRamp[0].attractorRamp_Position") 0; setAttr ($nodeName+".attractorRamp[0].attractorRamp_FloatValue") 1; setAttr ($nodeName+".attractorRamp[1].attractorRamp_Position") 1; setAttr ($nodeName+".attractorRamp[1].attractorRamp_FloatValue") 1; setAttr ($nodeName+".attractorRamp[0].attractorRamp_Interp") 2; //predator ramp setAttr ($nodeName+".predatorAndPreyRamp[0].predatorAndPreyRamp_Position") 0; setAttr ($nodeName+".predatorAndPreyRamp[0].predatorAndPreyRamp_FloatValue") 1; setAttr ($nodeName+".predatorAndPreyRamp[1].predatorAndPreyRamp_Position") 1; setAttr ($nodeName+".predatorAndPreyRamp[1].predatorAndPreyRamp_FloatValue") 0; setAttr ($nodeName+".predatorAndPreyRamp[0].predatorAndPreyRamp_Interp") 2; //gravity ramp setAttr ($nodeName+".gravityRamp[0].gravityRamp_Position") 0.25; setAttr ($nodeName+".gravityRamp[0].gravityRamp_FloatValue") 0; setAttr ($nodeName+".gravityRamp[1].gravityRamp_Position") 1; setAttr ($nodeName+".gravityRamp[1].gravityRamp_FloatValue") 1; setAttr ($nodeName+".gravityRamp[0].gravityRamp_Interp") 2; //arrival ramp setAttr ($nodeName+".arrivalRamp[0].arrivalRamp_Position") 0.0; setAttr ($nodeName+".arrivalRamp[0].arrivalRamp_FloatValue") 1.0; setAttr ($nodeName+".arrivalRamp[1].arrivalRamp_Position") 1.0; setAttr ($nodeName+".arrivalRamp[1].arrivalRamp_FloatValue") 1.0; setAttr ($nodeName+".arrivalRamp[0].arrivalRamp_Interp") 2; int $flightErrors = 0; float $pbs = `playbackOptions -q -ps`; if ($pbs > 0) { MASHinViewMessage("Flight: Playback speed should be set to Play Every Frame.", "Warning"); $flightErrors ++; } float $min = `playbackOptions -q -min`; if (ceil($min) != $min) { MASHinViewMessage("Flight: Playback must start on a whole frame number (0, 1 etc.).", "Error"); $flightErrors++; } if ($flightErrors > 1) { MASHinViewMessage("Flight: Bad playback settings, please check the Script Editor for details.", "Warning"); } } } } } }