Пример #1
0
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))
    '''