Проблемы при импорте веса краски в Maya - PullRequest
0 голосов
/ 25 марта 2020

Код работает в половине случаев. Я не понимаю, почему он останавливается и начинает вести себя как ожидалось.

Импортирует карту рисования на деформер, например, blendshape или deltaMu sh. Использование Maya 2019.

def import_paint_weights(node, painted):
    default_ctx = cmds.currentCtx()
    node_type = cmds.objectType(node)
    art_attr = cmds.artAttrCtx(oaa="%s.%s.weights" % (node_type, node))
    cmds.setToolTo(art_attr)
    cmds.artAttrCtx(art_attr, importfileload=painted,
                    ifm='luminance', edit=True)
    cmds.dgeval(node)
    cmds.setToolTo(default_ctx)

neutral = 'head_neutral'
painted = 'c:/scans/bls_painted/delta_mush_inner_mouth_zone.iff'
emotion = cmds.ls(sl=True, fl=True)
bl = cmds.blendShape(neutral, emotion)[0]
cmds.select(emotion)
import_paint_weights(bl, painted)

Этот код работал, но проблема не решена.

def import_paint_weights(node, painted):
    data_attr_map = {'blendShape':'baseWeights', 'deltaMush':'weights'}
    default_ctx = cmds.currentCtx()
    node_type = cmds.objectType(node)
    node_attr = data_attr_map.get(node_type, None)
    if not node_attr:
        print 'Not recognized node. Use blendshape and deltamush only now'
        return
    mel.eval('artSetToolAndSelectAttr("artAttrCtx", "%s.%s.%s")' % (node_type, node, node_attr))
    curr_ctx = cmds.currentCtx()
    cmds.artAttrCtx(curr_ctx, selectedattroper='absolute', edit=True)
    cmds.artAttrCtx(curr_ctx, edit=True, value=0)
    cmds.artAttrCtx(curr_ctx, edit=True, clear=True)
    cmds.artAttrCtx(curr_ctx, importfileload=painted,
                    ifm='luminance', edit=True)
    cmds.setToolTo(default_ctx)

1 Ответ

0 голосов
/ 27 марта 2020

Я не уверен, что это решит вашу проблему, но я вижу в своих скриптах, что я делаю это при игре с меню ctx:

cmds.artAttrCtx('artAttrNClothContext', edit=1, selectedattroper="smooth")
cmds.refresh()
cmds.artAttrCtx('artAttrNClothContext', edit=1, clear=1)

, поэтому, возможно, вам просто нужно использовать refre sh после изменения пользовательского интерфейса

...