def CreateEnvelopeDuplicate(model, skin): # check ICE skeleton skeleton = model.FindChild('ICE_Skeleton') # check envelope group env_grp = model.Groups('Envelope') if not skeleton: XSI.LogMessage( '[CreateEnvelopeDuplicate] No ICE Skeleton or no Envelope Group!', constants.siWarning) return # check nb deformers num_points = skeleton.ActivePrimitive.Geometry.Points.Count if not env_grp or not num_points == env_grp.Members.Count: env_grp = Skeleton.CreateEnvelopeNullsFromSkeletonCloud(model) # duplicate mesh dup = Utils.GetMeshCopy(skin) skin.Parent3DObject.AddChild(dup) skin.Properties('Visibility').Parameters('ViewVis').Value = False XSI.ApplyFlexEnv('{};{}'.format(dup.FullName, env_grp.Members.GetAsText()), '', 2) # transfer weights tree = ICETree.CreateICETree(dup, 'TransferWeights', 0) compound = XSI.AddICECompoundNode('TransferWeightsFromICESkeleton', str(tree)) XSI.ConnectICENodes('{}.port1'.format(tree), '{}.execute'.format(compound)) name = ICETree.ReplaceModelNameByThisModel(skin, model) XSI.SetValue('{}.Reference'.format(compound), name) # deform tree = ICETree.CreateICETree(dup, 'Deform', 2) deform = XSI.AddICECompoundNode('ICE Envelope Skeleton', str(tree)) XSI.ConnectICENodes('{}.port1'.format(tree), '{}.execute'.format(deform)) '''