def get_invalid(cls, instance): """Get all nodes which do not match the criteria""" invalid = [] types_to_skip = ["locator"] # get asset id nodes = instance.data.get("out_hierarchy", instance[:]) for node in nodes: # We only check when the node is *not* referenced if cmds.referenceQuery(node, isNodeReferenced=True): continue # Check if node is a shape as deformers only work on shapes obj_type = cmds.objectType(node, isAType="shape") if not obj_type: continue # Skip specific types if cmds.objectType(node) in types_to_skip: continue # Get the current id of the node node_id = lib.get_id(node) if not node_id: invalid.append(node) continue history_id = lib.get_id_from_history(node) if history_id is not None and node_id != history_id: invalid.append(node) return invalid
def repair(cls, instance): for node in cls.get_invalid(instance): # Get the original id from history history_id = lib.get_id_from_history(node) if not history_id: cls.log.error("Could not find ID in history for '%s'", node) continue lib.set_id(node, history_id, overwrite=True)
def get_invalid(cls, instance): """Get all nodes which do not match the criteria""" shapes = cmds.ls(instance[:], dag=True, leaf=True, shapes=True, long=True, noIntermediate=True) invalid = [] for shape in shapes: history_id = lib.get_id_from_history(shape) if history_id: current_id = lib.get_id(shape) if current_id != history_id: invalid.append(shape) return invalid
def get_invalid(cls, instance): """Get all nodes which do not match the criteria""" invalid = [] out_set = next(x for x in instance if x.endswith("out_SET")) members = cmds.sets(out_set, query=True) shapes = cmds.ls(members, dag=True, leaf=True, shapes=True, long=True, noIntermediate=True) for shape in shapes: history_id = lib.get_id_from_history(shape) if history_id: current_id = lib.get_id(shape) if current_id != history_id: invalid.append(shape) return invalid