Notifications
Clear all

[Closed] Inherit Parent Script problem

Hi, Guys,

I have been following cgtalk for quite a while and feel bad that my first post is asking for help rather than contributing but none the less i have problem with a script i have been working on.

I have been trying very hard and spending a lot of time to get mxs down but this problem has got me stumped. One part of my script simply turns off and on (per axis) the parent inherits, now i have had it about a quarter working (i no that make no sense) so i thought after much hair pulling i would post it here to see what you guys can come up with i sure its something simple as it all looks ok to me.

Right click save as

you can download the script here

I have commented the parts that i think were the problem(s) are…

Thanks in advance guys

Cheers
Dave

2 Replies

The first big problem was that you were wiping ‘ckboxarray’ every time a ‘rotAp’, ‘scaAp’ or ‘moveAp’ button was pressed so you weren’t able to check if the boxes were checked or not.

I fixed this however you’d notice that since you weren’t collecting the current state of the inheritance bit array it kept wiping all the other inheritance flags. I created a ‘getCurrInheritance’ function that collects the current inheritance state for a specific set of transforms #(#move, #rotate, #scale) – it’s at the top of the script.

Also I noticed that each of the apply buttons contained a lot of code duplication (which is bad) so I’ve also included a version with a rollout function that will handle all three apply buttons.

So below is the fixed version of your implementation:

