// =========================================================================== // 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: // AEpointEmitterTemplate // // Description Name; // Creates the attribute editor controls for the pointEmitter Node // // Input Value: // nodeName // // Output Value: // None // global proc dimCycleInterval ( string $nodeName ) // // Description: // Dim the cycle interval if cycleEmission is set to none, undim it otherwise. // Emitter type doesn't matter, since cycleEmission applies to all. { int $cycEmit = `getAttr( $nodeName + ".cycleEmission" )`; if ($cycEmit == 0) { // cycleEmission == NONE, dim cycleInterval. // editorTemplate -dimControl $nodeName "cycleInterval" true; } else { editorTemplate -dimControl $nodeName "cycleInterval" false; } } global proc checkInheritOpacity( string $nodeName ) { int $status = `getAttr ( $nodeName + ".inheritOpacity" )`; if( $status ) { editorTemplate -dimControl $nodeName "useLuminance" false; editorTemplate -dimControl $nodeName "invertOpacity" false; } else { editorTemplate -dimControl $nodeName "useLuminance" true; editorTemplate -dimControl $nodeName "invertOpacity" true; } } proc dimTextureInheritanceAttributes( string $nodeName, int $val ) { // Do NOT ever dim particle color of texture rate. // If we do that, the "map" button does not function thereafter (bug 125465). // It suffices to dim/undim the boolean "inherit" and "enable" buttons. // js 1-5-2000. // No longer dim inheritColor, because it may be used with any emitter type now //editorTemplate -dimControl $nodeName "particleColor" $val; //editorTemplate -dimControl $nodeName "inheritColor" $val; editorTemplate -dimControl $nodeName "inheritOpacity" $val; editorTemplate -dimControl $nodeName "useLuminance" $val; editorTemplate -dimControl $nodeName "invertOpacity" $val; //editorTemplate -dimControl $nodeName "textureRate" $val; editorTemplate -dimControl $nodeName "enableTextureRate" $val; editorTemplate -dimControl $nodeName "emitFromDark" $val; // dim the uv set control // uvsDimControl( $nodeName, "emit", $val, "emitterUvSet" ); } global proc dimVolumeAttributesByShape ( string $nodeName ) // // Description: // If current emitter type is volume, set volume emitter attribute // dimming according to volume shape. If current emitter type is // different from volume, do nothing. This routine handles only attributes // which are dimmed for some volumes but not for others. Attributes // which are the same for all are handled by dimVolumeAttributes. { int $currEmitType = `getAttr( $nodeName + ".emitterType" )`; // if not a volume emitter, do nothing if ( $currEmitType != 4 ) return; int $currEmitter = `getAttr ( $nodeName + ".volumeShape" )`; // Set up the defaults // editorTemplate -dimControl $nodeName "sectionRadius" true; editorTemplate -dimControl $nodeName "awayFromCenter" true; editorTemplate -dimControl $nodeName "awayFromAxis" false; editorTemplate -dimControl $nodeName "volumeSweep" false; // Each shape type changes the settings as needed. // switch ( $currEmitter ){ case 0: // Cube editorTemplate -dimControl $nodeName "volumeSweep" true; // // NOTE: no "break;" -- this is intended. // case 1: // Sphere editorTemplate -dimControl $nodeName "awayFromCenter" false; editorTemplate -dimControl $nodeName "awayFromAxis" true; break; case 2: // Cylinder break; case 3: // Cone break; case 4: // Torus editorTemplate -dimControl $nodeName "sectionRadius" false; break; } } proc dimVolumeAttributes( string $nodeName, int $val ) // // Description: // if $val is true, disable all volume attributes. // If false, enable all those which apply to current volume shape. { editorTemplate -dimControl $nodeName "volumeShape" $val; editorTemplate -dimControl $nodeName "volumeOffset" $val; editorTemplate -dimControl $nodeName "volumeSweep" $val; editorTemplate -dimControl $nodeName "volumeSectionRadius" $val; editorTemplate -dimControl $nodeName "awayFromCenter" $val; editorTemplate -dimControl $nodeName "awayFromAxis" $val; editorTemplate -dimControl $nodeName "aroundAxis" $val; editorTemplate -dimControl $nodeName "alongAxis" $val; editorTemplate -dimControl $nodeName "randomDirection" $val; editorTemplate -dimControl $nodeName "directionalSpeed" $val; editorTemplate -dimControl $nodeName "scaleSpeedBySize" $val; editorTemplate -dimControl $nodeName "sectionRadius" $val; editorTemplate -dimControl $nodeName "displaySpeed" $val; // editorTemplate -dimControl $nodeName "volumeEfficiency" $val; // if $val is true, we have now turned everything off, which // is correct. If $val is false, we have turned everything on, // which is not quite correct. Call special routine to handle // specific attributes according to shape type. // if (!$val) { dimVolumeAttributesByShape( $nodeName ); } } global proc setAttributeDimming ( string $nodeName ) // // Description: // Dim attributes in the attribute editor according to the type of emitter. // Does not handle the dimming of attributes for a specific volume shape. { int $currEmitter = `getAttr ( $nodeName + ".emitterType" )`; // Set default settings for all attributes. Then each emitter // must set only those which vary from the defaults. All attributes // are on by default EXCEPT texture inheritance, needParentUV, and // volume emission attributes. // We do not include un-dimming calls for parameters (eg rate) // which apply to every emitter, since nobody ever dims them. // // Enable useRatePP only if ratePP is properly connected. string $connList[]; $connList = `listConnections ($nodeName + ".ratePP")`; if( size($connList) > 0 ) editorTemplate -dimControl $nodeName "useRatePP" false; else editorTemplate -dimControl $nodeName "useRatePP" true; editorTemplate -dimControl $nodeName "needParentUV" true; editorTemplate -dimControl $nodeName "minDistance" false; editorTemplate -dimControl $nodeName "maxDistance" false; editorTemplate -dimControl $nodeName "spread" false; editorTemplate -dimControl $nodeName "scaleRateByObjectSize" false; editorTemplate -dimControl $nodeName "directionX" false; editorTemplate -dimControl $nodeName "directionY" false; editorTemplate -dimControl $nodeName "directionZ" false; editorTemplate -dimControl $nodeName "spread" false; editorTemplate -dimControl $nodeName "speed" false; editorTemplate -dimControl $nodeName "tangentSpeed" false; editorTemplate -dimControl $nodeName "normalSpeed" false; dimTextureInheritanceAttributes( $nodeName, true ); dimVolumeAttributes( $nodeName, true ); switch ( $currEmitter ){ case 0: // Direction editorTemplate -dimControl $nodeName "scaleRateByObjectSize" true; editorTemplate -dimControl $nodeName "tangentSpeed" true; editorTemplate -dimControl $nodeName "normalSpeed" true; break; case 1: // Omni editorTemplate -dimControl $nodeName "spread" true; editorTemplate -dimControl $nodeName "scaleRateByObjectSize" true; editorTemplate -dimControl $nodeName "directionX" true; editorTemplate -dimControl $nodeName "directionY" true; editorTemplate -dimControl $nodeName "directionZ" true; editorTemplate -dimControl $nodeName "tangentSpeed" true; editorTemplate -dimControl $nodeName "normalSpeed" true; break; case 2: // Surface editorTemplate -dimControl $nodeName "needParentUV" false; editorTemplate -dimControl $nodeName "useRatePP" true; editorTemplate -dimControl $nodeName "directionX" true; editorTemplate -dimControl $nodeName "directionY" true; editorTemplate -dimControl $nodeName "directionZ" true; editorTemplate -dimControl $nodeName "spread" true; dimTextureInheritanceAttributes( $nodeName, false ); //NOTE: IF EMITTING OBJECT IS POLYGON, SHOULD DIM // TEXTURE INHERITANCE AND needParentUV. break; case 3: // Curve editorTemplate -dimControl $nodeName "useRatePP" true; //editorTemplate -dimControl $nodeName "directionX" true; //editorTemplate -dimControl $nodeName "directionY" true; //editorTemplate -dimControl $nodeName "directionZ" true; break; case 4: // Volume editorTemplate -dimControl $nodeName "useRatePP" true; editorTemplate -dimControl $nodeName "minDistance" true; editorTemplate -dimControl $nodeName "maxDistance" true; editorTemplate -dimControl $nodeName "spread" true; editorTemplate -dimControl $nodeName "tangentSpeed" true; editorTemplate -dimControl $nodeName "normalSpeed" true; editorTemplate -dimControl $nodeName "speed" true; dimVolumeAttributes( $nodeName, false ); break; } } //*********************************************************** // Code to support specification of a uv-set for polymesh // surface emitters. //*********************************************************** proc string nodeName( string $attrName ) // // Description: utility to get the name of a node given a string // which may be "", ".", ".[]", // etc. // { string $buffer[]; tokenize( $attrName, ".", $buffer ); return $buffer[0]; } global proc AEemitterAddUvSet( string $attrName ) // // Description: This procedure is called to build the uv set // dropdown in the AE for a particular node. // { string $emitter = nodeName($attrName); uvControlUtils(); string $uvMenu = uvsControl( "create", $emitter, "emit", 0, "emitterUvSet" ); int $polyEmitter = uvsIsDynPoly( $emitter, "emit", -1 ); optionMenuGrp -e -m $polyEmitter $uvMenu; } global proc AEemitterReplaceUvSet( string $attrName ) // // Description: This procedure is called to refresh an existing // uv set dropdown menu for a newly selected emitter node. // { string $emitter = nodeName($attrName); uvControlUtils(); string $uvMenu = uvsControl( "replace", $emitter, "emit", 0, "emitterUvSet" ); int $polyEmitter = uvsIsDynPoly( $emitter, "emit", -1 ); optionMenuGrp -e -m $polyEmitter $uvMenu; } //*********************************************************** // End of code to support specification of a uv-set for polymesh // surface emitters. //*********************************************************** global proc AEpointEmitterTemplate ( string $nodeName ) { editorTemplate -beginScrollLayout; AEtransformMain $nodeName; editorTemplate -beginLayout (uiRes("m_AEpointEmitterTemplate.kBasicEmitterAttributes")) -collapse 0; editorTemplate -addControl "emitterType" "setAttributeDimming"; editorTemplate -label (uiRes("m_AEpointEmitterTemplate.kRate")) -addControl "rate"; editorTemplate -addControl "scaleRateBySpeed"; editorTemplate -beginNoOptimize; editorTemplate -addControl "scaleRateByObjectSize"; editorTemplate -label (uiRes("m_AEpointEmitterTemplate.kPPRates")) -addControl "useRatePP"; editorTemplate -label (uiRes("m_AEpointEmitterTemplate.kNeedParent")) -addControl "needParentUV"; editorTemplate -endNoOptimize; editorTemplate -addControl "cycleEmission" "dimCycleInterval"; editorTemplate -addControl "cycleInterval"; editorTemplate -endLayout; editorTemplate -beginLayout (uiRes("m_AEpointEmitterTemplate.kDistanceDirectionAttributes")) -collapse 0; editorTemplate -addControl "minDistance"; editorTemplate -addControl "maxDistance"; editorTemplate -addControl "directionX"; editorTemplate -addControl "directionY"; editorTemplate -addControl "directionZ"; editorTemplate -addControl "spread"; editorTemplate -endLayout; editorTemplate -beginLayout (uiRes("m_AEpointEmitterTemplate.kBasicEmissionSpeedAttributes")) -collapse 0; editorTemplate -addControl "speed"; editorTemplate -addControl "speedRandom"; editorTemplate -addControl "tangentSpeed"; editorTemplate -addControl "normalSpeed"; editorTemplate -endLayout; editorTemplate -beginLayout (uiRes("m_AEpointEmitterTemplate.kVolumeEmitterAttributes")) -collapse 0; editorTemplate -addControl "volumeShape" "dimVolumeAttributesByShape"; editorTemplate -addControl "volumeOffset"; editorTemplate -addControl "volumeSweep" ; editorTemplate -addControl "sectionRadius" ; editorTemplate -endLayout; editorTemplate -beginLayout (uiRes("m_AEpointEmitterTemplate.kVolumeSpeedAttributes")) -collapse 0; editorTemplate -addControl "awayFromCenter"; editorTemplate -addControl "awayFromAxis"; editorTemplate -addControl "alongAxis"; editorTemplate -addControl "aroundAxis"; editorTemplate -addControl "randomDirection"; editorTemplate -addControl "directionalSpeed"; editorTemplate -beginNoOptimize; editorTemplate -addControl "scaleSpeedBySize"; editorTemplate -addControl "displaySpeed"; editorTemplate -endNoOptimize; editorTemplate -endLayout; editorTemplate -beginLayout (uiRes("m_AEpointEmitterTemplate.kTextureEmissionAttributes")) -collapse 0; editorTemplate -addControl "particleColor"; editorTemplate -beginNoOptimize; editorTemplate -addControl "inheritColor"; editorTemplate -addControl "inheritOpacity" "checkInheritOpacity"; editorTemplate -addControl "useLuminance"; editorTemplate -addControl "invertOpacity"; editorTemplate -endNoOptimize; editorTemplate -addControl "textureRate"; editorTemplate -beginNoOptimize; editorTemplate -addControl "enableTextureRate"; editorTemplate -addControl "emitFromDark"; editorTemplate -endNoOptimize; editorTemplate -callCustom "AEemitterAddUvSet" "AEemitterReplaceUvSet" $nodeName; editorTemplate -endLayout; // Suppress attributes we don't want in the editor. // editorTemplate -suppress useSceneTime; editorTemplate -suppress randState; editorTemplate -suppress currentTime; editorTemplate -suppress isFull; editorTemplate -suppress output; editorTemplate -suppress direction; editorTemplate -suppress ratePP; editorTemplate -suppress inheritFactor; editorTemplate -suppress outPositions; editorTemplate -suppress outVelocities; editorTemplate -suppress parentId; editorTemplate -suppress deltaTimeCycle; editorTemplate -suppress "renderLayerInfo"; // include/call base class/node attributes AEdynBaseTemplate $nodeName; editorTemplate -addExtraControls; editorTemplate -endScrollLayout; }