Community
3ds Max Forum
Welcome to Autodesk’s 3ds Max Forums. Share your knowledge, ask questions, and explore popular 3ds Max topics.
cancel
Showing results for 
Show  only  | Search instead for 
Did you mean: 

shortcut to navigate through the modifier stack (3ds max)

33 REPLIES 33
Reply
Message 1 of 34
Anonymous
5843 Views, 33 Replies

shortcut to navigate through the modifier stack (3ds max)

Hi all 
my question may be a little silly, but failed to find an answer, on the internet or the 3ds max manual. 

what I want is to assign a keyboard shortcut to navigate between the different levels in the modifier stack, I want to clarify that I do not mean to navigate between subobjects levels (1,2,3,4,5) but to navigate between different modifiers.

I have looked at the customize shortcut list within 3ds max, but I fail to know which or if there is one for this.

I really apreciate the help (I attach an image to clarify my question)

33 REPLIES 33
Message 21 of 34
e0435276
in reply to: paulneale

Hi Paul and sorry for the late reply, as I've been out. That's also an extremely useful feature your tool brings and absolutely a royal version of what Mat's tool does! I appreciate you took the time to write it and for offering me the chance to look into your web page, too.

Regarding my issue, I have probably misinterpret my exact request, since I don’t necessarily want to end up to a particular modifier, when I return to some object, but being able to navigate up/down in the modifier stack without problems. To be more specific, let's say I have 50 objects that they have 3 modifiers each. And let's further say that the object 3 has the 2nd modifier instanced with object 44. By using the hot keys for next/previous modifier, if i'm on the 1st modifier of object 3 and I want to go up and select the 2nd, then all of a sudden the object 44 is selected at the level of the 2nd modifier, which is instanced with the 2nd of object 3 (as if the next modifier after the 1st modifier of object 3 is considered the 2nd modifier of object 44. I then want to be able, whatever modifier is active when selecting one object, to go up/down passing over an instanced modifier, without this confusion.

You said earlier that Mat managed to achieve some part of what you did in a more “ugly” manner, passing by all the modifiers until he finds the one defined as auto-selected. With his tool this is done properly for every object, even for those with the instanced modifiers. I was wondering if two commands for moving to the next/previous modifier, based probably on Mat’s method, would overcome the problem I have with the standard hotkeys. So to say, they will be able to distinguish that the next/previous modifier I’m looking for is this of the same object.

And an irrelevant question, please. In your demonstration I saw you add modifiers typing their names in a text field. Is this a feature by default or some plug-in? (probably one of your tools?…). Sorry for the long post, but I believe I can’t express myself concisely in English.

Thanks again, btw,
Dimitris
Message 22 of 34
paulneale
in reply to: Anonymous

I don't believe there is a solution to that. I'm using the up down solution to get around other issues.
Paul Neale

http://paulneale.com


Paul Neale




EESignature

Message 23 of 34
e0435276
in reply to: paulneale

Ok Paul! Thank you!
Message 24 of 34
Anonymous
in reply to: e0435276

Hi, I used to have the same issue with instanced modifiers. Finally I found some solution. So far is working only with single selected object. I'll add multi-selection later.

[code]

macroScript modifier_stack_jump
category:"Pixamoon"
toolTip:"Jump to lower Modifier"
(    
    if getCommandPanelTaskMode() == #modify then
    (
        if selection.count == 1 then
        (
            selectedObj= $
                a = modPanel.getCurrentObject()
                if a != selectedObj.baseobject then
                (
                    b = modPanel.getModifierIndex selectedObj a
                    try(modPanel.setCurrentObject selectedObj.modifiers[b+1])catch(modPanel.setCurrentObject selectedObj)
                )
                else
                (
                    deselect
                    select selectedObj
                )
            )
        else
            print "Select only 1 object"
    )
else setCommandPanelTaskMode mode:#modify
)

[/code]

 

I add also automatic jump to Modify Tab in Command Panel if other Tab is curently selected.

Hope it work for you as well.

Przemek

Message 25 of 34
e0435276
in reply to: Anonymous

