1/******************************************************************************
2	NintendoWare for CTR Maya Plugin
3
4	File:         NW4C_SetForceExportKey.mel
5	Description:  set force export key
6	Date:         2011/02/01
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	force export translate key
51******************************************************************************/
52global proc int nw4cSetForceExportKey_Get_ForceExportTranslateKey(string $node)
53{
54	return (`attributeQuery -n $node -ex "nw4cForceExportTranslateKey"`) ?
55		`getAttr ($node + ".nw4cForceExportTranslateKey")` : 0;
56}
57
58global proc nw4cSetForceExportKey_Add_ForceExportTranslateKey(string $node)
59{
60	if (!`attributeQuery -n $node -ex "nw4cForceExportTranslateKey"`)
61	{
62		addAttr -ln "nw4cForceExportTranslateKey" -at "bool" -dv 0 -h 1 $node;
63	}
64}
65
66global proc nw4cSetForceExportKey_Set_ForceExportTranslateKey(string $node, int $val)
67{
68	nw4cSetForceExportKey_Add_ForceExportTranslateKey($node);
69	setAttr ($node + ".nw4cForceExportTranslateKey") $val;
70}
71
72proc SetJob_ForceExportTranslateKey(string $node)
73{
74	if (!`attributeQuery -n $node -ex "nw4cForceExportTranslateKey"`)
75	{
76		return;
77	}
78	scriptJob -p nw4cSetForceExportKey_ForceExportTranslateKey -rp -ac ($node + ".nw4cForceExportTranslateKey")
79		("checkBoxGrp -e -v1 (`nw4cSetForceExportKey_Get_ForceExportTranslateKey "
80			+ $node + "`) nw4cSetForceExportKey_ForceExportTranslateKey");
81}
82
83global proc nw4cSetForceExportKey_ForceExportTranslateKeyCB(string $mainNode)
84{
85	string $xforms[];
86	GetSelectedXform($xforms);
87	int $val = `checkBoxGrp -q -v1 nw4cSetForceExportKey_ForceExportTranslateKey`;
88	for ($node in $xforms)
89	{
90		nw4cSetForceExportKey_Set_ForceExportTranslateKey($node, $val);
91	}
92	SetJob_ForceExportTranslateKey($mainNode);
93}
94
95/******************************************************************************
96	force export rotate key
97******************************************************************************/
98global proc int nw4cSetForceExportKey_Get_ForceExportRotateKey(string $node)
99{
100	return (`attributeQuery -n $node -ex "nw4cForceExportRotateKey"`) ?
101		`getAttr ($node + ".nw4cForceExportRotateKey")` : 0;
102}
103
104global proc nw4cSetForceExportKey_Add_ForceExportRotateKey(string $node)
105{
106	if (!`attributeQuery -n $node -ex "nw4cForceExportRotateKey"`)
107	{
108		addAttr -ln "nw4cForceExportRotateKey" -at "bool" -dv 0 -h 1 $node;
109	}
110}
111
112global proc nw4cSetForceExportKey_Set_ForceExportRotateKey(string $node, int $val)
113{
114	nw4cSetForceExportKey_Add_ForceExportRotateKey($node);
115	setAttr ($node + ".nw4cForceExportRotateKey") $val;
116}
117
118proc SetJob_ForceExportRotateKey(string $node)
119{
120	if (!`attributeQuery -n $node -ex "nw4cForceExportRotateKey"`)
121	{
122		return;
123	}
124	scriptJob -p nw4cSetForceExportKey_ForceExportRotateKey -rp -ac ($node + ".nw4cForceExportRotateKey")
125		("checkBoxGrp -e -v1 (`nw4cSetForceExportKey_Get_ForceExportRotateKey "
126			+ $node + "`) nw4cSetForceExportKey_ForceExportRotateKey");
127}
128
129global proc nw4cSetForceExportKey_ForceExportRotateKeyCB(string $mainNode)
130{
131	string $xforms[];
132	GetSelectedXform($xforms);
133	int $val = `checkBoxGrp -q -v1 nw4cSetForceExportKey_ForceExportRotateKey`;
134	for ($node in $xforms)
135	{
136		nw4cSetForceExportKey_Set_ForceExportRotateKey($node, $val);
137	}
138	SetJob_ForceExportRotateKey($mainNode);
139}
140
141/******************************************************************************
142	force export scale key
143******************************************************************************/
144global proc int nw4cSetForceExportKey_Get_ForceExportScaleKey(string $node)
145{
146	return (`attributeQuery -n $node -ex "nw4cForceExportScaleKey"`) ?
147		`getAttr ($node + ".nw4cForceExportScaleKey")` : 0;
148}
149
150global proc nw4cSetForceExportKey_Add_ForceExportScaleKey(string $node)
151{
152	if (!`attributeQuery -n $node -ex "nw4cForceExportScaleKey"`)
153	{
154		addAttr -ln "nw4cForceExportScaleKey" -at "bool" -dv 0 -h 1 $node;
155	}
156}
157
158global proc nw4cSetForceExportKey_Set_ForceExportScaleKey(string $node, int $val)
159{
160	nw4cSetForceExportKey_Add_ForceExportScaleKey($node);
161	setAttr ($node + ".nw4cForceExportScaleKey") $val;
162}
163
164proc SetJob_ForceExportScaleKey(string $node)
165{
166	if (!`attributeQuery -n $node -ex "nw4cForceExportScaleKey"`)
167	{
168		return;
169	}
170	scriptJob -p nw4cSetForceExportKey_ForceExportScaleKey -rp -ac ($node + ".nw4cForceExportScaleKey")
171		("checkBoxGrp -e -v1 (`nw4cSetForceExportKey_Get_ForceExportScaleKey "
172			+ $node + "`) nw4cSetForceExportKey_ForceExportScaleKey");
173}
174
175global proc nw4cSetForceExportKey_ForceExportScaleKeyCB(string $mainNode)
176{
177	string $xforms[];
178	GetSelectedXform($xforms);
179	int $val = `checkBoxGrp -q -v1 nw4cSetForceExportKey_ForceExportScaleKey`;
180	for ($node in $xforms)
181	{
182		nw4cSetForceExportKey_Set_ForceExportScaleKey($node, $val);
183	}
184	SetJob_ForceExportScaleKey($mainNode);
185}
186
187/******************************************************************************
188	force export visibility key
189******************************************************************************/
190global proc int nw4cSetForceExportKey_Get_ForceExportVisibilityKey(string $node)
191{
192	return (`attributeQuery -n $node -ex "nw4cForceExportVisibilityKey"`) ?
193		`getAttr ($node + ".nw4cForceExportVisibilityKey")` : 0;
194}
195
196global proc nw4cSetForceExportKey_Add_ForceExportVisibilityKey(string $node)
197{
198	if (!`attributeQuery -n $node -ex "nw4cForceExportVisibilityKey"`)
199	{
200		addAttr -ln "nw4cForceExportVisibilityKey" -at "bool" -dv 0 -h 1 $node;
201	}
202}
203
204global proc nw4cSetForceExportKey_Set_ForceExportVisibilityKey(string $node, int $val)
205{
206	nw4cSetForceExportKey_Add_ForceExportVisibilityKey($node);
207	setAttr ($node + ".nw4cForceExportVisibilityKey") $val;
208}
209
210proc SetJob_ForceExportVisibilityKey(string $node)
211{
212	if (!`attributeQuery -n $node -ex "nw4cForceExportVisibilityKey"`)
213	{
214		return;
215	}
216	scriptJob -p nw4cSetForceExportKey_ForceExportVisibilityKey -rp -ac ($node + ".nw4cForceExportVisibilityKey")
217		("checkBoxGrp -e -v1 (`nw4cSetForceExportKey_Get_ForceExportVisibilityKey "
218			+ $node + "`) nw4cSetForceExportKey_ForceExportVisibilityKey");
219}
220
221global proc nw4cSetForceExportKey_ForceExportVisibilityKeyCB(string $mainNode)
222{
223	string $xforms[];
224	GetSelectedXform($xforms);
225	int $val = `checkBoxGrp -q -v1 nw4cSetForceExportKey_ForceExportVisibilityKey`;
226	for ($node in $xforms)
227	{
228		nw4cSetForceExportKey_Set_ForceExportVisibilityKey($node, $val);
229	}
230	SetJob_ForceExportVisibilityKey($mainNode);
231}
232
233/******************************************************************************
234	update window
235******************************************************************************/
236global proc nw4cSetForceExportKey_UpdateWindow()
237{
238	//-----------------------------------------------------------------------------
239	// get selection
240	string $xforms[];
241	GetSelectedXform($xforms);
242	int $enableFlag = (size($xforms) > 0);
243
244	//-----------------------------------------------------------------------------
245	// set node name
246	string $nodesName;
247	if ($enableFlag)
248	{
249		$nodesName = $xforms[0];
250		int $nodeSize = size($xforms);
251		for ($inode = 1; $inode < $nodeSize; ++$inode)
252		{
253			if ($inode == 3)
254			{
255				$nodesName += ", ... (" + $nodeSize + ")";
256				break;
257			}
258			$nodesName += ",  " + $xforms[$inode];
259		}
260	}
261	else
262	{
263		$nodesName = "(None)";
264	}
265	text -e -l $nodesName nw4cSetForceExportKey_NodeName;
266
267	//-----------------------------------------------------------------------------
268	// set current attr & change command
269	if ($enableFlag)
270	{
271		string $node = $xforms[0];
272
273		checkBoxGrp -e -v1 (`nw4cSetForceExportKey_Get_ForceExportTranslateKey $node`)
274			-cc ("nw4cSetForceExportKey_ForceExportTranslateKeyCB " + $node)
275			nw4cSetForceExportKey_ForceExportTranslateKey;
276		SetJob_ForceExportTranslateKey($node);
277
278		checkBoxGrp -e -v1 (`nw4cSetForceExportKey_Get_ForceExportRotateKey $node`)
279			-cc ("nw4cSetForceExportKey_ForceExportRotateKeyCB " + $node)
280			nw4cSetForceExportKey_ForceExportRotateKey;
281		SetJob_ForceExportRotateKey($node);
282
283		checkBoxGrp -e -v1 (`nw4cSetForceExportKey_Get_ForceExportScaleKey $node`)
284			-cc ("nw4cSetForceExportKey_ForceExportScaleKeyCB " + $node)
285			nw4cSetForceExportKey_ForceExportScaleKey;
286		SetJob_ForceExportScaleKey($node);
287
288		checkBoxGrp -e -v1 (`nw4cSetForceExportKey_Get_ForceExportVisibilityKey $node`)
289			-cc ("nw4cSetForceExportKey_ForceExportVisibilityKeyCB " + $node)
290			nw4cSetForceExportKey_ForceExportVisibilityKey;
291		SetJob_ForceExportVisibilityKey($node);
292	}
293
294	//-----------------------------------------------------------------------------
295	// set enable state
296	control -e -en $enableFlag nw4cSetForceExportKey_ForceExportTranslateKey;
297	control -e -en $enableFlag nw4cSetForceExportKey_ForceExportRotateKey;
298	control -e -en $enableFlag nw4cSetForceExportKey_ForceExportScaleKey;
299	control -e -en $enableFlag nw4cSetForceExportKey_ForceExportVisibilityKey;
300}
301
302/******************************************************************************
303	search check CB
304******************************************************************************/
305global proc nw4cSetForceExportKey_SearchCheckCB()
306{
307	control -e -en
308		(`checkBoxGrp -q -v1 nw4cSetForceExportKey_SearchForceExportTranslateKey` ||
309		 `checkBoxGrp -q -v2 nw4cSetForceExportKey_SearchForceExportTranslateKey` ||
310		 `checkBoxGrp -q -v1 nw4cSetForceExportKey_SearchForceExportRotateKey` ||
311		 `checkBoxGrp -q -v2 nw4cSetForceExportKey_SearchForceExportRotateKey` ||
312		 `checkBoxGrp -q -v1 nw4cSetForceExportKey_SearchForceExportScaleKey` ||
313		 `checkBoxGrp -q -v2 nw4cSetForceExportKey_SearchForceExportScaleKey` ||
314		 `checkBoxGrp -q -v1 nw4cSetForceExportKey_SearchForceExportVisibilityKey` ||
315		 `checkBoxGrp -q -v2 nw4cSetForceExportKey_SearchForceExportVisibilityKey`)
316		nw4cSetForceExportKey_SearchBtn;
317}
318
319/******************************************************************************
320	do search
321******************************************************************************/
322global proc nw4cSetForceExportKey_DoSearch()
323{
324	int $searchTranslate1 = `checkBoxGrp -q -v1 nw4cSetForceExportKey_SearchForceExportTranslateKey` ?
325		0 : -1; // off
326	int $searchTranslate2 = `checkBoxGrp -q -v2 nw4cSetForceExportKey_SearchForceExportTranslateKey` ?
327		1 : -1; // on
328	int $searchRotate1 = `checkBoxGrp -q -v1 nw4cSetForceExportKey_SearchForceExportRotateKey` ?
329		0 : -1; // off
330	int $searchRotate2 = `checkBoxGrp -q -v2 nw4cSetForceExportKey_SearchForceExportRotateKey` ?
331		1 : -1; // on
332	int $searchScale1 = `checkBoxGrp -q -v1 nw4cSetForceExportKey_SearchForceExportScaleKey` ?
333		0 : -1; // off
334	int $searchScale2 = `checkBoxGrp -q -v2 nw4cSetForceExportKey_SearchForceExportScaleKey` ?
335		1 : -1; // on
336	int $searchVisibility1 = `checkBoxGrp -q -v1 nw4cSetForceExportKey_SearchForceExportVisibilityKey` ?
337		0 : -1; // off
338	int $searchVisibility2 = `checkBoxGrp -q -v2 nw4cSetForceExportKey_SearchForceExportVisibilityKey` ?
339		1 : -1; // on
340
341	int $andFlag = (`radioButtonGrp -q -sl nw4cSetForceExportKey_SearchLogic` == 1);
342
343	int $nodeCount = 0;
344	select -cl;
345	string $xforms[] = `ls -typ transform`;
346	for ($node in $xforms)
347	{
348		if (IsSceneAnimObject($node))
349		{
350			continue;
351		}
352		int $translate = nw4cSetForceExportKey_Get_ForceExportTranslateKey($node);
353		int $translateMatch =
354			$translate == $searchTranslate1 ||
355			$translate == $searchTranslate2 ||
356			($andFlag && $searchTranslate1 == -1 && $searchTranslate2 == -1);
357
358		int $rotate = nw4cSetForceExportKey_Get_ForceExportRotateKey($node);
359		int $rotateMatch =
360			$rotate == $searchRotate1 ||
361			$rotate == $searchRotate2 ||
362			($andFlag && $searchRotate1 == -1 && $searchRotate2 == -1);
363
364		int $scale = nw4cSetForceExportKey_Get_ForceExportScaleKey($node);
365		int $scaleMatch =
366			$scale == $searchScale1 ||
367			$scale == $searchScale2 ||
368			($andFlag && $searchScale1 == -1 && $searchScale2 == -1);
369
370		int $visibility = nw4cSetForceExportKey_Get_ForceExportVisibilityKey($node);
371		int $visibilityMatch =
372			$visibility == $searchVisibility1 ||
373			$visibility == $searchVisibility2 ||
374			($andFlag && $searchVisibility1 == -1 && $searchVisibility2 == -1);
375
376		int $match = ($andFlag) ?
377			($translateMatch && $rotateMatch && $scaleMatch && $visibilityMatch):
378			($translateMatch || $rotateMatch || $scaleMatch || $visibilityMatch);
379		if ($match)
380		{
381			select -add $node;
382			++$nodeCount;
383		}
384	}
385
386	if ($nodeCount == 0)
387	{
388		print "Not found\n";
389	}
390	else
391	{
392		string $msg = "Found: " + $nodeCount + " transform node";
393		if ($nodeCount >= 2)
394		{
395			$msg += "s";
396		}
397		print ($msg + "\n");
398	}
399}
400
401/******************************************************************************
402	main
403******************************************************************************/
404global proc NW4C_SetForceExportKey()
405{
406	//-----------------------------------------------------------------------------
407	// create window
408	int $wd = 400;
409	int $ht = 430;
410	if (!`window -exists nw4cSetForceExportKey_Win`)
411	{
412		window -t "NW4C Set Force Export Key" -wh $wd $ht -mxb 0 -mb 1
413			nw4cSetForceExportKey_Win;
414		menu -l "Help";
415		menuItem -l ("Help on " + `window -q -t nw4cSetForceExportKey_Win` + "...")
416			-c "NW4C_ShowHelp \"html/NW4C_SetForceExportKey.html\" \"\"";
417
418		columnLayout -adj 1 -cat "both" 4 -cal "center" -rs 4;
419
420		//-----------------------------------------------------------------------------
421		// node name
422		frameLayout -l "Selected Transform Node" -cll 0 -cl 0 -bv 1 -bs "etchedIn";
423			columnLayout -adj 1 -cal "center" -rs 8;
424
425			text -l "" nw4cSetForceExportKey_NodeName;
426
427			setParent ..; // columnLayout
428		setParent ..; // formLayout
429
430		//-----------------------------------------------------------------------------
431		// set
432		frameLayout -l "Set" -cll 0 -cl 0 -bv 1 -bs "etchedIn";
433			columnLayout -adj 1 -rs 8;
434
435			checkBoxGrp -ncb 1 -l ""
436				-l1 "Force Export Translate Key" -v1 0
437				-cw2 110 180
438				nw4cSetForceExportKey_ForceExportTranslateKey;
439
440			checkBoxGrp -ncb 1 -l ""
441				-l1 "Force Export Rotate Key" -v1 0
442				-cw2 110 180
443				nw4cSetForceExportKey_ForceExportRotateKey;
444
445			checkBoxGrp -ncb 1 -l ""
446				-l1 "Force Export Scale Key" -v1 0
447				-cw2 110 180
448				nw4cSetForceExportKey_ForceExportScaleKey;
449
450			checkBoxGrp -ncb 1 -l ""
451				-l1 "Force Export Visibility Key" -v1 0
452				-cw2 110 180
453				nw4cSetForceExportKey_ForceExportVisibilityKey;
454
455			setParent ..; // columnLayout
456		setParent ..; // formLayout
457
458		//-----------------------------------------------------------------------------
459		// search
460		frameLayout -l "Search" -cll 0 -cl 0 -bv 1 -bs "etchedIn";
461			columnLayout -adj 1 -rs 8;
462
463			checkBoxGrp -l "Force Export Translate Key" -ncb 2 -cw3 210 60 60
464				-la2 "Off" "On"
465				-cc "nw4cSetForceExportKey_SearchCheckCB"
466				nw4cSetForceExportKey_SearchForceExportTranslateKey;
467
468			checkBoxGrp -l "Force Export Rotate Key" -ncb 2 -cw3 210 60 60
469				-la2 "Off" "On"
470				-cc "nw4cSetForceExportKey_SearchCheckCB"
471				nw4cSetForceExportKey_SearchForceExportRotateKey;
472
473			checkBoxGrp -l "Force Export Scale Key" -ncb 2 -cw3 210 60 60
474				-la2 "Off" "On"
475				-cc "nw4cSetForceExportKey_SearchCheckCB"
476				nw4cSetForceExportKey_SearchForceExportScaleKey;
477
478			checkBoxGrp -l "Force Export Visibility Key" -ncb 2 -cw3 210 60 60
479				-la2 "Off" "On"
480				-cc "nw4cSetForceExportKey_SearchCheckCB"
481				nw4cSetForceExportKey_SearchForceExportVisibilityKey;
482
483			rowColumnLayout -nc 2 -cw 1 220 -cw 2 150;
484				radioButtonGrp -l "" -nrb 2 -cw3 124 50 50
485					-rat 2 "both" 0
486					-rat 3 "both" 0
487					-la2 "and" "or" -sl 1
488					nw4cSetForceExportKey_SearchLogic;
489				button -l "Search"
490					-c "nw4cSetForceExportKey_DoSearch"
491					nw4cSetForceExportKey_SearchBtn;
492			setParent ..; // rowColumnLayout
493
494			setParent ..; // columnLayout
495		setParent ..; // formLayout
496
497		//-----------------------------------------------------------------------------
498		// close button
499		string $closeCmd = "deleteUI nw4cSetForceExportKey_Win";
500		string $form = `formLayout -nd 100`;
501			string $closeBtn       = `button -h 26 -l "Close" -c $closeCmd`;
502			formLayout -e
503				-af $closeBtn "top" 0
504				-af $closeBtn "left" 0
505				-af $closeBtn "bottom" 0
506				-af $closeBtn "right" 0
507				$form;
508		setParent ..; // formLayout
509
510		setParent ..; // columnLayout
511
512		setFocus $closeBtn;
513
514		//-----------------------------------------------------------------------------
515		// set selection change job
516		scriptJob -p nw4cSetForceExportKey_Win
517			-e "SelectionChanged" "nw4cSetForceExportKey_UpdateWindow";
518	}
519	if (`window -q -w nw4cSetForceExportKey_Win` < $wd)
520	{
521		window -e -w $wd nw4cSetForceExportKey_Win;
522	}
523	if (`window -q -h nw4cSetForceExportKey_Win` < $ht)
524	{
525		window -e -h $ht nw4cSetForceExportKey_Win;
526	}
527	//window -e -wh $wd $ht nw4cSetForceExportKey_Win;
528
529	//-----------------------------------------------------------------------------
530	// update window
531	nw4cSetForceExportKey_UpdateWindow;
532	nw4cSetForceExportKey_SearchCheckCB;
533
534	//-----------------------------------------------------------------------------
535	// show window
536	showWindow nw4cSetForceExportKey_Win;
537}
538