def gear_MoveShapeKey_Execute(): if not xsi.Selection.Count: gear.log("Select shape keys", gear.sev_error) return shapes = [shape for shape in xsi.Selection if shape.Type in ["clskey"]] if not shapes: return cls = shapes[0].Parent geo = cls.Parent clusters = geo.Clusters # UI prop = xsi.ActiveSceneRoot.AddProperty("Custom_parameter_list", False, "gear_MoveShapeKey") pDuplicate = prop.AddParameter3("duplicate", c.siBool, True, None, None, False, False) pClusters = prop.AddParameter3("clusters", c.siInt4, -1, 0, clusters.Count-1, False, False) clustersItems = ["New Cluster", -1] for i, cls in enumerate(clusters): clustersItems.append(cls.Name) clustersItems.append(i) layout = prop.PPGLayout layout.Clear() layout.AddTab("General") layout.AddGroup("Move Shape Key Option") item = layout.AddItem(pDuplicate.ScriptName, "Duplicate") item = layout.AddEnumControl(pClusters.ScriptName, clustersItems, "Move to", c.siControlCombo) layout.EndGroup() # Inspect rtn = xsi.InspectObj(prop, "", "Move Shape Key", c.siModal, False) # Return values duplicate = pDuplicate.Value cluster_index = pClusters.Value xsi.DeleteObj(prop) if rtn: return # Create or get target cluster if cluster_index == -1: target_cluster = geo.AddCluster(c.siVertexCluster, cls.Name+"_Copy", cls.Elements.Array) else: target_cluster = clusters(cluster_index) # Duplicate Shape key for shape in shapes: sha.duplicateShapeKey(shape, target_cluster) # Delete original if not duplicate: xsi.DeleteObj(shapes)
def gear_DuplicateShapeKey_Execute(): if not xsi.Selection.Count: gear.log("Select shape keys", gear.sev_error) return for shape in xsi.Selection: if shape.Type not in ["clskey"]: continue sha.duplicateShapeKey(shape)
def gear_MoveShapeKey_Execute(): if not xsi.Selection.Count: gear.log("Select shape keys", gear.sev_error) return shapes = [shape for shape in xsi.Selection if shape.Type in ["clskey"]] if not shapes: return cls = shapes[0].Parent geo = cls.Parent clusters = geo.Clusters # UI prop = xsi.ActiveSceneRoot.AddProperty("Custom_parameter_list", False, "gear_MoveShapeKey") pDuplicate = prop.AddParameter3("duplicate", c.siBool, True, None, None, False, False) pClusters = prop.AddParameter3("clusters", c.siInt4, -1, 0, clusters.Count - 1, False, False) clustersItems = ["New Cluster", -1] for i, cls in enumerate(clusters): clustersItems.append(cls.Name) clustersItems.append(i) layout = prop.PPGLayout layout.Clear() layout.AddTab("General") layout.AddGroup("Move Shape Key Option") item = layout.AddItem(pDuplicate.ScriptName, "Duplicate") item = layout.AddEnumControl(pClusters.ScriptName, clustersItems, "Move to", c.siControlCombo) layout.EndGroup() # Inspect rtn = xsi.InspectObj(prop, "", "Move Shape Key", c.siModal, False) # Return values duplicate = pDuplicate.Value cluster_index = pClusters.Value xsi.DeleteObj(prop) if rtn: return # Create or get target cluster if cluster_index == -1: target_cluster = geo.AddCluster(c.siVertexCluster, cls.Name + "_Copy", cls.Elements.Array) else: target_cluster = clusters(cluster_index) # Duplicate Shape key for shape in shapes: sha.duplicateShapeKey(shape, target_cluster) # Delete original if not duplicate: xsi.DeleteObj(shapes)