• Fernanda

Search your Maya scene with itemFilter() and lsThroughFilter() | Tech Art Bites

Updated: Oct 13, 2020

itemFilter and lsThroughFilter are used together to look for specific things in your scene.


As the name suggests, itemFilter() creates a filter object defined by the user. It has useful flags that allow you to create filters by name, object type, etc.

The lsThroughFilter() command returns a list of the objects that passed the filter.


Ex.1

# This filter identifies all spotlight objects
spotLights = cmds.itemFilter(byType='spotLight')
lightObjs = cmds.lsThroughFilter(spotLights) # Find the objects
doSomething(lightObjs) # Do something with these objects
 
# This filter identifies all transform objects
transforms = cmds.itemFilter(byType='transform') 
transfObjs = cmds.lsThroughFilter(transforms) # Find the objects
doSomething(transfObjs) # Do something with these objects

Ex.2

# Both lines do the same thing; create a filter that identifies transforms AND spotlights

# This one unites the previous itemFilters with the -union flag
unionFilter = cmds.itemFilter(union=(transforms, spotLights))

# This one creates a new filter from scratch
spotLightsAndTransforms = cmds.itemFilter(byType=('transform','spotLight'))

A note about '*':

'*' (asterisk) is a very useful character when searching things by string name!

Ex.3

aFilter = cmds.itemFilter(byName='a*')

Here we're asking for all objects that start with the letter 'a'. We don't care about what comes after the 'a'.


Ex.4

aFilter = cmds.itemFilter(byName='*a')

Here we're asking for all objects that end with the letter 'a'.


Ex.5

aFilter = cmds.itemFilter(byName='*a*')

And here we're asking for any object name that has at least one 'a'.

Real world example:

At some point I made an export tool that deleted all bindPoses in the scene to prepare the character FBX for the engine. When bindPoses are created in Maya, they're usually given a number after the name (bindPose1, bindPose46, etc.), hence why '*' is used.

Ex.6

nameFilter = cmds.itemFilter(byName = 'bindPose*')
bndPs = cmds.lsThroughFilter(nameFilter)
cmds.delete(bndPs)

Anyways, that's all for today! Thanks for reading :)

-Fernanda



97 views0 comments

Recent Posts

See All

Character Rigging | Yori | Part IX

I'd like to thank my friend and Character Artist, Miki Bishop, for letting me use this character for this series. https://mikibishop.com/ Jiggly Bits! Right Side of the body! Since we already covered

AutoRigger Showcase | Leg Module

Missed the Arm Module? Check it out! Here's the leg portion of the autorigger. Not much to talk about on this one since the arm and leg modules share a lot of methods. That's the great thing about div