Зеркалирование / добавление Blendshapes с вопросом Python - PullRequest
0 голосов
/ 27 января 2019

Итак, я знаю, что в Mel и Python есть куча зеркальных смешанных кодов, но я хотел попробовать свои силы. Для начала создайте объект: любой объект, пока вы называете его «faceMask», вы хороши. После этого загрузите скрипт, установите префикс имени для ваших blendshapes (я назвал его Test1), отметьте «Create Mask Blend», затем загрузите «faceMask», просто выбрав его и нажав «Load Main Object»: затем, когда вы нажмете «Mirror» Blendshapes »вы должны получить редактируемое зеркало. Просто включите blendshapes в категории blendhapes «faceBlend», поиграйте с левой формой и тада! у вас есть ваша первая смесь

Теперь, когда я сталкиваюсь с двумя проблемами впоследствии, я хочу создать вторую форму Blendshape: скажем, я назову мою вторую форму blendhape «Test2», а затем выберу «Add to Mask Blend», она создает все остальное просто отлично: но я хотите, чтобы он добавлял любые будущие blendshapes к узлу blendshape «faceBlend», и независимо от того, какие соглашения об именах или варианты кода я набираю, он просто не работает и не добавляет Blendshapes.

Вторая проблема, с которой я сталкиваюсь, заключается в том, что я хочу, чтобы атрибуты «maxDistance» для обтекания создавались со значением по умолчанию 0 вместо 1: но независимо от того, что я смотрю, по-видимому, для этого нет ответа. Я опубликую приведенный ниже код для всех, кто захочет поиграть, спасибо за вашу помощь и время.

Я просто хочу знать: что это за код Python для добавления blendshapes к существующему узлу blendshape и каков код для установки 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. Спасибо за вашу помощь.

...