Great, thanks a lot pixamoon for the contribution! I'm looking forward to put it at work with the first chance.
Message 26 of 34
Anonymous
in reply to: e0435276

Ah, this one works only if there is one modifier instanced -> the lowest one. If there is more in the middle it do the same issue 😞 sorry

Message 27 of 34
Anonymous
in reply to: Anonymous

ok, it should works now.

 

[code]

 

macroScript modifier_stack_jump
category:"Pixamoon"
toolTip:"Jump to lower Modifier"

(    
    if getCommandPanelTaskMode() == #modify then
    (
        if selection.count == 1 then
        (
            selectedObj= $
                a = modPanel.getCurrentObject()
                if a != selectedObj.baseobject then
                (
                    b = modPanel.getModifierIndex selectedObj a
                    try(modPanel.setCurrentObject selectedObj.modifiers[b+1] node:selectedObj)catch(modPanel.setCurrentObject selectedObj node:selectedObj)
                )
                else
                (
                    deselect
                    select selectedObj
                )
                )
        else
            print "Select only 1 object"
    )
else setCommandPanelTaskMode mode:#modify
)

 

[/code]

 

Threre is still one issue: when 2 or more instance modifiers are on the same object/node. Than is jumping to higher one on the stack. I'll work on it later, but I think can be very rare situation. What you think ?

Przemek

Message 28 of 34
Steve_Curley
in reply to: Anonymous

This is not a PHPBB board - [code] tags do not work. Click the Insert Code button (just left of the Smiley) and paste your code into the resulting dialog. Or use the HTML entry tab and use pre ... /pre tags (in angle brackets) instead.

Max 2016 (SP1/EXT1)
Win7Pro x64 (SP1). i5-3570K @ 4.4GHz, 8Gb Ram, DX11.
nVidia GTX760 (2GB) (Driver 430.86).

Message 29 of 34
e0435276
in reply to: Anonymous

Congratulations for your effort already! If you ask my review, I will try it soon and I'll post the results. If you ask about the frequency I've come across multiple instantiated modifiers, then my experience is rather little in 3D modeling. For example, the last time I used them (and I then met this problem), it was not part of some sort of modeling methodology I was following. It just seemed that it was more convenient at first, but I finally ended making them unique again for other reasons.
Message 30 of 34
Anonymous
in reply to: e0435276

Hi again. I have a lot of modeling recently and had this annoying issue so many times. (when instanced Turbosmooth UVMap etc).

 

This one should fix also the issue with instanced modifiers on the same object (for example: Turbosmoth 1 than Noise/Edit Poly and instanced same Turbosmoth)

+ fixed problem with jumping to othe node/object

+ looping to top modifier when it gets to the bottom (base object) - so there can be just 1 shortcut and it loops over

 

macroScript modifier_stack_jump
category:"Pixamoon"
toolTip:"Jump to lower Modifier"

(    
    global pxModIndex
    global pxObj
    
    if getCommandPanelTaskMode() == #modify then
    (
        if selection.count == 1 then
        (
            selectedObj= $
                a = modPanel.getCurrentObject()
                if a != selectedObj.baseobject then
                (
                    b = modPanel.getModifierIndex selectedObj a
                    if pxObj == selectedObj then pxModIndex += 1 else
                        (
                        pxObj = selectedObj
                        pxModIndex = b + 1
                        )
                    try(modPanel.setCurrentObject selectedObj.modifiers[pxModIndex] node:selectedObj)catch(modPanel.setCurrentObject selectedObj node:selectedObj)
                )
                else
                (
                    deselect
                    pxObj = undefined
                    select selectedObj
                )
                )
        else
            print "Select only 1 object"
    )
else setCommandPanelTaskMode mode:#modify
)

 

Let me know it works for you.

Message 31 of 34
e0435276
in reply to: Anonymous

I apologize for the late review.. I finally ran the script and it surely does the job!

 

