// =========================================================================== // 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. // =========================================================================== proc createAnimLayerMenuItem(string $layer, string $currentLayer, string $affectedLayers[]) { int $filterActive = `optionVar -exists animLayerFilterActive` ? `optionVar -query animLayerFilterActive` : 0; if($filterActive && !isAffectedLayer($layer, $affectedLayers, 1)) { return; } $radioState = ( $layer == $currentLayer ); $cmd = "selectLayer(\"" + $layer + "\");"; string $layerSetAnnotationFormat = (uiRes("m_buildSetAnimLayerMenu.kLayerSetAnnotFormat")); $annotation = `format -stringArg $layer $layerSetAnnotationFormat `; string $sublayers[] = `animLayer -query -children $layer`; $submenu = (size($sublayers) > 0); menuItem -label $layer -command $cmd -annotation $annotation -subMenu $submenu -radioButton $radioState; if ($submenu) { menuItem -label $layer -command $cmd -annotation $annotation -radioButton $radioState; menuItem -divider true; for ($sub in $sublayers) { createAnimLayerMenuItem($sub, $currentLayer, $affectedLayers); } setParent -m ..; } } global proc buildSetAnimLayerMenu( string $menu ) { menu -edit -dai $menu; setParent -m $menu; // Get the list of top-level animation layers // string $rootLayer = `animLayer -query -root`; if($rootLayer == "") return; string $layers[] = `animLayer -query -children $rootLayer`; global string $gSelectedAnimLayers[]; string $currentLayers[] = $gSelectedAnimLayers; // Determine if there is a single current layer // string $currentLayer = ""; if ( size( $currentLayers ) == 1 ) { $currentLayer = $currentLayers[0]; } string $affectedLayers[] = {}; int $filterActive = `optionVar -exists animLayerFilterActive` ? `optionVar -query animLayerFilterActive` : 0; if($filterActive) $affectedLayers = `animLayer -query -afl`; // Put in the "None" menu item // radioMenuItemCollection; string $cmd = "selectLayer(\"\");"; menuItem -label (uiRes("m_buildSetAnimLayerMenu.kNone")) -command $cmd -annotation (uiRes("m_buildSetAnimLayerMenu.kNoneAnnot")) -radioButton 0; menuItem -divider true; string $layerSetAnnotationFormat = (uiRes("m_buildSetAnimLayerMenu.kLayerSetAnnotationFormat")); string $annotation = `format -stringArg $rootLayer $layerSetAnnotationFormat`; menuItem -label $rootLayer -command ("selectLayer(\"" + $rootLayer + "\");") -annotation $annotation -radioButton ($currentLayer==$rootLayer); // Put in the radio buttons for all of the top-level layers // for ( $layer in $layers ) { createAnimLayerMenuItem($layer, $currentLayer, $affectedLayers); } if(size($currentLayers) > 1) { menuItem -divider true; menuItem -label (uiRes("m_buildSetAnimLayerMenu.kMultiple")) -command "" -annotation (uiRes("m_buildSetAnimLayerMenu.kMultipleAnimLayersSelected")) -radioButton 1; } } global proc selectLayer(string $selected) { global string $gSelectedAnimLayers[]; if($selected != "") $gSelectedAnimLayers = { $selected }; else $gSelectedAnimLayers = { }; string $layers[] = buildAnimLayerArray(); for($lLayer in $layers) { if($lLayer != $selected) { animLayerEditorOnSelect($lLayer, 0); } } if($selected != "") animLayerEditorOnSelect($selected, 1); animLayer -forceUIRefresh; }