Maya Python: создать один кластер для нескольких кривых резюме - PullRequest
0 голосов
/ 06 марта 2020

Хорошо, теперь у меня последняя проблема с моим авторегистратором позвоночника: однако вместо публикации полного кода я упростил вопрос до базовой c демонстрации. Вот что я хочу сделать:

Я знаю, как использовать For L oop, чтобы кластеризовать все cvs на кривой: но вместо всех cvs: я хочу, чтобы он просто кластеризовал верхние 2 cvs, затем нижние 2 cvs для всего 2 кластеров вместо 4, которые он создает для guideLine_ctrlCurve

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

В-третьих: я хочу, чтобы он стал родительским для переименованных кластеров в clusterGrp: проблема, однако: когда вы родительский кластер, он автоматически создает новую группу для кластера, которая может быть очень раздражает: единственный способ, который я нашел вокруг, это перетаскивание кластера в outliner под новым родителем: но я не сделал нашел решение python.

'''
import DS_clusterCurve_demo
reload (DS_clusterCurve_demo)
DS_clusterCurve_demo.gui()
'''

import re
import maya.cmds as cmds
import maya.mel as mel

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

myWindow = cmds.window("clusterWin",t='DS_clusterCurve_demo',w=200, h=500, toolbox=True)
column = cmds.columnLayout(adj=True)

def gui():
    if cmds.window("clusterWin", exists=True):
        cmds.deleteUI("clusterWin", window=True)

    myWindow = cmds.window("clusterWin", t="DS_clusterCurve_demo", w=200, h=500, toolbox=True)
    column = cmds.columnLayout(adj=True)

    cmds.button(label="Build Example curve", c=buildExamples)
    cmds.separator(w=200, h=3)
    cmds.button(label="Create Curve Clusters", c=buildClusters)
    cmds.separator(w=200, h=3)
    cmds.button(label="Group Clusters", c=groupClusters)

    cmds.setParent("..")
    cmds.showWindow(myWindow)

def buildExamples(*args):
    cmds.curve(n='guideLine_ctrlCurve', d=1, p=[(0,0,0),(0,1,0),(0,2,0),(0,3,0)])

def buildClusters(*args):
    curveCVs = cmds.ls('guideLine_ctrlCurve' + '.cv[0:]',fl=True)
    for p in curveCVs:
        cmds.cluster(p)

def groupClusters(*args):
    cmds.group(n='clusterGrp',empty=True,world=True)
    #cmds.parent('clustersWhenProperlyRenamed','clusterGrp')

Спасибо за помощь

1 Ответ

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

Хорошо, вот решение, которое я нашел для любого любопытного:

'''
import DS_clusterCurve_demo
reload (DS_clusterCurve_demo)
DS_clusterCurve_demo.gui()
'''

import re
import maya.cmds as cmds
import maya.mel as mel

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

myWindow = cmds.window("clusterWin",t='DS_clusterCurve_demo',w=200, h=500, toolbox=True)
column = cmds.columnLayout(adj=True)

def gui():
    if cmds.window("clusterWin", exists=True):
        cmds.deleteUI("clusterWin", window=True)

    myWindow = cmds.window("clusterWin", t="DS_clusterCurve_demo", w=200, h=500, toolbox=True)
    column = cmds.columnLayout(adj=True)

    cmds.button(label="Build Example curve", c=buildExamples)
    cmds.separator(w=200, h=3)
    cmds.button(label="Create Curve Clusters", c=buildClusters)
    cmds.separator(w=200, h=3)
    cmds.button(label="Group Clusters", c=groupClusters)

    cmds.setParent("..")
    cmds.showWindow(myWindow)

def buildExamples(*args):
    cmds.curve(n='guideLine_ctrlCurve', d=1, p=[(0,0,0),(0,1,0),(0,2,0),(0,3,0)])

def buildClusters(*args):
    guideCurve = 'guideLine_ctrlCurve'
    cmds.cluster(guideCurve + ".cv[0:1]",n="up_crvCluster_")
    cmds.cluster(guideCurve + ".cv[2:3]",n="dwn_crvCluster_")

def groupClusters(*args):
    cmds.group(n='clusterGrp',empty=True,world=True)
    cmds.parent('up_crvCluster_Handle','clusterGrp')
    cmds.parent('dwn_crvCluster_Handle','clusterGrp')

Это более жестко, чем я бы предпочел: но, эй, работает ли оно правильно?

...