I only noticed a minor misbehavior or rather not even this. Just a tiny confusion in terms of usability. I'm not sure, though, that I've followed its pattern. And maybe I would, if i had a careful look at the script, but anyway, I think I noticed the following cases. (Let's call it "jump into" a modifier, when the modifier has been selected by applying the script and "mouse-select" a modifier, when it is selected by clicking with the mouse (or maybe the other shortcuts).)

 

Case 1.One object involved: It seems that the last modifier we jumped into is kept in memory. If we then mouse-select another modifier and then jump into the next, not the one lower than the mouse-selected modifier will be highlighted, but the one lower than the last we jumped into. 

E.g. modifier stack from base to higher level: 

Box -> (a)Edit Mesh -> (b)Edit Poly -> (c)Smooth -> (d)UVW 

Actions: 

jump, jump (we end in (b)),

mouse-select (c), jump (we end in (a), not in (b))

 

Case 2.Two or more objects involved: If we select an object and jump into a mod. We then select another object, we don’t jump there (ha, it gets funny:)), we select again the first object and mouse-select any random modifier there and we jump. The result would be: not the one lower than the randomly mouse-selected mod. is selected, but that lower than the one we jumped into before.

E.g.  Object A: modifier stack from base to higher level: 

Box -> (a) -> (b) -> (c) -> (d)

Object B: modifier stack from base to higher level: 

Sphere -> (a) -> (b) -> (c)

Actions:

Select Obj A, 

jump, jump (we end in (b)),

select Obj B,

(we may mouse-select a modifier but no jumping there),

select Obj A,

mouse-select (c), jump (we end in (a), not in (b))

 

Case 3.With two or more objects involved. However, when we have an object selected and we have jumped into a mod. there. If we then select a new object and we jump into a mod. and finally turn back to the originally selected object, the memory thing is somehow reset (or actually replaced by the latest jump). Anymore, once activated, the jumping script will either start from the top mod jumping downwards or will start from a mod. we have mouse-selected and continue downwards from there. If we further mouse-select another mod. and try to jump, we end in the 1st case.

 

I am sorry for my English and the resulting confusing/weird/funny way I tried to explain the situation. Also for giving such a huge description for a small inconvenience.

Message 32 of 34
Anonymous
in reply to: e0435276

Ha, thanks for testing and reporting! You're totaly right.

 

Yes it keeps the object and modifier position in memory. (the reason was to not jump to original/main instanced modifier on other object).

 

I see misbehaviors you wrote about them. I'll try to fix them soon.

Thanks !

Message 33 of 34
Anonymous
in reply to: Anonymous

Hello again, I found a bit of time to play with it and so far I fixed some issues. (there was one more problem with reference divider but it should be fixed too. 🙂

 

macroScript modifier_stack_jump
category:"Pixamoon" 
toolTip:"Jump to lower Modifier"

-- modifier stack jump v0.37

(
	global pxModIndex
	global pxObj
	global pxMod
	
	if getCommandPanelTaskMode() == #modify then
	(
		if selection.count == 1 then 
		( 
			selectedObj= $
				a = modPanel.getCurrentObject()
				if a != selectedObj.baseobject then 
				(
					try(b = modPanel.getModifierIndex selectedObj a)catch()
					if pxObj == selectedObj and pxMod == a then 
						pxModIndex += 1 
					else 
						(
						pxObj = selectedObj
						pxModIndex = b + 1
						)
					try(modPanel.setCurrentObject selectedObj.modifiers[pxModIndex] node:selectedObj)catch(modPanel.setCurrentObject selectedObj node:selectedObj)
				)
				else
				(
					pxModIndex = 1
					try(modPanel.setCurrentObject selectedObj.modifiers[1] node:selectedObj)catch()
				)
				pxMod = modPanel.getCurrentObject()
		)
		else 
			print "This shortcut works only 1 selected object"
	)
else setCommandPanelTaskMode mode:#modify
)

There is still problem with instanced modifiers in one object. (only if you select another of them by mouse) But this one I will try to fix when I find more time.

 

Let me know how does it work.

Message 34 of 34
Anonymous
in reply to: Anonymous

Can't find what you're looking for? Ask the community or share your knowledge.

Post to forums  

Autodesk Design & Make Report