MotionBuilder Python FBDelete

I’ve been asked a few times now on how to delete objects, files, takes, layers, etc. from MotionBuilder’s Scenes. I thought I would take a few moments to go through the basics of FBDelete(). All examples below share pretty much the exact same structure with there scripts, we create an empty list, we set up condition and if those condition are met than we add to our list, once done we take that list and we perform FBDelete() on it. This is a great little exercise to get familiar with lists. Each example I have provided will demonstrate performing the script through “user defined name”, “user selected”, “all occurrences within scene” and for some “by file extension”.
I created an index as to make it easier for people to jump to sections.
FBDelete() Folders
'''
================================================================
FBDelete Folder By Name
================================================================
'''
##Define The Folder We Are Looking For - Change This Variable To Match Your Desired Folder You Wish To Delete
lFolderDel = "Materials Folder"
##Go Through Every Folder Within The Scene
for item in fb.FBSystem().Scene.Folders:
##If The Folder Name Is The Same As The Folder We Are Looking For
if item.Name == lFolderDel:
##Delte Folder
item.FBDelete()
##Skip All Other Folders
else:
pass
##Clean Up
del lFolderDel
FBDelete() Layers
'''
================================================================
FBDelete Layers By Name, Selected And All Layers Within The Scene
================================================================
'''
##Create 10 Layers To Help Testing
for i in range (1,10):
##Create The Layer
fb.FBSystem().CurrentTake.CreateNewLayer()
'''
Delete All Layers
'''
##Get A Layer Count
lCount = fb.FBSystem().CurrentTake.GetLayerCount()
##Create An Empty Layers List
lLayerLst = []
##We Want To Omit The Base Layer Which Is Why Our Range Starts At 1 (Base Layer == 0)
for layer in range(1 ,lCount):
lLayerLst.extend([fb.FBSystem().CurrentTake.GetLayer(layer)])
##Delete All Layer That Are In The Layers List
for layer in lLayerLst:
layer.FBDelete()
##Clean Up
del lCount, lLayerLst
'''
Delete Layer By Name
'''
##Define The Layer We Are Looking For - Change This Variable To Match Your Desired Layer You Wish To Delete
lDelLayerName = "AnimLayer8"
##Delte Layer By Name
fb.FBSystem().CurrentTake.GetLayerByName(lDelLayerName).FBDelete()
##Clean Up
del lDelLayerName
'''
Delete Selected Layers
'''
lCount = fb.FBSystem().CurrentTake.GetLayerCount()
##Create An Empty Layers List
lLayerLst = []
##Check All Layers On Current Take And If They Are Selected Than Store The Layer's Name To The Layers List
for layer in range(lCount):
if fb.FBSystem().CurrentTake.GetLayer(layer).Selected == True:
lLayerLst.extend([fb.FBSystem().CurrentTake.GetLayer(layer).Name])
else: pass
##Delete Layer That Are Found in Layer List
for layer in lLayerLst:
fb.FBSystem().CurrentTake.GetLayerByName(layer).FBDelete()
##Clean Up
del lCount, lLayerLst
FBDelete() Cameras
'''
================================================================
FBDelete Camera By Name, Selected And All Cameras Within The Scene
================================================================
'''
'''
Delete All Cameras That Are Not Orthographic
'''
##Create A Variable To Protect Our "Producer" Cameras Which Are Used In Orthographic Views
lCamOrth = "Producer"
##Create An Empty Camera List
lCamLst = []
##Go Throuh All Cameras Within The Scene
for camera in fb.FBSystem().Scene.Cameras:
##If "Producer" Is Found Within The Name Then Skip The Camera
if lCamOrth in camera.Name: pass
##Store Camera To Camera List
else: lCamLst.extend([camera])
##Delete Cameras Within The Camera List
for camera in lCamLst:
camera.FBDelete()
##Clean Up
del lCamOrth, lCamLst
'''
Delete All Selected Cameras That Are Not Orthographic
'''
##Create A Variable To Protect Our "Producer" Cameras Which Are Used In Orthographic Views
lCamOrth = "Producer"
##Create An Empty Camera List
lCamLst = []
##Go Throuh All Cameras Within The Scene
for camera in fb.FBSystem().Scene.Cameras:
##Selected Cameras
if camera.Selected == True:
##If "Producer" Is Found Within The Name Then Skip The Camera
if lCamOrth in camera.Name: pass ##!!This Condition Can Be Removed If The User Does Not Wish To Protect The Orthographic Views
##Store Camera To Camera List
else: lCamLst.extend([camera])
##Skip Any Un Selected Cameras
else: pass
##Delete Cameras Within The Camera List
for camera in lCamLst:
camera.FBDelete()
##Clean Up
del lCamOrth, lCamLst
'''
Delete Camera By Name
'''
##Define The CAmera We Are Looking For - Change This Variable To Match The Desired Camera You Wish To Delete
lDelCameName = "Camera 2"
##Go Through Every Camera Within The Scene
for camera in fb.FBSystem().Scene.Cameras:
##If A Camera's Name Matched Our Desired Camera Name
if camera.Name == lDelCameName:
##Delte Camera
camera.FBDelete()
##Skip All Other Cameras
else: pass
##Clean Up
del lDelCameName
FBDelete() Groups
'''
================================================================
FBDelete Groups By Name, Selected And All Groups Within The Scene
================================================================
'''
##Create 10 Groups
for i in range(1, 10):
lGroupName = "Group " + str(i)
fb.FBGroup( lGroupName )
##Clean Up
del lGroupName
'''
Delete All Groups
'''
##Create An Empty Group List
lGroupLst = []
##Go Through All Groups Within Our Scene And Add Them To Oue Group List
for group in fb.FBSystem().Scene.Groups:
lGroupLst.extend ([group])
##Delete All Groups That Are In Our Group List
for group in lGroupLst:
group.FBDelete()
##Clean Up
del lGroupLst
'''
Delete Selected Groups
'''
##Create An Empty Group List
lGroupLst = []
##Go Through All Groups Within Our Scene And If They Are Seleced Then Add Them To Oue Group List
for group in fb.FBSystem().Scene.Groups:
if group.Selected == True:
lGroupLst.extend ([group])
else: pass
##Delete All Groups That Are In Our Group List
for group in lGroupLst:
group.FBDelete()
##Clean Up
del lGroupLst
'''
Delete Group By Name
'''
##Define The Group We Are Looking For - Change This Variable To Match Your Desired Group You Wish To Delete
lDelGroupName = "Group 2"
##Go Through All Groups Within Our Scene And If They Are Seleced Then Add Them To Oue Group List
for group in fb.FBSystem().Scene.Groups:
if group.Name == lDelGroupName:
group.FBDelete()
else: pass
##Clean Up
del lDelGroupName
FBDelete() Sets
'''
================================================================
FBDelete Sets By Name, Selected And All Sets Within The Scene
================================================================
'''
for i in range(1, 10):
setname = "Set " + str(i)
fb.FBSet( setname )
'''
Delete All Sets
'''
##Create An Empty Group List
lSetLst = []
##Go Through All Sets Within Our Scene And Add Them To Oue Group List
for item in fb.FBSystem().Scene.Sets:
lSetLst.extend ([item])
##Delete All Sets That Are In Our Group List
for item in lSetLst:
item.FBDelete()
##Clean Up
del lSetLst
'''
Delete Selected Sets
'''
##Create An Empty Group List
lSetLst = []
##Go Through All Sets Within Our Scene And If They Are Seleced Then Add Them To Oue Group List
for item in fb.FBSystem().Scene.Sets:
if item.Selected == True:
lSetLst.extend ([item])
else: pass
##Delete All Sets That Are In Our Group List
for item in lSetLst:
item.FBDelete()
##Clean Up
del lSetLst
'''
Delete Set By Name
'''
##Define The Group We Are Looking For - Change This Variable To Match Your Desired Group You Wish To Delete
lDelSetName = "Set 6"
##Go Through All Sets Within Our Scene And If They Are Seleced Then Add Them To Oue Group List
for group in fb.FBSystem().Scene.Sets:
if group.Name == lDelSetName:
group.FBDelete()
else: pass
##Clean Up
del lDelSetName
FBDelete() Lights
'''
================================================================
FBDelete Lights By Name, Selected And All Lights Within The Scene
================================================================
'''
'''
Delete All Lights In The Scene
'''
##Create An Empty Light List
lLightLst = []
##Go Throuh All Lights Within The Scene
for light in fb.FBSystem().Scene.Lights:
##Add Each Light To The Light List
lLightLst.extend([light])
##Delete Lighst Within The Lights List
for light in lLightLst:
light.FBDelete()
##Clean Up
del lLightLst
'''
Delete All Selected Lights
'''
##Create An Empty Light List
lLightLst = []
##Go Throuh All Light Within The Scene
for light in fb.FBSystem().Scene.Lights:
##Selected Light
if light.Selected == True:
##Add Each Light To The Light List
lLightLst.extend([light])
##Skip Any Un Selected Light
else: pass
##Delete Light Within The Camera List
for light in lLightLst:
light.FBDelete()
##Clean Up
del lLightLst
'''
Delete Light By Name
'''
##Define The Light We Are Looking For - Change This Variable To Match The Desired Light You Wish To Delete
lDelLightName = "Light 2"
##Go Through Every Light Within The Scene
for light in fb.FBSystem().Scene.Lights:
##If A Light's Name Matched Our Desired Light Name
if light.Name == lDelLightName:
##Delte Light
light.FBDelete()
##Skip All Other Cameras
else: pass
##Clean Up
del lDelLightName
FBDelete() Material
'''
================================================================
FBDelete Materials By Name, Selected And All Materials Within The Scene
================================================================
'''
'''
Delete All Materials
'''
##Create An Empty Material List
lMatLst = []
##Serach All Materials Within The Scene
for material in fb.FBSystem().Scene.Materials:
##Skip The DefaultMaterial
if material.Name == "DefaultMaterial": pass
##Add Material To Our Material List
else: lMatLst.extend ([material])
##Go Through Each Material In Our Materail List
for material in lMatLst:
##Delete Material
material.FBDelete()
##Clean Up
del lMatLst
'''
Delete Selected Materials
'''
##Create An Empty Material List
lMatLst = []
##Serach All Materials Within The Scene
for material in fb.FBSystem().Scene.Materials:
##Materials That Are Selected
if material.Selected == True:
##Skip The DefaultMaterial
if material.Name == "DefaultMaterial": pass
##Add Material To Our Material List
else: lMatLst.extend ([material])
##Skip Materials That Are Not Selected
else: pass
##Go Through Each Material In Our Materail List
for material in lMatLst:
##Delete Material
material.FBDelete()
##Clean Up
del lMatLst
'''
Delete Materials By Name
'''
##Define The Material We Are Looking For - Change This Variable To Match The Desired Material You Wish To Delete
lMaterialDel = "Material 2"
##Serach All Materials Within The Scene
for material in fb.FBSystem().Scene.Materials:
##Look At The Name To See If It Matches The Desired Material You Wish To Delete
if material.Name == lMaterialDel:
##Delete Material
material.FBDelete()
##Skip All Materials That Do Not Match The Desired Material You Wish To Delete
else:
pass
##Clean Up
del lMaterialDel
FBDelete() Poses
'''
================================================================
FBDelete Pose By Name, Selected And All Poses Within The Scene
================================================================
'''
'''
Delete All Poses
'''
##Create An Empty Pose List
lPoseLst = []
##Serach All Pose Within The Scene
for pose in fb.FBSystem().Scene.CharacterPoses:
lPoseLst.extend ([pose])
##Go Through Each Pose In Our Pose List
for pose in lPoseLst:
##Delte Pose
pose.FBDelete()
##Clean Up
del lPoseLst
'''
Delete Selected Poses
'''
##Create An Empty Pose List
lPoseLst = []
##Serach All Poses Within The Scene
for pose in fb.FBSystem().Scene.CharacterPoses:
##Poses That Are Selected
if pose.Selected == True:
##Skip The DefaultMaterial
if pose.Name == "DefaultMaterial": pass
##Add Pose To Our Pose List
else: lPoseLst.extend ([pose])
##Skip Poses That Are Not Selected
else: pass
##Go Through Each Pose In Our Materail List
for pose in lPoseLst:
##Delte Pose
pose.FBDelete()
##Clean Up
del lPoseLst
'''
Delete Poses By Name
'''
##Define The Pose We Are Looking For - Change This Variable To Match The Desired Pose You Wish To Delete
lPoseDel = "Character Pose 2"
##Serach All Poses Within The Scene
for pose in fb.FBSystem().Scene.CharacterPoses:
##Look At The Name To See If It Matches The Desired Pose You Wish To Delete
if pose.Name == lPoseDel:
##Delte Pose
pose.FBDelete()
##Skip All Poses That Do Not Match The Desired Pose You Wish To Delete
else:
pass
##Clean Up
del lPoseDel
FBDelete() Shaders
'''
================================================================
FBDelete Shader By Name, Selected And All Shaders Within The Scene
================================================================
'''
'''
Delete All Shader
'''
##Create An Empty Shader List
lShaderLst = []
##Serach All Shaders Within The Scene
for shader in fb.FBSystem().Scene.Shaders:
##Skip The Default Shader
if shader.Name == "Default Shader": pass
##Add Shader To Our Shader List
else: lShaderLst.extend ([shader])
##Go Through Each Shader In Our Shader List
for shader in lShaderLst:
##Delete Shader
shader.FBDelete()
##Clean Up
del lShaderLst
'''
Delete Selected Shaders
'''
##Create An Empty Shader List
lShaderLst = []
##Serach All Shaders Within The Scene
for shader in fb.FBSystem().Scene.Shaders:
##Shaders That Are Selected
if shader.Selected == True:
##Skip The Default Shader
if shader.Name == "Default Shader": pass
##Add Shader To Our Shader List
else: lShaderLst.extend ([shader])
##Skip Shaders That Are Not Selected
else: pass
##Go Through Each Shader In Our Shader List
for shader in lShaderLst:
##Delete Shader
shader.FBDelete()
##Clean Up
del lShaderLst
'''
Delete Shaders By Name
'''
##Define The Shader We Are Looking For - Change This Variable To Match The Desired Shader You Wish To Delete
lShaderDel = "BumpShader 1"
##Serach All Shaders Within The Scene
for shader in fb.FBSystem().Scene.Shaders:
##Look At The Name To See If It Matches The Desired Shader You Wish To Delete
if shader.Name == lShaderDel:
##Delete Shader
shader.FBDelete()
##Skip All Shaders That Do Not Match The Desired Shader You Wish To Delete
else:
pass
##Clean Up
del lShaderDel
FBDelete() Takes
'''
================================================================
FBDelete Takes By Name, Selected And All Takes Within The Scene
================================================================
'''
##Create 10 Takes To Help Testing
for i in range (1,10):
lTakeName = 'Take Name' + ' 00' + str(i)
newtake = fb.FBSystem().CurrentTake.CopyTake(lTakeName)
fb.FBPlayerControl().GotoStart()
newtake.ClearAllProperties(False)
newtake.LocalTimeSpan = fb.FBTimeSpan( fb.FBTime(0), fb.FBTime(0, 0, 0, 150) )
##Clean Up
del lTakeName
'''
Delete Take By Name
'''
##Define The Take We Are Looking For - Change This Variable To Match Your Desired Take You Wish To Delete
lDelTakeName = "Take Name 005"
for i in fb.FBSystem().Scene.Takes:
if i.Name == lDelTakeName:
i.FBDelete()
else: pass
##Clean Up
del lDelTakeName
'''
Delete Selected Takes
'''
##Create An Empty Take List
lTakeLst = []
##Add Every Selected Take Within Our Scene To Our Take List
for i in range( len(fb.FBSystem().Scene.Takes) ):
if fb.FBSystem().Scene.Takes[i].Selected == True:
lTakeLst.extend([fb.FBSystem().Scene.Takes[i]])
else: pass
##Delete Every Take Within Our Take List
for take in lTakeLst:
take.FBDelete()
##Clean Up
del lTakeLst
'''
Delete All Takes - No Idea Why You Would Want To Do This
'''
##Create An Empty Take List
lTakeLst = []
##Add Every Selected Take Within Our Scene To Our Take List
for i in range( len(fb.FBSystem().Scene.Takes) ):
lTakeLst.extend([fb.FBSystem().Scene.Takes[i]])
##Delete Every Take Within Our Take List
for take in lTakeLst:
take.FBDelete()
##Clean Up
del lTakeLst
FBDelete() Textures
'''
================================================================
FBDelete Textures By Name, File Extention Selected And All Textures Within The Scene
================================================================
'''
'''
Delete All Textures
'''
##Create An Empty Texture List
lTextureLst = []
##Serach All Textures Within The Scene
for texture in fb.FBSystem().Scene.Textures:
##Skip The Default Texture
if texture.Name == "Default Shader": pass
##Add Texture To Our Texture List
else: lTextureLst.extend ([texture])
##Go Through Each Texture In Our Texture List
for texture in lTextureLst:
##Delete Texture
texture.FBDelete()
##Clean Up
del lTextureLst
'''
Delete Selected Textures
'''
##Create An Empty Texture List
lTextureLst = []
##Serach All Textures Within The Scene
for texture in fb.FBSystem().Scene.Textures:
##Textures That Are Selected
if texture.Selected == True:
##Skip The Default Texture
if texture.Name == "Default Shader": pass
##Add Texture To Our Texture List
else: lTextureLst.extend ([texture])
##Skip Textures That Are Not Selected
else: pass
##Go Through Each Texture In Our Texture List
for texture in lTextureLst:
##Delete Texture
texture.FBDelete()
##Clean Up
del lTextureLst
'''
Delete Textures By Name
'''
##Define The Texture We Are Looking For - Change This Variable To Match The Desired Texture You Wish To Delete
lTextureDel = "BlackScreen.png"
##Serach All Textures Within The Scene
for texture in fb.FBSystem().Scene.Textures:
##Look At The Name To See If It Matches The Desired Texture You Wish To Delete
if texture.Name == lTextureDel:
##Delete Texture
texture.FBDelete()
##Skip All Textures That Do Not Match The Desired Texture You Wish To Delete
else:
pass
##Clean Up
del lTextureDel
'''
Delete Textures By File Type
'''
##Define The Texture We Are Looking For - Change This Variable To Match The Desired Texture You Wish To Delete
lTextureExtDel = ".jpg"
##Create An Empty Texture List
lTextureLst = []
##Serach All Textures Within The Scene
for texture in fb.FBSystem().Scene.Textures:
##Look At The Name To See If It Matches The Desired Texture You Wish To Delete
if lTextureExtDel in texture.Name:
##Add Texture To Texture List
lTextureLst.extend([texture])
##Skip All Textures That Do Not Match The Desired Texture You Wish To Delete
else:
pass
for texture in lTextureLst:
texture.FBDelete()
##Clean Up
del lTextureExtDel, lTextureLst
FBDelete() Video
'''
================================================================
FBDelete Videos By Name, File Extention Selected And All Videos Within The Scene
================================================================
'''
'''
Delete All Videos
'''
##Create An Empty Video List
lVideoLst = []
##Serach All Videos Within The Scene
for media in fb.FBSystem().Scene.VideoClips:
##Skip The Default Video
if media.Name == "Default Shader": pass
##Add Video To Our Video List
else: lVideoLst.extend ([media])
##Go Through Each Video In Our Video List
for media in lVideoLst:
##Delete Video
media.FBDelete()
##Clean Up
del lVideoLst
'''
Delete Selected Videos
'''
##Create An Empty Video List
lVideoLst = []
##Serach All Videos Within The Scene
for media in fb.FBSystem().Scene.VideoClips:
##Videos That Are Selected
if media.Selected == True:
##Skip The Default Video
if media.Name == "Default Shader": pass
##Add Video To Our Video List
else: lVideoLst.extend ([media])
##Skip Videos That Are Not Selected
else: pass
##Go Through Each Video In Our Video List
for media in lVideoLst:
##Delete Video
media.FBDelete()
##Clean Up
del lVideoLst
'''
Delete Videos By Name
'''
##Define The Video We Are Looking For - Change This Variable To Match The Desired Video You Wish To Delete
lVideoDel = "BlackScreen.png"
##Serach All Videos Within The Scene
for media in fb.FBSystem().Scene.VideoClips:
##Look At The Name To See If It Matches The Desired Video You Wish To Delete
if media.Name == lVideoDel:
##Delete Video
media.FBDelete()
##Skip All Videos That Do Not Match The Desired Video You Wish To Delete
else:
pass
##Clean Up
del lVideoDel
'''
Delete Videos By File Type
'''
##Define The Video We Are Looking For - Change This Variable To Match The Desired Video You Wish To Delete
lVideoExtDel = ".jpg"
##Create An Empty Video List
lVideoLst = []
##Serach All Videos Within The Scene
for media in fb.FBSystem().Scene.VideoClips:
##Look At The Name To See If It Matches The Desired Video You Wish To Delete
if lVideoExtDel in media.Name:
##Add Video To Video List
lVideoLst.extend([media])
##Skip All Videos That Do Not Match The Desired Video You Wish To Delete
else:
pass
for media in lVideoLst:
media.FBDelete()
##Clean Up
del lVideoExtDel, lVideoLst
Like I mentioned the scripts are pretty repetitive, we search the scene, than create a list with all that is found and once done we take all that is on the list and delete them using the “.FBDelete()”.
My next post will cover pretty much the same topic but in the next example we will be creating a list of scene components, and then processing that list to create a list of thing I wish to delete. You will be able to find it here.
I hope this helps.
Any chance to easy switch FBDelete to Selected, Group, Set?
I’m not exactly sure what you are asking.
If you want to delete Selected Groups and Sets it would be something like this:
lDelLst = []
for item in fb.FBSystem().Scene.Sets:
if item.Selected == True:
lDelLst.extend ([item])
for item in fb.FBSystem().Scene.Groups:
if item.Selected == True:
lDelLst.extend ([item])
for item in lDelLst: item.FBDelete()
del lDelLst