使用Python问题镜像/添加Blendshapes

时间:2019-01-27 05:38:14

标签: python maya autodesk

因此,我知道在Mel和Python中有一堆镜像blendshapes代码,但是我想尝试自己制作一个。对于初学者来说,创建一个对象:任何对象,只要将其命名为“ faceMask”就可以了。在启动脚本之后,为您的blendshapes设置一个名称前缀(我将其命名为Test1),勾选“创建蒙版混合”,然后只需选择它并单击“加载主对象”即可加载“ faceMask”:然后单击“镜像” Blendshapes”,您应该得到一个可编辑的镜像。只需打开“ faceBlend” blendshapes类别中的blendshapes,然后尝试左形状和tada!你有第一个混合形状

但是,现在我遇到了两个问题,那就是当我想创建第二个Blendshape时:假设我将第二个Blendshape命名为“ Test2”,然后选中“ Add to Mask Blend”,它会创建其他所有东西:但是我希望它将任何将来的blendshapes添加到“ faceBlend” blendshape节点,并且无论我键入什么命名约定或代码变体,它都会失败并且不会添加Blendshapes。

我遇到的第二个问题是,我希望使用默认的0而不是1创建包装的“ maxDistance”属性,但是无论我看起来如何,都没有答案。我将在下面的代码中发布,以供任何愿意摇摆的人使用,谢谢您的帮助和时间。

我只想知道:用于将blendshapes添加到现有blendshape节点的python代码是什么,以及用于设置环绕变形器的maxDistance的代码是什么?

import maya.cmds as cmds
from functools import partial 

if cmds.window("dumWin", exists =True):
    cmds.deleteUI("dumWin", window=True)

myWindow = cmds.window("dumWin",t='DS Face Blendshape Builder', toolbox=True)
column = cmds.columnLayout(adj=True)

nodeNum1 = 0
nodeNum2 = 0

def nameBlend(*args):
    cmds.textField('name_text', e = True)

def SetSource(*args):
    global source
    selection = cmds.ls(sl=True)

    if len(selection) != 1:
        source = ""
        print( "Select one object" )
    else:
            source = selection[0]

    cmds.textField('source_text', e=True, text = source)

def mirrorBlendShape(*args):
    namePref = cmds.textField('name_text', q=True, text=True)
    L_Shape = cmds.textField('source_text', q=True, text=True)
    R_Shape = cmds.textField('source_text', q=True, text=True)
    W_Shape = cmds.textField('source_text', q=True, text=True)

    cmds.duplicate(name = 'L_' + namePref + '_Blend')
    cmds.duplicate(name = 'R_' + namePref + '_Blend')
    cmds.duplicate(name = namePref + '_Wrap')

    cmds.blendShape ('L_' + namePref + '_Blend', namePref + '_Wrap',en=1,w=(0, 1))
    cmds.scale(-1,1,1, namePref + '_Wrap')

    cmds.move(-3,3,0, 'L_' + namePref + '_Blend')
    cmds.move(-3,0,0, 'R_' + namePref + '_Blend')
    cmds.move(-3,0,0, namePref + '_Wrap')

    cmds.group('L_' + namePref + '_Blend','R_' + namePref + '_Blend',namePref + '_Wrap',  n= namePref + '_Grp')

    cmds.select('R_' + namePref + '_Blend', namePref + '_Wrap')
    cmds.CreateWrap()
    #cmds.setAttr(".maxDistance", 0.0)


    if nodeNum1 ==1:
        cmds.select('L_' + namePref + '_Blend','R_' + namePref + '_Blend', 'faceMask')
        cmds.blendShape(n= 'faceBlend')
        cmds.select('faceMask')

    if nodeNum2 ==2:
        cmds.select('L_' + namePref + '_Blend', 'R_' + namePref + '_Blend', 'faceMask')
        indexNum = 0
        cmds.blendShape(faceBlend, edit = True, target =(indexNum, faceBlend, 1))
        indexNum = indexNum+1

        cmds.select('faceMask')


def UI():
    cmds.columnLayout
    cmds.text('Set blend name prefix')
    cmds.textField('name_text', editable = True)
    cmds.radioCollection()
    cmds.radioButton (label='Create Mask Blend', onCommand = "nodeNum1 = 1", offCommand = "nodeNum1 = 0" )
    cmds.radioButton (label='Add to Mask Blend', onCommand = "nodeNum2 = 1", offCommand = "nodeNum2 = 0" )

    cmds.textField('source_text', editable = False)
    cmds.button( label="Load Main Object", c = SetSource)
    cmds.separator ( style = 'in')
    cmds.button( label='Mirror Blendshapes', c = mirrorBlendShape)

    cmds.setParent('..')
UI()
selection = cmds.ls(sl=True)

cmds.showWindow(myWindow)

根据我的期望,我希望环绕变形器上的最大距离为零,并且我希望“添加到蒙版混合”复选框可以将以后创建的所有将来的混合形状添加到已创建的现有blendshape节点中在主对象上,而不只是创建一个新的blendshape节点。谢谢您的帮助。

0 个答案:

没有答案