// =========================================================================== // 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: // AEnBaseTemplate // // Description Name; // Creates the attribute editor controls for the nBase Node // // Input Value: // nodeName // // Output Value: // None // proc int isActiveNode( string $nodeName ) // // Description: // Given $nodeName, determine if it's an active node. // { string $startStatePlugs[] = `connectionInfo -dfs ($nodeName + ".startState")`; if( size($startStatePlugs) == 1 ){ // Check if we're connected to an inputActiveStart plug from a nucleus // node. // string $node = `plugNode $startStatePlugs[0]`; if( `nodeType $node` == "nucleus" ){ string $plug = `plugAttr $startStatePlugs[0]`; if( `match "inputActiveStart" $plug` != "" ){ return( true ); } } } return( false ); } proc AEnBaseMapCommon( string $attrName, int $createControlGroup ) // // Description // Common method called by AEnBaseMapNew & AEnBaseMapReplace. // { // The following three tables must be of the same size, and contain: // $attrs - the names of the attributes with which this method can // be called // $labels - the corresponding label to use in the AE // NOTE: All the common attributes must be listed first. If any more are // added, they must be added to the beginning of the list, and the // $numCommon variable must be updated below. // int $numCommon = 3; // Number of attributes that affect both active (i.e., // cloth) and passive (i.e., collision) objects. string $attrs[] = { "thicknessMap", "bounceMap", "frictionMap", "massMap", "dampingMap", "averageDampingMap", "stretchMap", "bendMap", "rigidityMap", "deformabilityMap", "startAttractMap" }; string $labels[] = { (uiRes("m_AEnBaseTemplate.kThicknessMap")), (uiRes("m_AEnBaseTemplate.kBounceMap")), (uiRes("m_AEnBaseTemplate.kFrictionMap")), (uiRes("m_AEnBaseTemplate.kMassMap")), (uiRes("m_AEnBaseTemplate.kDampingMap")), (uiRes("m_AEnBaseTemplate.kAverageDampingMap")), (uiRes("m_AEnBaseTemplate.kStretchMap")), (uiRes("m_AEnBaseTemplate.kBendMap")), (uiRes("m_AEnBaseTemplate.kRigidityMap")), (uiRes("m_AEnBaseTemplate.kDeformabilityMap")), (uiRes("m_AEnBaseTemplate.kStartAttractMap")) }; // Get the index of the attribute for usage with the above tables // string $attr = `plugAttr $attrName`; int $index = size($attrs); while( $index-- > 0 ){ if( $attrs[$index] == $attr ){ break; } } if( $index < 0 ){ error((uiRes("m_AEnBaseTemplate.kUnsupportedAttr"))); } // Find out if this is an active node // string $nodeName = `plugNode $attrName`; int $isActiveNode = isActiveNode( $nodeName ); // A mappable attribute is enabled if the node is either active, or the // attribute is not strictly for active nodes. // if( $createControlGroup ){ // Create the control group // setUITemplate -pst attributeEditorTemplate; attrNavigationControlGrp -label $labels[$index] -at $attrName -enable ($isActiveNode || ($index < $numCommon)) $attr; setUITemplate -ppt; } else { // Edit the control group // attrNavigationControlGrp -edit -at $attrName -enable ($isActiveNode || ($index < $numCommon)) $attr; if( !$index ) { // Dim controls as need be. // // Stick in an evalDeferred to get around Linux bug #245061. // if( !$isActiveNode ){ eval("setAttr " + $nodeName + ".selfCollisionFlag 0"); } evalDeferred("editorTemplate -dimControl " + $nodeName + " \"pointMass\" " + (!$isActiveNode)); evalDeferred("editorTemplate -dimControl " + $nodeName + " \"damping\" " + (!$isActiveNode)); evalDeferred("editorTemplate -dimControl " + $nodeName + " \"averageDamping\" " + (!$isActiveNode)); evalDeferred("editorTemplate -dimControl " + $nodeName + " \"stretch\" " + (!$isActiveNode)); evalDeferred("editorTemplate -dimControl " + $nodeName + " \"bend\" " + (!$isActiveNode)); evalDeferred("editorTemplate -dimControl " + $nodeName + " \"rigidity\" " + (!$isActiveNode)); evalDeferred("editorTemplate -dimControl " + $nodeName + " \"deformability\" " + (!$isActiveNode)); evalDeferred("editorTemplate -dimControl " + $nodeName + " \"startAttract\" " + (!$isActiveNode)); evalDeferred("editorTemplate -dimControl " + $nodeName + " \"restLengthScale\" " + (!$isActiveNode)); evalDeferred("editorTemplate -dimControl " + $nodeName + " \"numStretchIter\" " + (!$isActiveNode)); evalDeferred("editorTemplate -dimControl " + $nodeName + " \"numBendIter\" " + (!$isActiveNode)); evalDeferred("editorTemplate -dimControl " + $nodeName + " \"numRigidityIterations\" " + (!$isActiveNode)); evalDeferred("editorTemplate -dimControl " + $nodeName + " \"selfCollisionFlag\" " + (!$isActiveNode)); evalDeferred("editorTemplate -dimControl " + $nodeName + " \"numSelfCollisionIterations\" " + (!$isActiveNode)); evalDeferred("editorTemplate -dimControl " + $nodeName + " \"numSelfCollisionSubcycles\" " + (!$isActiveNode)); evalDeferred("editorTemplate -dimControl " + $nodeName + " \"numDampingIterations\" " + (!$isActiveNode)); } } } global proc AEnBaseMapNew (string $attrName ) // // Description: // This method is called for mappable attributes the first time we // need to create UI for an nBase. // { AEnBaseMapCommon( $attrName, true ); } global proc AEnBaseMapReplace (string $attrName ) // // Description: // This method is called for mappable attributes when a new node of the // same type is now being edited. // { AEnBaseMapCommon( $attrName, false ); } // //========================================================= // Procedure Name: AEnBaseTemplate // global proc AEnBaseTemplate ( string $nodeName ) { editorTemplate -beginScrollLayout; editorTemplate -beginLayout (uiRes("m_AEnBaseTemplate.kSurfaceProperties")) -collapse 0; editorTemplate -beginNoOptimize; editorTemplate -suppress "numSubdivisions"; editorTemplate -label (uiRes("m_AEnBaseTemplate.kThickness")) -addControl "thickness"; editorTemplate -label (uiRes("m_AEnBaseTemplate.kBounce")) -addControl "bounce"; editorTemplate -label (uiRes("m_AEnBaseTemplate.kFriction")) -addControl "friction"; editorTemplate -label (uiRes("m_AEnBaseTemplate.kMass")) -addControl "pointMass"; editorTemplate -beginLayout (uiRes("m_AEnBaseTemplate.kSurfacePropertiesMaps")) -collapse 1; editorTemplate -callCustom "AEnBaseMapNew" "AEnBaseMapReplace" "thicknessMap"; editorTemplate -callCustom "AEnBaseMapNew" "AEnBaseMapReplace" "bounceMap"; editorTemplate -callCustom "AEnBaseMapNew" "AEnBaseMapReplace" "frictionMap"; editorTemplate -callCustom "AEnBaseMapNew" "AEnBaseMapReplace" "massMap"; editorTemplate -endLayout; editorTemplate -endLayout; editorTemplate -beginLayout (uiRes("m_AEnBaseTemplate.kDynamicProperties")) -collapse 0; editorTemplate -label (uiRes("m_AEnBaseTemplate.kAirPushDistance")) -addControl "airPushDistance"; editorTemplate -label (uiRes("m_AEnBaseTemplate.kAirPushVorticity")) -addControl "airPushVorticity"; editorTemplate -label (uiRes("m_AEnBaseTemplate.kShadowDropoff")) -addControl "windShadowDistance"; editorTemplate -label (uiRes("m_AEnBaseTemplate.kShadowDiffusion")) -addControl "windShadowDiffusion"; editorTemplate -label (uiRes("m_AEnBaseTemplate.kDamping")) -addControl "damping"; editorTemplate -label (uiRes("m_AEnBaseTemplate.kAverageDamping")) -addControl "averageDamping"; editorTemplate -label (uiRes("m_AEnBaseTemplate.kStretch")) -addControl "stretch"; editorTemplate -label (uiRes("m_AEnBaseTemplate.kBendStiffness")) -addControl "bend"; editorTemplate -label (uiRes("m_AEnBaseTemplate.kRigidity")) -addControl "rigidity"; editorTemplate -label (uiRes("m_AEnBaseTemplate.kDeformability")) -addControl "deformability"; editorTemplate -label (uiRes("m_AEnBaseTemplate.kStartAttract")) -addControl "startAttract"; editorTemplate -label (uiRes("m_AEnBaseTemplate.kRestLengthScale")) -addControl "restLengthScale"; editorTemplate -beginLayout (uiRes("m_AEnBaseTemplate.kDynamicPropertiesMaps")) -collapse 1; editorTemplate -callCustom "AEnBaseMapNew" "AEnBaseMapReplace" "dampingMap"; editorTemplate -callCustom "AEnBaseMapNew" "AEnBaseMapReplace" "averageDampingMap"; editorTemplate -callCustom "AEnBaseMapNew" "AEnBaseMapReplace" "stretchMap"; editorTemplate -callCustom "AEnBaseMapNew" "AEnBaseMapReplace" "bendMap"; editorTemplate -callCustom "AEnBaseMapNew" "AEnBaseMapReplace" "rigidityMap"; editorTemplate -callCustom "AEnBaseMapNew" "AEnBaseMapReplace" "deformabilityMap"; editorTemplate -callCustom "AEnBaseMapNew" "AEnBaseMapReplace" "startAttractMap"; editorTemplate -endLayout; editorTemplate -endLayout; editorTemplate -beginLayout (uiRes("m_AEnBaseTemplate.kQualitySettings")) -collapse 0; editorTemplate -label (uiRes("m_AEnBaseTemplate.kNumberofStretchIterations")) -addControl "numStretchIter"; editorTemplate -label (uiRes("m_AEnBaseTemplate.kNumberofBendIterations")) -addControl "numBendIter"; editorTemplate -label (uiRes("m_AEnBaseTemplate.kRigidityIterations")) -addControl "numRigidityIterations"; editorTemplate -label (uiRes("m_AEnBaseTemplate.kDampingIterations")) -addControl "numDampingIterations"; editorTemplate -label (uiRes("m_AEnBaseTemplate.kCollisionFlag")) -addControl "collisionFlag"; editorTemplate -label (uiRes("m_AEnBaseTemplate.kSelfCollisionFlag")) -addControl "selfCollisionFlag"; editorTemplate -label (uiRes("m_AEnBaseTemplate.kSelfCollisionIterations")) -addControl "numSelfCollisionIterations"; editorTemplate -label (uiRes("m_AEnBaseTemplate.kSelfCollisionSubcycles")) -addControl "numSelfCollisionSubcycles"; editorTemplate -label (uiRes("m_AEnBaseTemplate.kSphereTree")) -addControl "sphereTree"; editorTemplate -endNoOptimize; editorTemplate -endLayout; editorTemplate -beginLayout (uiRes("m_AEnBaseTemplate.kSolverOverrides")) -collapse 1; editorTemplate -beginNoOptimize; editorTemplate -label (uiRes("m_AEnBaseTemplate.kOverrideDynamics")) -addControl "solverOverride"; editorTemplate -label (uiRes("m_AEnBaseTemplate.kGravity")) -addControl "gravity"; editorTemplate -label (uiRes("m_AEnBaseTemplate.kGravityDirection")) -addControl "gravityDirection"; editorTemplate -label (uiRes("m_AEnBaseTemplate.kLift")) -addControl "lift"; editorTemplate -label (uiRes("m_AEnBaseTemplate.kDrag")) -addControl "drag"; editorTemplate -label (uiRes("m_AEnBaseTemplate.kDragOffset")) -addControl "dragOffset"; editorTemplate -label (uiRes("m_AEnBaseTemplate.kWindSpeed")) -addControl "windSpeed"; editorTemplate -label (uiRes("m_AEnBaseTemplate.kWindDirection")) -addControl "windDirection"; editorTemplate -s "collisionDrag"; editorTemplate -endNoOptimize; editorTemplate -endLayout; editorTemplate -endLayout; editorTemplate -suppress "active"; editorTemplate -suppress "collide"; editorTemplate -suppress "nextState"; editorTemplate -suppress "collisionMesh"; editorTemplate -suppress "inputMesh"; editorTemplate -suppress "outputMesh"; editorTemplate -suppress "playFromCache"; // Attributes to control time in the solver. editorTemplate -beginLayout (uiRes("m_AEnBaseTemplate.kTimeAttributes")) -collapse true; editorTemplate -addControl "startFrame"; editorTemplate -addControl "currentTime"; editorTemplate -endLayout; // particle attributes to suppress // Suppress this attribute until we implement it // later in the Volume Controls stage editorTemplate -suppress "normalizeVelocity"; // Suppress attributes so they don't appear under "Extras." // editorTemplate -suppress "cacheWidth"; editorTemplate -suppress "inheritColor"; editorTemplate -suppress "age"; editorTemplate -suppress "particleId"; editorTemplate -suppress "idQuery"; editorTemplate -suppress "attributeQuery"; editorTemplate -suppress "levelOfDetail"; editorTemplate -suppress "shapeNameMsg"; editorTemplate -suppress "event"; editorTemplate -suppress "eventCount"; editorTemplate -suppress "eventTest"; editorTemplate -suppress "centroid"; editorTemplate -suppress "opacityPP"; editorTemplate -suppress "lifespanPP"; editorTemplate -suppress "rgbPP"; editorTemplate -suppress "goalPP"; editorTemplate -suppress "ageNormalized"; editorTemplate -suppress "expressionsAfterDynamics"; editorTemplate -suppress "seed"; editorTemplate -suppress "useLifespanPP"; editorTemplate -suppress "collisionData"; editorTemplate -suppress "collisionResilience"; editorTemplate -suppress "collisionFriction"; editorTemplate -suppress "traceDepth"; editorTemplate -suppress "goalGeometry"; editorTemplate -suppress "goalActive"; editorTemplate -suppress "goalSmoothness"; editorTemplate -suppress "inputGeometry"; editorTemplate -suppress "inputGeometrySpace"; editorTemplate -suppress "enforceCountFromHistory"; editorTemplate -suppress "targetGeometrySpace"; editorTemplate -suppress "targetGeometryWorldMatrix"; editorTemplate -suppress "goalPP0"; editorTemplate -suppress "goalPPCache"; editorTemplate -suppress "opacityPP0"; editorTemplate -suppress "opacityPPCache"; editorTemplate -suppress "rgbPP0"; editorTemplate -suppress "rgbPPCache"; editorTemplate -suppress "lifespanPP0"; editorTemplate -suppress "lifespanPPCache"; editorTemplate -suppress "input"; editorTemplate -suppress "output"; editorTemplate -suppress "nextId"; editorTemplate -suppress "nextId0"; editorTemplate -suppress "currentSceneTime"; editorTemplate -suppress "lastSceneTime"; editorTemplate -suppress "inputForce"; editorTemplate -suppress "goalWeight"; editorTemplate -suppress "goalStatus"; editorTemplate -suppress "age0"; editorTemplate -suppress "particleId0"; editorTemplate -suppress "mass"; editorTemplate -suppress "eventSeed"; editorTemplate -suppress "eventRandState"; editorTemplate -suppress "eventRandStateX"; editorTemplate -suppress "eventRandStateY"; editorTemplate -suppress "eventRandStateZ"; editorTemplate -suppress "eventCountCache"; editorTemplate -suppress "eventName"; editorTemplate -suppress "eventValid"; editorTemplate -suppress "eventCount"; editorTemplate -suppress "eventEmit"; editorTemplate -suppress "eventSplit"; editorTemplate -suppress "eventDie"; editorTemplate -suppress "eventRandom"; editorTemplate -suppress "eventSpread"; editorTemplate -suppress "eventProc"; editorTemplate -suppress "traceDepthPP"; editorTemplate -suppress "currentTimeSave"; editorTemplate -suppress "useStartupCache"; editorTemplate -suppress "startupCachePath"; editorTemplate -suppress "startupCacheFrame"; // suppress any rendering attributes // editorTemplate -suppress "spriteNumPP"; editorTemplate -suppress "spriteScaleXPP"; editorTemplate -suppress "spriteScaleYPP"; editorTemplate -suppress "spriteTwistPP"; editorTemplate -suppress "radiusPP"; editorTemplate -suppress "incandescencePP"; // suppress the instancing attributes // editorTemplate -suppress "instanceData"; editorTemplate -suppress "instanceAttributeMapping"; editorTemplate -suppress "instancePointData"; // suppress the sprite attributes // editorTemplate -suppress "__ApplySprite__"; editorTemplate -suppress "startIndexPP"; editorTemplate -suppress "spriteNumRamp"; editorTemplate -suppress "spriteNumRampU"; editorTemplate -suppress "worldVelocityInObjectSpace"; // include/call base class/node attributes // actually these are now in the particle shape // AEdynObjectInclude $nodeName; // Suppress the dynamic attributes for the fireworks clip effect, // as the appropriate ones will be put in a special layout. // editorTemplate -suppress "_fireworksRocket"; editorTemplate -suppress "fireworksColors"; editorTemplate -suppress "rocketTrailColors"; editorTemplate -suppress "launchPositionManipMessage"; editorTemplate -suppress "burstPositionManipMessage"; editorTemplate -suppress "minSparksCount"; editorTemplate -suppress "maxSparksCount"; editorTemplate -suppress "sparksColorSpread"; editorTemplate -suppress "maxBurstSpeed"; editorTemplate -suppress "rocketGravity"; editorTemplate -suppress "launchPositionPP"; editorTemplate -suppress "burstPositionPP"; editorTemplate -suppress "launchFramePP"; editorTemplate -suppress "burstFramePP"; editorTemplate -suppress "initialVelocity"; editorTemplate -suppress "launched"; editorTemplate -suppress "hasBurst"; editorTemplate -suppress "colorPaletteProc"; editorTemplate -suppress "spin"; editorTemplate -suppress "showAllBurstPositions"; editorTemplate -suppress "showAllLaunchPositions"; editorTemplate -suppress "localGravX"; editorTemplate -suppress "localGravY"; editorTemplate -suppress "localGravZ"; editorTemplate -suppress "burstColorIndex"; editorTemplate -suppress "explodeChance"; editorTemplate -suppress "displayGeometry"; editorTemplate -suppress "spinSpeed"; editorTemplate -suppress "spinSpread"; editorTemplate -suppress "rocketsMessage"; editorTemplate -suppress "deformedPosition"; // more particle attrs to suppress - those that were not pre-suppressed for us editorTemplate -suppress "position"; editorTemplate -suppress "velocity"; editorTemplate -suppress "acceleration"; editorTemplate -suppress "dieOnEmissionVolumeExit"; editorTemplate -suppress "lifespan"; editorTemplate -suppress "lifespanMode"; editorTemplate -suppress "lifespanRandom"; editorTemplate -suppress "dynamicsWeight"; editorTemplate -suppress "forcesInWorld"; editorTemplate -suppress "conserve"; editorTemplate -suppress "emissionInWorld"; editorTemplate -suppress "maxCount"; editorTemplate -suppress "inheritFactor"; editorTemplate -suppress "cacheData"; editorTemplate -suppress "depthSort"; editorTemplate -suppress "particleRenderType"; AEshapeTemplate $nodeName; // suppress all the surface and geometry shape attrs editorTemplate -suppress "ignoreSelfShadowing"; editorTemplate -suppress "controlPoints"; editorTemplate -suppress "weights"; editorTemplate -suppress "tweak"; editorTemplate -suppress "relativeTweak"; editorTemplate -suppress "currentUVSet"; editorTemplate -suppress "uvSet"; editorTemplate -suppress "compInstObjGroups"; editorTemplate -suppress "smoothShading"; editorTemplate -suppress "castsShadows"; editorTemplate -suppress "receiveShadows"; editorTemplate -suppress "motionBlur"; editorTemplate -suppress "primaryVisibility"; editorTemplate -suppress "visibleInReflections"; editorTemplate -suppress "visibleInRefractions"; editorTemplate -suppress "doubleSided"; editorTemplate -suppress "opposite"; editorTemplate -suppress "geometryAntialiasingOverride"; editorTemplate -suppress "antialiasingLevel"; editorTemplate -suppress "shadingSamplesOverride"; editorTemplate -suppress "shadingSamples"; editorTemplate -suppress "maxShadingSamples"; editorTemplate -suppress "volumeSamplesOverride"; editorTemplate -suppress "volumeSamples"; editorTemplate -suppress "depthJitter"; editorTemplate -suppress "maxVisibilitySamplesOverride"; editorTemplate -suppress "maxVisibilitySamples"; editorTemplate -suppress "boundingBoxScale"; editorTemplate -suppress "featureDisplacement"; editorTemplate -suppress "initialSampleRate"; editorTemplate -suppress "extraSampleRate"; editorTemplate -suppress "textureThreshold"; editorTemplate -suppress "normalThreshold"; editorTemplate -suppress "displayImmediate"; editorTemplate -addExtraControls; editorTemplate -endScrollLayout; }