Skip to content

Instantly share code, notes, and snippets.

@nielsvaes
Created January 26, 2021 11:29
Show Gist options
  • Save nielsvaes/1e40d4e0328c7e6c80e65e6ee4f9166c to your computer and use it in GitHub Desktop.
Save nielsvaes/1e40d4e0328c7e6c80e65e6ee4f9166c to your computer and use it in GitHub Desktop.
Finds all the empty groups in a Maya scene
import pymel.core as pm
def get_shape_nodes(node, intermediate=False):
if pm.nodeType(node) == "transform":
shape_nodes = pm.listRelatives(node, shapes=True, path=True)
found_shape_nodes = []
if shape_nodes is None:
return None
for shape_node in shape_nodes:
is_intermediate = pm.getAttr("%s.intermediateObject" % shape_node)
if intermediate == True and is_intermediate and pm.listConnections(shape_node, source=False):
return shape_node
elif intermediate == False and not is_intermediate:
found_shape_nodes.append(shape_node)
if len(found_shape_nodes) > 0:
return found_shape_nodes
elif pm.nodeType(node) in ["mesh", "nurbsCurve", "nurbsSurface"]:
return [pm.PyNode(node)]
return None
def is_group(node):
node = pm.PyNode(node)
if not pm.objectType(node) == "transform":
return False
try:
children = node.getChildren()
except:
return False
if get_shape_nodes(node):
return False
return True
def is_empty_group(group_node, include_empty_child_groups=True):
is_empty = True
group_node = pm.PyNode(group_node)
if not is_group(group_node):
return False
if include_empty_child_groups:
try:
for child in group_node.getChildren():
if not is_group(child):
is_empty = False
break
else:
is_empty = is_empty_group(child)
except:
pass
finally:
return is_empty
else:
if len(group_node.getChildren()) == 0:
return True
return False
empty_groups = [node for node in pm.ls() if is_empty_group(node)]
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment