Пример #1
0
def mirrorUnskinned(leftSuffix, rightSuffix, copyDirection):
    MaxPlus.Animation.SetTime(0, False)
    src_node = MaxPlus.SelectionManager.GetNodes()
    mirroredTopNode = MaxPlus.INode.CreateTreeInstance(src_node[0])
    MaxPlus.SelectionManager.SelectNode(mirroredTopNode)
    MaxPlus.Core_EvalMAXScript(
        "tm = $.transform\ntm.row1 = tm.row1 * [-1,1,1]\n$.transform  =tm")
    mirroredHierarchy = list(sdknode.getChildren(mirroredTopNode))
    mirroredHierarchy.append(mirroredTopNode)
    for n in mirroredHierarchy:
        n.SetName(n.GetName()[:-7] + "right")
        sdkutility.ResetXForm(n, True, True)
        sdkutility.remove_transform_keys(n)

    mirror_animation(src_node[0], mirroredTopNode, leftSuffix, rightSuffix,
                     copyDirection)
Пример #2
0
def mirror_animation(source, target, src_suffix, target_suffix, copyDirection):
    # mirror from parent of selection
    # todo: if no parent add a node on center
    dummyRoot = MaxPlus.INode.CreateTreeInstance(source)
    dummyHierarchy = list(sdknode.getChildren(dummyRoot))
    dummyHierarchy.append(dummyRoot)
    for n in dummyHierarchy:
        n.SetName(n.GetName()[:-3] + "_dummy")
        setDummy(n)
    MaxPlus.SelectionManager.SelectNode(dummyRoot)
    MaxPlus.Core_EvalMAXScript(
        "tm = $.transform\ntm.row1 = tm.row1 * [-1,1,1]\n$.transform  =tm")
    try:
        findObjectAndBake(target, dummyRoot, src_suffix, target_suffix,
                          copyDirection)
    finally:
        cleanUp(src_suffix, target_suffix, copyDirection)
Пример #3
0
def mirror_skin(src, target, src_suffix, target_suffix, mirror_axis):
    MaxPlus.Animation.SetTime(0, False)
    sdknode.collapseAllModifiers(target)
    target_skinmodifier = sdkskin.add_skin_modifier(target)
    MaxPlus.SelectionManager.SelectNode(target)
    MaxPlus.Core.EvalMAXScript("max modify mode")
    src_skinmodifier = sdkskin.get_skin_modifier(src)
    boneslist = sdkskin.get_bones_list_from_skin_modifier(src_skinmodifier)
    MaxPlus.SelectionManager.SelectNode(target)
    if boneslist:
        for bone in boneslist:
            binomial_bone = find_binomial(bone, src_suffix, target_suffix)
            if binomial_bone:
                sdkskin.add_bone_to_skin_modifier_of_selected_node(
                    binomial_bone)
            else:
                sdkskin.add_bone_to_skin_modifier_of_selected_node(bone)
    else:
        return

    MaxPlus.SelectionManager.SelectNode(src)
    MaxPlus.Core_EvalMAXScript("skinUtils.ExtractSkinData $")
    skin_data = MaxPlus.INode.GetINodeByName("SkinData_" + src.GetName())
    sdknode.mirrorNode(skin_data, mirror_axis)
    target_bone_list = sdkskin.get_bones_list_from_skin_modifier(
        target_skinmodifier)
    for target_bone in target_bone_list:
        name = target_bone.GetName()
        new_name = re.sub(r'{0}$'.format(target_suffix), src_suffix, name)
        target_bone.SetName(new_name)
    MaxPlus.SelectionManager.ClearNodeSelection()
    selection = MaxPlus.INodeTab()
    selection.Append(target)
    selection.Append(skin_data)
    MaxPlus.SelectionManager.SelectNodes(selection)
    MaxPlus.Core.EvalMAXScript(
        "skinUtils.ImportSkinDataNoDialog true false false false false 1 0")
    target_bone_list = sdkskin.get_bones_list_from_skin_modifier(
        target_skinmodifier)
    for target_bone in target_bone_list:
        name = target_bone.GetName()
        new_name = re.sub(r'{0}$'.format(src_suffix), target_suffix, name)
        target_bone.SetName(new_name)
    MaxPlus.SelectionManager.ClearNodeSelection()
    MaxPlus.INode.Delete(skin_data)