/****************************************************************************** NintendoWare for CTR Maya Plugin File: NW4C_SetBillboard.mel Description: set billboard Date: 2010/04/26 Author: Takashi Endo Copyright (C)2009-2010 Nintendo Co., Ltd. / HAL Laboratory, Inc. All rights reserved. ******************************************************************************/ // UpdateWindow DoSearch /****************************************************************************** is scene anim object ******************************************************************************/ proc int IsSceneAnimObject(string $node) { string $type = nodeType($node); string $childs[] = `listRelatives -pa -s $node`; if (size(`ls -cameras -lights -typ environmentFog $childs`) > 0 || $type == "lookAt") { return true; } return false; } /****************************************************************************** get selected transform (except camera & light) return node size ******************************************************************************/ proc int GetSelectedXform(string $xforms[]) { clear($xforms); string $nodes[] = `ls -sl -typ transform`; for ($node in $nodes) { if (!IsSceneAnimObject($node)) { $xforms[size($xforms)] = $node; } } return size($xforms); } /****************************************************************************** billboard ******************************************************************************/ global proc int nw4cSetBillboard_Get_Billboard(string $node) { return (`attributeQuery -n $node -ex "nw4cBillboard"`) ? `getAttr ($node + ".nw4cBillboard")` : 0; } global proc nw4cSetBillboard_Add_Billboard(string $node) { if (!`attributeQuery -n $node -ex "nw4cBillboard"`) { addAttr -ln "nw4cBillboard" -at "enum" -en ("Off=0:World=1:World Viewpoint=2:" + "Screen=3:Screen Viewpoint=4:" + "Y Axial=5:Y Axial Viewpoint=6") -dv 0 -h 1 $node; } } global proc nw4cSetBillboard_Set_Billboard(string $node, int $val) { nw4cSetBillboard_Add_Billboard($node); setAttr ($node + ".nw4cBillboard") $val; } proc SetJob_Billboard(string $node) { if (!`attributeQuery -n $node -ex "nw4cBillboard"`) { return; } scriptJob -p nw4cSetBillboard_Billboard -rp -ac ($node + ".nw4cBillboard") ("optionMenuGrp -e -sl (`nw4cSetBillboard_Get_Billboard " + $node + "` + 1) nw4cSetBillboard_Billboard"); } global proc nw4cSetBillboard_BillboardCB(string $mainNode) { string $xforms[]; GetSelectedXform($xforms); int $val = `optionMenuGrp -q -sl nw4cSetBillboard_Billboard` - 1; for ($node in $xforms) { nw4cSetBillboard_Set_Billboard($node, $val); } SetJob_Billboard($mainNode); } /****************************************************************************** update window ******************************************************************************/ global proc nw4cSetBillboard_UpdateWindow() { //----------------------------------------------------------------------------- // get selection string $xforms[]; GetSelectedXform($xforms); int $enableFlag = (size($xforms) > 0); //----------------------------------------------------------------------------- // set node name string $nodesName; if ($enableFlag) { $nodesName = $xforms[0]; int $nodeSize = size($xforms); for ($inode = 1; $inode < $nodeSize; ++$inode) { if ($inode == 3) { $nodesName += ", ... (" + $nodeSize + ")"; break; } $nodesName += ", " + $xforms[$inode]; } } else { $nodesName = "(None)"; } text -e -l $nodesName nw4cSetBillboard_NodeName; //----------------------------------------------------------------------------- // set current attr & change command if ($enableFlag) { string $node = $xforms[0]; optionMenuGrp -e -sl (`nw4cSetBillboard_Get_Billboard $node` + 1) -cc ("nw4cSetBillboard_BillboardCB " + $node) nw4cSetBillboard_Billboard; SetJob_Billboard($node); } //----------------------------------------------------------------------------- // set enable state control -e -en $enableFlag nw4cSetBillboard_Billboard; } /****************************************************************************** search check CB ******************************************************************************/ global proc nw4cSetBillboard_SearchCheckCB() { control -e -en (`checkBoxGrp -q -v1 nw4cSetBillboard_SearchCheck1` || `checkBoxGrp -q -v2 nw4cSetBillboard_SearchCheck1` || `checkBoxGrp -q -v1 nw4cSetBillboard_SearchCheck2` || `checkBoxGrp -q -v2 nw4cSetBillboard_SearchCheck2` || `checkBoxGrp -q -v1 nw4cSetBillboard_SearchCheck3` || `checkBoxGrp -q -v2 nw4cSetBillboard_SearchCheck3`) nw4cSetBillboard_SearchBtn; } /****************************************************************************** do search ******************************************************************************/ global proc nw4cSetBillboard_DoSearch() { int $searchVal1 = `checkBoxGrp -q -v1 nw4cSetBillboard_SearchCheck1` ? 1 : -1; int $searchVal2 = `checkBoxGrp -q -v2 nw4cSetBillboard_SearchCheck1` ? 2 : -1; int $searchVal3 = `checkBoxGrp -q -v1 nw4cSetBillboard_SearchCheck2` ? 3 : -1; int $searchVal4 = `checkBoxGrp -q -v2 nw4cSetBillboard_SearchCheck2` ? 4 : -1; int $searchVal5 = `checkBoxGrp -q -v1 nw4cSetBillboard_SearchCheck3` ? 5 : -1; int $searchVal6 = `checkBoxGrp -q -v2 nw4cSetBillboard_SearchCheck3` ? 6 : -1; int $nodeCount = 0; select -cl; string $xforms[] = `ls -typ transform`; for ($node in $xforms) { if (IsSceneAnimObject($node)) { continue; } int $val = nw4cSetBillboard_Get_Billboard($node); if ($val == $searchVal1 || $val == $searchVal2 || $val == $searchVal3 || $val == $searchVal4 || $val == $searchVal5 || $val == $searchVal6) { select -add $node; ++$nodeCount; } } if ($nodeCount == 0) { print "Not found\n"; } else { string $msg = "Found: " + $nodeCount + " transform node"; if ($nodeCount >= 2) { $msg += "s"; } print ($msg + "\n"); } } /****************************************************************************** main ******************************************************************************/ global proc NW4C_SetBillboard() { //----------------------------------------------------------------------------- // create window int $wd = 400; int $ht = 340; if (!`window -exists nw4cSetBillboard_Win`) { window -t "NW4C Set Billboard" -wh $wd $ht -mxb 0 -mb 1 nw4cSetBillboard_Win; menu -l "Help"; menuItem -l ("Help on " + `window -q -t nw4cSetBillboard_Win` + "...") -c "NW4C_ShowHelp \"html/NW4C_SetBillboard.html\" \"\""; columnLayout -adj 1 -cat "both" 4 -cal "center" -rs 4; //----------------------------------------------------------------------------- // node name frameLayout -l "Selected Transform Node" -cll 0 -cl 0 -bv 1 -bs "etchedIn"; columnLayout -adj 1 -cal "center" -rs 8; text -l "" nw4cSetBillboard_NodeName; setParent ..; // columnLayout setParent ..; // formLayout //----------------------------------------------------------------------------- // set frameLayout -l "Set" -cll 0 -cl 0 -bv 1 -bs "etchedIn"; columnLayout -adj 1 -rs 8; optionMenuGrp -l "Billboard" -cw 1 130 -rat 1 "both" 4 -cal 1 "right" nw4cSetBillboard_Billboard; menuItem -l "Off"; menuItem -l "World"; menuItem -l "World Viewpoint"; menuItem -l "Screen"; menuItem -l "Screen Viewpoint"; menuItem -l "Y Axial"; menuItem -l "Y Axial Viewpoint"; setParent ..; // columnLayout setParent ..; // formLayout //----------------------------------------------------------------------------- // search frameLayout -l "Search" -cll 0 -cl 0 -bv 1 -bs "etchedIn"; columnLayout -adj 1 -rs 8; checkBoxGrp -l "" -ncb 2 -cw3 80 110 110 -la2 "World" "World Viewpoint" -cc "nw4cSetBillboard_SearchCheckCB" nw4cSetBillboard_SearchCheck1; checkBoxGrp -l "" -ncb 2 -cw3 80 110 110 -la2 "Screen" "Screen Viewpoint" -cc "nw4cSetBillboard_SearchCheckCB" nw4cSetBillboard_SearchCheck2; checkBoxGrp -l "" -ncb 2 -cw3 80 110 110 -la2 "Y Axial" "Y Axial Viewpoint" -cc "nw4cSetBillboard_SearchCheckCB" nw4cSetBillboard_SearchCheck3; rowColumnLayout -nc 2 -cw 1 220 -cw 2 150; text -l ""; // dummy button -l "Search" -c "nw4cSetBillboard_DoSearch" nw4cSetBillboard_SearchBtn; setParent ..; // rowColumnLayout setParent ..; // columnLayout setParent ..; // formLayout //----------------------------------------------------------------------------- // close button string $closeCmd = "deleteUI nw4cSetBillboard_Win"; string $form = `formLayout -nd 100`; string $closeBtn = `button -h 26 -l "Close" -c $closeCmd`; formLayout -e -af $closeBtn "top" 0 -af $closeBtn "left" 0 -af $closeBtn "bottom" 0 -af $closeBtn "right" 0 $form; setParent ..; // formLayout setParent ..; // columnLayout setFocus $closeBtn; //----------------------------------------------------------------------------- // set selection change job scriptJob -p nw4cSetBillboard_Win -e "SelectionChanged" "nw4cSetBillboard_UpdateWindow"; } if (`window -q -w nw4cSetBillboard_Win` < $wd) { window -e -w $wd nw4cSetBillboard_Win; } if (`window -q -h nw4cSetBillboard_Win` < $ht) { window -e -h $ht nw4cSetBillboard_Win; } //window -e -wh $wd $ht nw4cSetBillboard_Win; //----------------------------------------------------------------------------- // update window nw4cSetBillboard_UpdateWindow; nw4cSetBillboard_SearchCheckCB; //----------------------------------------------------------------------------- // show window showWindow nw4cSetBillboard_Win; }