function getCurrInheritance inputNode getTranforms:#(#move, #rotate, #scale) =
 	(
 	local allInheritance = (getInheritanceFlags inputNode);
 	local returnInheritance = #{}
 	if (findItem getTranforms #move) != 0 then
 		(
 		returnInheritance += (allInheritance - #{4..9});
 		);
 	if (findItem getTranforms #rotate) != 0 then
 		(
 		returnInheritance += (allInheritance - #{1..3, 7..9});
 		);				
 	if (findItem getTranforms #scale) != 0 then
 		(
 		returnInheritance += (allInheritance - #{1..6});
 		);    		    		    	
 
 	return returnInheritance;
 	);
 
 rollout aniTool "Animation Helper" width:160 height:616
 
 
 
 (
 	groupBox 		grbx1 		"Animation Controls" pos:[8,32] 	width:144 	height:104
 	button 	    	keyAll 		"Key All" pos:[16,104] 	width:56     height:24
 	button 	    	delKey 		"Del Key" pos:[88,104] 	width:56     height:24
 	dropDownList 	axisSel 	"Orientation" pos:[16,56]     width:128 	height:40
 	label 	    	lbl1 	    "		   Animation Helper" pos:[8,8] 	width:144     height:16
 	groupBox 		grbx2 		"Position" pos:[8,144] 	width:144 	height:112
 	button 	    	posX 		"X" pos:[16,184] 		width:24 	height:24
 	label 	    	lbl2 		"Key" pos:[16,168] 		width:24 	height:16
 	button 	    	posY 		"Y" pos:[48,184] 		width:24 	height:24
 	button 	    	posZ 		"Z" pos:[80,184] 		width:24 	height:24
 	button 	    	posAll 		"All" pos:[112,184] 	width:32 	height:24
 	label 	    	lbl3 		"Inherit" pos:[16,216] 	width:40 	height:16
 	checkbox 	    InPosX 		"X" pos:[16,232] 		width:32     height:16		    	checked:true
 	checkbox 	    InPosY 		"Y" pos:[48,232] 		width:32     height:16		    	checked:true
 	checkbox 	    InPosZ 		"Z" pos:[80,232] 		width:32     height:16		    	checked:true
 	checkbox 	    InposAll 	"All" pos:[112,232]     width:32 	height:16    			checked:true
 	groupBox 		grbx3 		"Rotation" pos:[8,264] 	width:144 	height:112
 	button 	    	rotX 		"X" pos:[16,304] 		width:24 	height:24
 	label 	    	lbl6 		"Key" pos:[16,288] 		width:24 	height:16
 	button 	    	rotY 		"Y" pos:[48,304] 		width:24 	height:24
 	button 	    	rotZ 		"Z" pos:[80,304] 		width:24 	height:24
 	button 	    	rotAll 		"All" pos:[112,304] 	width:32 	height:24
 	label 	    	lbl7 		"Inherit" pos:[16,336] 	width:40 	height:16
 	checkbox 	    InRotX 		"X" pos:[16,352] 		width:32     height:16		    	checked:true
 	checkbox 	    InRotY 		"Y" pos:[48,352] 		width:32     height:16		    	checked:true
 	checkbox 	    InRotZ 		"Z" pos:[80,352] 		width:32     height:16		    	checked:true
 	checkbox 	    InRotAll 	"All" pos:[112,352]     width:32 	height:16    			checked:true
 	groupBox 		grbx4 		"Scale" pos:[8,384] 	width:144 	height:112
 	label 	    	lbl8 		"Key" pos:[16,408] 		width:24 	height:16
 	button 	    	scaZ 		"Z" pos:[16,424] 		width:24 	height:24
 	button 	    	scaAll 		"All" pos:[112,424] 	width:32 	height:24
 	label 	    	lbl9 		"Inherit" pos:[16,456] 	width:40 	height:16
 	checkbox 	    InScaX 		"X" pos:[16,472] 		width:32     height:16		    	checked:true
 	checkbox 	    InScaY 		"Y" pos:[48,472] 		width:32     height:16		    	checked:true
 	checkbox 	    InScaZ 		"Z" pos:[80,472] 		width:32     height:16		    	checked:true
 	checkbox 	    InScaAll 	"All" pos:[112,472]     width:32 	height:16    			checked:true
 	groupBox 		grbx5 		"Set Inherits" pos:[7,504] 	width:144 	height:48
 	button 	    	moveAp 		"Move" pos:[16,520] 	width:32 	height:24
 	button 	    	rotAp 		"Rot" pos:[64,520] 		width:32 	height:24
 	button 	    	scaAp 		"Scale" pos:[112,520] 	width:32 	height:24
 			
 	
 
 
 		
 		on keyAll pressed do
 			
 			(
 				max set key all postion rotation and scale  
 			)
 
 		on delKey pressed do
 			
 			(
 				max set key clear 
 			)
 			
 			--Position Key Buttons
 		
 		on posX pressed do
 
 			(
 				max set key all x position
 			)
 		
 		on posY pressed do
 		
 			(
 				max set key all y position
 			)
 		
 		on posZ pressed do
 
 			(
 				max set key all z position
 			)
 
 		on posAlzl pressed do
 		
 			(
 				max set key all position
 			)
 		
 			--Rotation Key Buttons
 			
 		on rotX pressed do
 		
 			(
 				max set key all x rotation
 			)
 			
 		on rotY pressed do
 		
 			(
 				max set key all y rotation
 			)
 			
 		on rotZ pressed do
 		
 			(
 				max set key all z rotation
 			)
 		
 		on rotAll pressed do
 		
 			(
 				max set key all rotation
 			)
 			
 			--Scale Key Buttons
 					
 		on scaZ pressed do
 			
 			(
 				max set key all z scale
 			)
 		
 		on scaAll pressed do
 		
 			(
 				max set key all scale
 			)
 		
 --Inherit Checkboxes 			
 		
 		local ckboxarray = #(InPosX,InPosY,InPosZ,InRotX,InRotY,InRotZ,InScaX,InScaY,InScaZ)
 		
 		
 		on InPosAll changed thestate do 
 		
 			(
 				if InPosAll.checked == true then
 					
 		    		(for i = 1 to 3 do (ckboxarray[i].checked = true))
 				
 				else
 					
 		    		(for i = 1 to 3 do (ckboxarray[i].checked = false))
 			)
 			
 		on InRotAll changed thestate do
 		
 			(
 				if InRotAll.checked == true then
 				
 		    		(for i = 4 to 6 do (ckboxarray[i].checked = true))
 				
 				else
 				
 		    		(for i = 4 to 6 do (ckboxarray[i].checked = false))
 					
 			)
 			
 		on InScaAll changed thestate do
 		
 			(
 				if InScaAll.checked == true then
 				
 		    		(for i = 7 to 9 do (ckboxarray[i].checked = true))
 					
 				else
 				
 		    		(for i = 7 to 9 do (ckboxarray[i].checked = false))
 			
 			)
 			
 -- Applys Checkbox Settings
 		
 		on moveAp pressed do
 
 			(
 			
 			local moveInheritance = #{}
 			
 					for i = 1 to 3 do
 						(
 		    			if ckboxarray[i].checked == true do (moveInheritance += #{i})
 						)
 			
 				
 				for x in selection as array do
 					(
 		    		local inheritanceFlags = ((getCurrInheritance x getTranforms:#(#rotate, #scale)) + moveInheritance)
 		    		setinheritanceflags x (inheritanceFlags as bitarray)
 					)
 			)
 
 		on rotAp pressed do
 
 			(	
 			local rotateInheritance = #{}
 			
 					for i = 4 to 6 do
 						(
 		    			if ckboxarray[i].checked == true do (rotateInheritance += #{i})
 						)
 			
 				
 				for x in selection as array do
 					(
 		    		local inheritanceFlags = ((getCurrInheritance x getTranforms:#(#move, #scale)) + rotateInheritance)
 		    		setinheritanceflags x (inheritanceFlags as bitarray)
 					)
 			)
 
 		on scaAp pressed do
 	
 			(
 			local scaleInheritance = #{}
 			
 					for i = 7 to 9 do
 						(
 		    			if ckboxarray[i].checked == true do (scaleInheritance += #{i})
 						)
 			
 				
 				for x in selection as array do
 					(
 		    		local inheritanceFlags = ((getCurrInheritance x getTranforms:#(#move, #rotate)) + scaleInheritance)
 		    		setinheritanceflags x (inheritanceFlags as bitarray)
 					)
 
 			)	
 						
 			
 )
 
 createDialog aniTool 160 616

And below is with the improved function:

function getCurrInheritance inputNode getTranforms:#(#move, #rotate, #scale) =
 	(
 	local allInheritance = (getInheritanceFlags inputNode);
 	local returnInheritance = #{}
 	if (findItem getTranforms #move) != 0 then
 		(
 		returnInheritance += (allInheritance - #{4..9});
 		);
 	if (findItem getTranforms #rotate) != 0 then
 		(
 		returnInheritance += (allInheritance - #{1..3, 7..9});
 		);				
 	if (findItem getTranforms #scale) != 0 then
 		(
 		returnInheritance += (allInheritance - #{1..6});
 		);    		    		    	
 
 	return returnInheritance;
 	);
 
 rollout aniTool "Animation Helper" width:160 height:616
 
 
 
 (
 	groupBox 		grbx1 		"Animation Controls" pos:[8,32] 	width:144 	height:104
 	button 	    	keyAll 		"Key All" pos:[16,104] 	width:56     height:24
 	button 	    	delKey 		"Del Key" pos:[88,104] 	width:56     height:24
 	dropDownList 	axisSel 	"Orientation" pos:[16,56]     width:128 	height:40
 	label 	    	lbl1 	    "		   Animation Helper" pos:[8,8] 	width:144     height:16
 	groupBox 		grbx2 		"Position" pos:[8,144] 	width:144 	height:112
 	button 	    	posX 		"X" pos:[16,184] 		width:24 	height:24
 	label 	    	lbl2 		"Key" pos:[16,168] 		width:24 	height:16
 	button 	    	posY 		"Y" pos:[48,184] 		width:24 	height:24
 	button 	    	posZ 		"Z" pos:[80,184] 		width:24 	height:24
 	button 	    	posAll 		"All" pos:[112,184] 	width:32 	height:24
 	label 	    	lbl3 		"Inherit" pos:[16,216] 	width:40 	height:16
 	checkbox 	    InPosX 		"X" pos:[16,232] 		width:32     height:16		    	checked:true
 	checkbox 	    InPosY 		"Y" pos:[48,232] 		width:32     height:16		    	checked:true
 	checkbox 	    InPosZ 		"Z" pos:[80,232] 		width:32     height:16		    	checked:true
 	checkbox 	    InposAll 	"All" pos:[112,232]     width:32 	height:16    			checked:true
 	groupBox 		grbx3 		"Rotation" pos:[8,264] 	width:144 	height:112
 	button 	    	rotX 		"X" pos:[16,304] 		width:24 	height:24
 	label 	    	lbl6 		"Key" pos:[16,288] 		width:24 	height:16
 	button 	    	rotY 		"Y" pos:[48,304] 		width:24 	height:24
 	button 	    	rotZ 		"Z" pos:[80,304] 		width:24 	height:24
 	button 	    	rotAll 		"All" pos:[112,304] 	width:32 	height:24
 	label 	    	lbl7 		"Inherit" pos:[16,336] 	width:40 	height:16
 	checkbox 	    InRotX 		"X" pos:[16,352] 		width:32     height:16		    	checked:true
 	checkbox 	    InRotY 		"Y" pos:[48,352] 		width:32     height:16		    	checked:true
 	checkbox 	    InRotZ 		"Z" pos:[80,352] 		width:32     height:16		    	checked:true
 	checkbox 	    InRotAll 	"All" pos:[112,352]     width:32 	height:16    			checked:true
 	groupBox 		grbx4 		"Scale" pos:[8,384] 	width:144 	height:112
 	label 	    	lbl8 		"Key" pos:[16,408] 		width:24 	height:16
 	button 	    	scaZ 		"Z" pos:[16,424] 		width:24 	height:24
 	button 	    	scaAll 		"All" pos:[112,424] 	width:32 	height:24
 	label 	    	lbl9 		"Inherit" pos:[16,456] 	width:40 	height:16
 	checkbox 	    InScaX 		"X" pos:[16,472] 		width:32     height:16		    	checked:true
 	checkbox 	    InScaY 		"Y" pos:[48,472] 		width:32     height:16		    	checked:true
 	checkbox 	    InScaZ 		"Z" pos:[80,472] 		width:32     height:16		    	checked:true
 	checkbox 	    InScaAll 	"All" pos:[112,472]     width:32 	height:16    			checked:true
 	groupBox 		grbx5 		"Set Inherits" pos:[7,504] 	width:144 	height:48
 	button 	    	moveAp 		"Move" pos:[16,520] 	width:32 	height:24
 	button 	    	rotAp 		"Rot" pos:[64,520] 		width:32 	height:24
 	button 	    	scaAp 		"Scale" pos:[112,520] 	width:32 	height:24
 			
 	
 
 
 		
 		on keyAll pressed do
 			
 			(
 				max set key all postion rotation and scale  
 			)
 
 		on delKey pressed do
 			
 			(
 				max set key clear 
 			)
 			
 			--Position Key Buttons
 		
 		on posX pressed do
 
 			(
 				max set key all x position
 			)
 		
 		on posY pressed do
 		
 			(
 				max set key all y position
 			)
 		
 		on posZ pressed do
 
 			(
 				max set key all z position
 			)
 
 		on posAlzl pressed do
 		
 			(
 				max set key all position
 			)
 		
 			--Rotation Key Buttons
 			
 		on rotX pressed do
 		
 			(
 				max set key all x rotation
 			)
 			
 		on rotY pressed do
 		
 			(
 				max set key all y rotation
 			)
 			
 		on rotZ pressed do
 		
 			(
 				max set key all z rotation
 			)
 		
 		on rotAll pressed do
 		
 			(
 				max set key all rotation
 			)
 			
 			--Scale Key Buttons
 					
 		on scaZ pressed do
 			
 			(
 				max set key all z scale
 			)
 		
 		on scaAll pressed do
 		
 			(
 				max set key all scale
 			)
 		
 --Inherit Checkboxes 			
 		
 		local ckboxarray = #(InPosX,InPosY,InPosZ,InRotX,InRotY,InRotZ,InScaX,InScaY,InScaZ)
 		
 		
 		on InPosAll changed thestate do 
 		
 			(
 				if InPosAll.checked == true then
 					
 		    		(for i = 1 to 3 do (ckboxarray[i].checked = true))
 				
 				else
 					
 		    		(for i = 1 to 3 do (ckboxarray[i].checked = false))
 			)
 			
 		on InRotAll changed thestate do
 		
 			(
 				if InRotAll.checked == true then
 				
 		    		(for i = 4 to 6 do (ckboxarray[i].checked = true))
 				
 				else
 				
 		    		(for i = 4 to 6 do (ckboxarray[i].checked = false))
 					
 			)
 			
 		on InScaAll changed thestate do
 		
 			(
 				if InScaAll.checked == true then
 				
 		    		(for i = 7 to 9 do (ckboxarray[i].checked = true))
 					
 				else
 				
 		    		(for i = 7 to 9 do (ckboxarray[i].checked = false))
 			
 			)
 			
 -- Applys Checkbox Settings
 		function applyInheritance inputType =
 			(
 			local loopInts
 			local collectInheritance
 			local addInheritance = #{}
 			
 			if inputType == #move then
 				(
 				loopInts = #(1,3);
 				collectInheritance = #(#rotate, #scale);
 				);
 			if inputType == #rotate then
 				(
 				loopInts = #(4,6);
 				collectInheritance = #(#move, #scale);
 				);
 			if inputType == #scale then
 				(
 				loopInts = #(7,9);
 				collectInheritance = #(#move, #rotate);
 				);
 			
 			
 	
 			for i = loopInts[1] to loopInts[2] do
 				(
 		    	if ckboxarray[i].checked == true do (addInheritance += #{i})
 				)
 			
 			for x in selection as array do
 				(
 		    	local inheritanceFlags = ((getCurrInheritance x getTranforms:collectInheritance) + addInheritance)
 				setinheritanceflags x (inheritanceFlags as bitarray)
 		    	)	    	
 			
 			);	
 	
 		on moveAp pressed do applyInheritance #move;
 
 		on rotAp pressed do	applyInheritance #rotate;
 
 		on scaAp pressed do	applyInheritance #scale;	
 						
 			
 )
 
 createDialog aniTool 160 616

As I side note I see your from Australia, where abouts are you?

wow thanks, and i thought it would be a simple fix! well you never no… So much more to learn… and im from good ol Sydney

Cheers

and thanks heaps again…