Home Technical Talk

3ds max Transform/scale/rotate gizmo issue

polycounter lvl 9
Offline / Send Message
samnwck polycounter lvl 9
So this is an issue I've been trying to fix. Has anyone ever run into a similar issue.

tVxb0vT.jpg

Thanks.

Replies

  • Synaesthesia
    Options
    Offline / Send Message
    Synaesthesia polycounter
    You're probably working in local coordinates instead of world. Switch those around and see if that alleviates your issue. If that doesn't fix it, Tools -> Reset xForm
  • samnwck
    Options
    Offline / Send Message
    samnwck polycounter lvl 9
    Man, I spent so long trying to figure this out. Thank you so much. Setting it to world fixed my problem.
  • Mark Dygert
    Options
    Offline / Send Message
    If you find yourself switching back and forth between local and world you might want to take a second to set up a "double tap shortcut". I went into a bit more detail HERE, but basically you tap a key once and it will do something like select the scale tool. Tap twice and it will cycle the gizmo to local, do it again and it goes to world, then view and then back to local.

    Here is the code I use for replacing the Move Rotate Scale shortcuts.
    macroscript ToggleMove
    Category:" MyTools"
    toolTip:"KBS ToggleMove (Q)"
    (--MOVE
    	max move--switch to move mode first
    	global lastClickedMove-- define lastClickedMove, but we don't need to assign it to anything. 
    
    	fn RefCoordCycle_LV = (--Cycles the RefCoordsys between Local & View
    		if getRefCoordSys() == #local then (
    			Print "View"
    			toolmode.coordsys #view
    		)
    		else (
    			print "Local"
    			toolmode.coordsys #local
    		) 
    	)
    	
    	fn RefCoordCycle_LVS = (--Cycles the RefCoordsys between Local, View &Screen
    		if getRefCoordSys() == #screen then (
    			Print "View"
    			toolmode.coordsys #view
    		)
    		else (
    			if getRefCoordSys() == #hybrid then (
    				print "Local"
    				toolmode.coordsys #local
    			) 
    			else (
    				print "Screen"
    				toolmode.coordsys #screen 
    			)
    		)
    	)
    	
    	fn checklastClickedMove = (
    		local thisClickedMove = timeStamp()
    		if lastClickedMove != undefined then (
    			if (thisClickedMove - lastClickedMove) < 500 do (--adjust this value to shorten or lengthen wait time
    				max move
    				RefCoordCycle_LV()--Switch this to _LVS to cycle between Local, View & Screen
    			)
    			lastClickedMove = thisClickedMove
    		)
    		else (--switch gizmo to move, ignore pivot setting, update "lastClickedMove"
    			max move 
    			lastClickedMove = timeStamp()
    		)
    		OK		
    	)
    
    	checklastClickedMove()
    )
    
    macroscript ToggleRot
    Category:" MyTools"
    toolTip:"KBS ToggleRot (W)"
    (--ROTATION 
    	max rotate --switch to rotate mode first
    	global lastClickedRot-- define lastClickedRot, but we don't need to assign it to anything. 
    	
    	fn RefCoordCycle_LV = (--Cycles the RefCoordsys between Local & View
    		if getRefCoordSys() == #local then (
    			print "View"
    			toolmode.coordsys #view
    		)
    		else (
    			print "Local"
    			toolmode.coordsys #local
    		) 
    	)
    	
    	fn RefCoordCycle_LVS = (--Cycles the RefCoordsys between Local, View &Screen
    		if getRefCoordSys() == #screen then (
    			print "View"
    			toolmode.coordsys #view
    		)
    		else (
    			if getRefCoordSys() == #hybrid then (
    				print "Local"
    				toolmode.coordsys #local
    			) 
    			else (
    				print "Screen"
    				toolmode.coordsys #screen 
    			)
    		)
    	)
    	
    	fn checklastClickedRot = 	(
    		local thisClickedRot = timeStamp()
    		if lastClickedRot != undefined then (
    			if (thisClickedRot - lastClickedRot) < 500 do (--adjust this value to shorten or lengthen wait time
    				max rotate
    				RefCoordCycle_LV()--Switch this to _LVS to cycle between Local, View & Screen
    			)
    			lastClickedRot = thisClickedRot
    		)
    		else (--switch gizmo to Rot, ignore pivot setting, update "lastClickedRot"
    			max rotate
    			lastClickedRot = timeStamp()
    		)
    		OK		
    	)
    
    	checklastClickedRot()
    )
    
    macroscript ToggleScale
    Category:" MyTools"
    toolTip:"KBS ToggleScale (E)"
    (--SCALE
    	max scale--switch to scale mode first
    	-- define lastClickedScale, but we don't need to assign it to anything. 
    	global lastClickedScale
    	
    	fn RefCoordCycle_LV = (--Cycles the RefCoordsys between Local & View
    		if getRefCoordSys() == #local then (
    			print "View"
    			toolmode.coordsys #view
    		)
    		else (
    			Print "Local"
    			toolmode.coordsys #local
    		) 
    	)
    	
    	fn RefCoordCycle_LVS = (--Cycles the RefCoordsys between Local, View &Screen
    		if getRefCoordSys() == #screen then (
    			print "View"
    			toolmode.coordsys #view
    		)
    		else (
    			if getRefCoordSys() == #hybrid then (
    				Print "Local"
    				toolmode.coordsys #local
    			) 
    			else (
    				Print "Screen"
    				toolmode.coordsys #screen 
    			)
    		)
    	)
    	
    	fn checklastClickedScale = (
    		local thisClickedScale = timeStamp()
    		if lastClickedScale != undefined then (
    			if (thisClickedScale - lastClickedScale) < 500 do (--adjust this value to shorten or lengthen wait time
    				max scale
    				RefCoordCycle_LV()--Switch this to _LVS to cycle between Local, View & Screen
    				
    			)
    			lastClickedScale = thisClickedScale
    		)
    		else (--switch gizmo to Scale, ignore pivot setting, update "lastClickedScale"
    			max Scale 
    			lastClickedScale = timeStamp()
    		)
    		OK		
    	)
    
    	checklastClickedScale()
    )
    
    You can use double tap shortcuts for a lot of things and really cut down on the number of crazy combinations your hands have to twist into. Tap-Tap instead of, Ctrl-Shift-Frick my hand just cramped up... heh.

    You run the script once and then it shows up in the Customize UI menu and you can bind it to a key.
  • Revel
    Options
    Offline / Send Message
    Revel interpolator
    [Edit] Whoops, manage to make this working :)

    Hey Mark, isit possible to create those multi clicks function become a global functions? so it can be reusable, I mean like for example;
    fn multiClicks singleCmd doubleCmd =
    (
        [...]
    )
    
    ... the body basically the same with what you got, but instead explicitly write the move command (or rotate or etc.) we replace it with singleCmd/doubleCmd as an argument, so when we want to call the function we will say it like;
    multiClicks (print "one") (print "two")
    
    ... from what I understand, when we click once it will print "one" and click twice it will print "two". But instead currently no matter what it'll print "one" "two" at the same time.
    Any idea?
Sign In or Register to comment.