PDA

View Full Version : Display Layer Script?


naik
07-10-2012, 02:22 PM
Hey guys,

right now i'm working with huge scenes and references
and all of them got dozens of display layes.

Is there any hack or script for saving the display layers?
In other words, i would like to save the combination of my 150 Display Layers.
( Which are on and off )

Really appreciate your help guys.

cheers

naik


P.s Sorry for the double post ;-/

rgkovach123
07-10-2012, 03:44 PM
do you mean that when you open a maya file containing references, the display layers don't remember what state they were in last (hidden, template, reference, etc.)?

naik
07-10-2012, 04:09 PM
No not that...

Imagine you have maybe 100 Display Layers.
And now you can configure your object for different modifications with all
the Display Layers. I want something like in Photoshop which is called Layer Combs.
In order to remember which of the 100 Display Layers are on or off for certain configurations
of the object. I hope you get what i mean.

Display Layer V1 = DL 1-10 = on
DL 11-14 = off
DL 15-35 = off

Display Layer V2 = DL 1-5 = off
DL 6-15 = on

and so on...

I hope this example was clear.

cheers mate

EightBit
07-10-2012, 05:12 PM
Try this (python - be careful of indentation - its often messed up by the forum software): print 'Grab Layer Visibility'
dispLayerStates = [] # Create array to store layer states
dispLayers = cmds.ls(type = 'displayLayer')# Create array of display layers
for lyr in dispLayers:
#print lyr
# Append lyr,lyrState:
dispLayerStates.append( [lyr,cmds.getAttr(lyr+'.visibility')] )

# Restore layer visibility
for lyr in dispLayerStates:
print lyr[0]
if lyr[0] != 'defaultLayer':
cmds.setAttr(lyr[0]+'.visibility',lyr[1])If you have a layer named 'defaultLayer', then you need to remove the condition - if lyr[0] != 'defaultLayer':
I don't think that was necessary prior to Maya 2013.
________
If you need to do this frequently, you might consider this approach:
Make a python file (ie myLyrs.py) with something like this as its content: animalLyrs = [
'lion_lyr',
'mongoose_lyr',
'monkey_lyr'
]
veggieLyrs = [
'carrot_lyr',
'lettuce_lyr',
'tomato_lyr'
]

def allLayersOff ():
[cmds.setAttr(layr+'.visibility',0) for layr in cmds.ls(type = 'displayLayer')]

def setAnimalLyrs ():
allLayersOff()
[cmds.setAttr(layr+'.visibility',1) for layr in animalLyrs]

def setVeggieLyrs ():
allLayersOff()
[cmds.setAttr(layr+'.visibility',1) for layr in veggieLyrs]
Then in a python tab of the script editor use this:

import myLyrs as mL
reload (mL)

mL.setVeggieLyrs()
mL.setAnimalLyrs()

For batch rendering, I use a MEL-based approach, but it has a couple extra steps...

naik
07-10-2012, 06:06 PM
Your are a killer Mitch!

Thanks a bunch for that buddy.
It's a shame that i'm such a noob with python.

As you have expected, i get the indentation error all the way.
I have tried several indentation combination but still the error occurs

"# Error: IndentationError: unexpected indent # "

best regards and thanks a lot for your quick help.

EightBit
07-10-2012, 06:18 PM
Python is an excellent language, but it is absolutely strict about indentation.
Basically, each time you have a colon :, a new level is defined and everything on that level needs to be indented. Looking at my code, it would have tabs like this:
No tabs:
veggieLyrs = [
'carrot_lyr',
'lettuce_lyr',
'tomato_lyr'
]

def setAnimalLyrs ():
TABallLayersOff()
TAB[cmds.setAttr(layr+'.visibility',1) for layr in animalLyrs]

print 'Grab Layer Visibility'
dispLayerStates = [] # Create array to store layer states
for lyr in dispLayers:
TAB#print lyr
TABAppend lyr,lyrState:
TABTABdispLayerStates.append( [lyr,cmds.getAttr(lyr+'.visibility')] )

naik
07-10-2012, 09:26 PM
Thanks again for droppin in Mitch.
This was a perfect explanation.

But still i get this error

# Error: SyntaxError: invalid syntax #

Although i have deleted your # comments.

Am i missing something?

naik
07-10-2012, 09:32 PM
sorry mate, my fault

this is the error when i execute the grab part of your script

# Error: NameError: name 'cmds' is not defined #

naik
07-10-2012, 09:47 PM
okay, i think i have fixed it

import maya.cmds as cmds

i have used the import to bring in the cmds commands.
Now itg works like it should i think.

Thanks for this stuff mate, really appreciate it.
Now i could make different version of the script for different display layers combination right?
Then i would rename it like "GrabLayer_config_v01" and execute it
to bring back my config_v01 display layers.
Gotta test it this way, but i think it should work.
It would be cool to extend your script and maybe create a little window
where you can select the different versions and execute them by clicking the right
version.

best regards

naik

EightBit
07-10-2012, 11:01 PM
add
import maya.cmds as cmds
to your userSetup.py file, then you don't have to use it in the script editor. If you don't have a userSetup.py, just make one and put it in your script dir.

As for multiple files, you don't need to do that. Attached is an easy prototype script to follow. Put it in your script path and use this code in your script editor:
import myLayers as mL
reload (mL)

mL.setLayer(mL.animalLyrs)
mL.setLayer(mL.veggieLyrs)
mL.setLayer(mL.mineralLyrs)
--------------
To set any of the layers, just hilite that line of code in the SE and hit keypad/enter. After editing the the script, reload it by hiliting the 'reload' line and hit keypad/enter.


It would be cool to extend your script and maybe create a little window
where you can select the different versions and execute them by clicking the right
version.
You're on your own on that one ;)

EightBit
07-10-2012, 11:04 PM
If you want to test the script in the previous post, you can create the layers like this (after importing the script in the SE):
Add tabs as need be...
newLayers = [mL.animalLyrs,mL.veggieLyrs,mL.mineralLyrs]
for lyrSet in newLayers:
TABprint lyrSet
TABfor lyr in lyrSet:
TABTABcmds.createDisplayLayer (name = lyr)

naik
07-11-2012, 11:39 AM
Thank you very much buddy for the help.
Gotta test the modifications and get back with my results.

Really appreciate your support Mitch.

Keep it up!

CGTalk Moderation
07-11-2012, 11:39 AM
This thread has been automatically closed as it remained inactive for 12 months. If you wish to continue the discussion, please create a new thread in the appropriate forum.