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