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