1/****************************************************************************** 2 NintendoWare for CTR Maya Plugin 3 4 File: NW4C_SetBillboard.mel 5 Description: set billboard 6 Date: 2010/04/26 7 8 Copyright (C)2009-2011 Nintendo/HAL Laboratory, Inc. All rights reserved. 9******************************************************************************/ 10 11// UpdateWindow DoSearch 12 13/****************************************************************************** 14 is scene anim object 15******************************************************************************/ 16proc int IsSceneAnimObject(string $node) 17{ 18 string $type = nodeType($node); 19 string $childs[] = `listRelatives -pa -s $node`; 20 if (size(`ls -cameras -lights -typ environmentFog $childs`) > 0 || 21 $type == "lookAt") 22 { 23 return true; 24 } 25 return false; 26} 27 28/****************************************************************************** 29 get selected transform (except camera & light) 30 31 return node size 32******************************************************************************/ 33proc int GetSelectedXform(string $xforms[]) 34{ 35 clear($xforms); 36 37 string $nodes[] = `ls -sl -typ transform`; 38 for ($node in $nodes) 39 { 40 if (!IsSceneAnimObject($node)) 41 { 42 $xforms[size($xforms)] = $node; 43 } 44 } 45 46 return size($xforms); 47} 48 49/****************************************************************************** 50 billboard 51******************************************************************************/ 52global proc int nw4cSetBillboard_Get_Billboard(string $node) 53{ 54 return (`attributeQuery -n $node -ex "nw4cBillboard"`) ? 55 `getAttr ($node + ".nw4cBillboard")` : 0; 56} 57 58global proc nw4cSetBillboard_Add_Billboard(string $node) 59{ 60 if (!`attributeQuery -n $node -ex "nw4cBillboard"`) 61 { 62 addAttr -ln "nw4cBillboard" -at "enum" 63 -en ("Off=0:World=1:World Viewpoint=2:" 64 + "Screen=3:Screen Viewpoint=4:" 65 + "Y Axial=5:Y Axial Viewpoint=6") 66 -dv 0 -h 1 $node; 67 } 68} 69 70global proc nw4cSetBillboard_Set_Billboard(string $node, int $val) 71{ 72 nw4cSetBillboard_Add_Billboard($node); 73 setAttr ($node + ".nw4cBillboard") $val; 74} 75 76proc SetJob_Billboard(string $node) 77{ 78 if (!`attributeQuery -n $node -ex "nw4cBillboard"`) 79 { 80 return; 81 } 82 scriptJob -p nw4cSetBillboard_Billboard -rp -ac ($node + ".nw4cBillboard") 83 ("optionMenuGrp -e -sl (`nw4cSetBillboard_Get_Billboard " 84 + $node + "` + 1) nw4cSetBillboard_Billboard"); 85} 86 87global proc nw4cSetBillboard_BillboardCB(string $mainNode) 88{ 89 string $xforms[]; 90 GetSelectedXform($xforms); 91 int $val = `optionMenuGrp -q -sl nw4cSetBillboard_Billboard` - 1; 92 for ($node in $xforms) 93 { 94 nw4cSetBillboard_Set_Billboard($node, $val); 95 } 96 SetJob_Billboard($mainNode); 97} 98 99/****************************************************************************** 100 update window 101******************************************************************************/ 102global proc nw4cSetBillboard_UpdateWindow() 103{ 104 //----------------------------------------------------------------------------- 105 // get selection 106 string $xforms[]; 107 GetSelectedXform($xforms); 108 int $enableFlag = (size($xforms) > 0); 109 110 //----------------------------------------------------------------------------- 111 // set node name 112 string $nodesName; 113 if ($enableFlag) 114 { 115 $nodesName = $xforms[0]; 116 int $nodeSize = size($xforms); 117 for ($inode = 1; $inode < $nodeSize; ++$inode) 118 { 119 if ($inode == 3) 120 { 121 $nodesName += ", ... (" + $nodeSize + ")"; 122 break; 123 } 124 $nodesName += ", " + $xforms[$inode]; 125 } 126 } 127 else 128 { 129 $nodesName = "(None)"; 130 } 131 text -e -l $nodesName nw4cSetBillboard_NodeName; 132 133 //----------------------------------------------------------------------------- 134 // set current attr & change command 135 if ($enableFlag) 136 { 137 string $node = $xforms[0]; 138 139 optionMenuGrp -e -sl (`nw4cSetBillboard_Get_Billboard $node` + 1) 140 -cc ("nw4cSetBillboard_BillboardCB " + $node) 141 nw4cSetBillboard_Billboard; 142 143 SetJob_Billboard($node); 144 } 145 146 //----------------------------------------------------------------------------- 147 // set enable state 148 control -e -en $enableFlag nw4cSetBillboard_Billboard; 149} 150 151/****************************************************************************** 152 search check CB 153******************************************************************************/ 154global proc nw4cSetBillboard_SearchCheckCB() 155{ 156 control -e -en 157 (`checkBoxGrp -q -v1 nw4cSetBillboard_SearchCheck1` || 158 `checkBoxGrp -q -v2 nw4cSetBillboard_SearchCheck1` || 159 `checkBoxGrp -q -v1 nw4cSetBillboard_SearchCheck2` || 160 `checkBoxGrp -q -v2 nw4cSetBillboard_SearchCheck2` || 161 `checkBoxGrp -q -v1 nw4cSetBillboard_SearchCheck3` || 162 `checkBoxGrp -q -v2 nw4cSetBillboard_SearchCheck3`) 163 nw4cSetBillboard_SearchBtn; 164} 165 166/****************************************************************************** 167 do search 168******************************************************************************/ 169global proc nw4cSetBillboard_DoSearch() 170{ 171 int $searchVal1 = `checkBoxGrp -q -v1 nw4cSetBillboard_SearchCheck1` ? 172 1 : -1; 173 int $searchVal2 = `checkBoxGrp -q -v2 nw4cSetBillboard_SearchCheck1` ? 174 2 : -1; 175 int $searchVal3 = `checkBoxGrp -q -v1 nw4cSetBillboard_SearchCheck2` ? 176 3 : -1; 177 int $searchVal4 = `checkBoxGrp -q -v2 nw4cSetBillboard_SearchCheck2` ? 178 4 : -1; 179 int $searchVal5 = `checkBoxGrp -q -v1 nw4cSetBillboard_SearchCheck3` ? 180 5 : -1; 181 int $searchVal6 = `checkBoxGrp -q -v2 nw4cSetBillboard_SearchCheck3` ? 182 6 : -1; 183 184 int $nodeCount = 0; 185 select -cl; 186 string $xforms[] = `ls -typ transform`; 187 for ($node in $xforms) 188 { 189 if (IsSceneAnimObject($node)) 190 { 191 continue; 192 } 193 int $val = nw4cSetBillboard_Get_Billboard($node); 194 if ($val == $searchVal1 || 195 $val == $searchVal2 || 196 $val == $searchVal3 || 197 $val == $searchVal4 || 198 $val == $searchVal5 || 199 $val == $searchVal6) 200 { 201 select -add $node; 202 ++$nodeCount; 203 } 204 } 205 206 if ($nodeCount == 0) 207 { 208 print "Not found\n"; 209 } 210 else 211 { 212 string $msg = "Found: " + $nodeCount + " transform node"; 213 if ($nodeCount >= 2) 214 { 215 $msg += "s"; 216 } 217 print ($msg + "\n"); 218 } 219} 220 221/****************************************************************************** 222 main 223******************************************************************************/ 224global proc NW4C_SetBillboard() 225{ 226 //----------------------------------------------------------------------------- 227 // create window 228 int $wd = 400; 229 int $ht = 340; 230 if (!`window -exists nw4cSetBillboard_Win`) 231 { 232 window -t "NW4C Set Billboard" -wh $wd $ht -mxb 0 -mb 1 233 nw4cSetBillboard_Win; 234 menu -l "Help"; 235 menuItem -l ("Help on " + `window -q -t nw4cSetBillboard_Win` + "...") 236 -c "NW4C_ShowHelp \"html/NW4C_SetBillboard.html\" \"\""; 237 238 columnLayout -adj 1 -cat "both" 4 -cal "center" -rs 4; 239 240 //----------------------------------------------------------------------------- 241 // node name 242 frameLayout -l "Selected Transform Node" -cll 0 -cl 0 -bv 1 -bs "etchedIn"; 243 columnLayout -adj 1 -cal "center" -rs 8; 244 245 text -l "" nw4cSetBillboard_NodeName; 246 247 setParent ..; // columnLayout 248 setParent ..; // formLayout 249 250 //----------------------------------------------------------------------------- 251 // set 252 frameLayout -l "Set" -cll 0 -cl 0 -bv 1 -bs "etchedIn"; 253 columnLayout -adj 1 -rs 8; 254 255 optionMenuGrp -l "Billboard" 256 -cw 1 130 -rat 1 "both" 4 -cal 1 "right" 257 nw4cSetBillboard_Billboard; 258 menuItem -l "Off"; 259 menuItem -l "World"; 260 menuItem -l "World Viewpoint"; 261 menuItem -l "Screen"; 262 menuItem -l "Screen Viewpoint"; 263 menuItem -l "Y Axial"; 264 menuItem -l "Y Axial Viewpoint"; 265 266 setParent ..; // columnLayout 267 setParent ..; // formLayout 268 269 //----------------------------------------------------------------------------- 270 // search 271 frameLayout -l "Search" -cll 0 -cl 0 -bv 1 -bs "etchedIn"; 272 columnLayout -adj 1 -rs 8; 273 274 checkBoxGrp -l "" -ncb 2 -cw3 80 110 110 275 -la2 "World" "World Viewpoint" 276 -cc "nw4cSetBillboard_SearchCheckCB" 277 nw4cSetBillboard_SearchCheck1; 278 checkBoxGrp -l "" -ncb 2 -cw3 80 110 110 279 -la2 "Screen" "Screen Viewpoint" 280 -cc "nw4cSetBillboard_SearchCheckCB" 281 nw4cSetBillboard_SearchCheck2; 282 checkBoxGrp -l "" -ncb 2 -cw3 80 110 110 283 -la2 "Y Axial" "Y Axial Viewpoint" 284 -cc "nw4cSetBillboard_SearchCheckCB" 285 nw4cSetBillboard_SearchCheck3; 286 rowColumnLayout -nc 2 -cw 1 220 -cw 2 150; 287 text -l ""; // dummy 288 button -l "Search" 289 -c "nw4cSetBillboard_DoSearch" 290 nw4cSetBillboard_SearchBtn; 291 setParent ..; // rowColumnLayout 292 293 setParent ..; // columnLayout 294 setParent ..; // formLayout 295 296 //----------------------------------------------------------------------------- 297 // close button 298 string $closeCmd = "deleteUI nw4cSetBillboard_Win"; 299 string $form = `formLayout -nd 100`; 300 string $closeBtn = `button -h 26 -l "Close" -c $closeCmd`; 301 formLayout -e 302 -af $closeBtn "top" 0 303 -af $closeBtn "left" 0 304 -af $closeBtn "bottom" 0 305 -af $closeBtn "right" 0 306 $form; 307 setParent ..; // formLayout 308 309 setParent ..; // columnLayout 310 311 setFocus $closeBtn; 312 313 //----------------------------------------------------------------------------- 314 // set selection change job 315 scriptJob -p nw4cSetBillboard_Win 316 -e "SelectionChanged" "nw4cSetBillboard_UpdateWindow"; 317 } 318 if (`window -q -w nw4cSetBillboard_Win` < $wd) 319 { 320 window -e -w $wd nw4cSetBillboard_Win; 321 } 322 if (`window -q -h nw4cSetBillboard_Win` < $ht) 323 { 324 window -e -h $ht nw4cSetBillboard_Win; 325 } 326 //window -e -wh $wd $ht nw4cSetBillboard_Win; 327 328 //----------------------------------------------------------------------------- 329 // update window 330 nw4cSetBillboard_UpdateWindow; 331 nw4cSetBillboard_SearchCheckCB; 332 333 //----------------------------------------------------------------------------- 334 // show window 335 showWindow nw4cSetBillboard_Win; 336} 337