Maya Python: «выбрать все вершины ниже y = 0» - PullRequest
0 голосов
/ 20 сентября 2018

Используя maya.cmds, я хочу выбрать все вершины ниже y = 0, чтобы я мог их удалить.Как бы я это реализовал?Кроме того, я обрабатываю большое количество мешей .obj, поэтому мне нужно будет пройтись по каждой из них и сделать то же самое.Чтобы выполнить итерацию по каждому файлу, какую технику я должен использовать?

import maya.cmds as cmds
import maya.api.OpenMaya as om2

# Select all objects
selection = cmds.select(all = True)
# Rotate -90 degrees on the x axis
# cmds.rotate(-90)

def vertexOm2():
    """
    Using Maya Python API 2.0
    """
    #___________Selection___________
    # 1 # Query the selection list
    selectionLs = om2.MGlobal.getActiveSelectionList()

    # 2 # Get the dag path of the first item in the selection list
    selObj = selectionLs.getDagPath(0)

    #___________Query vertex position ___________
    # create a Mesh functionset from our dag object
    mfnObject = om2.MFnMesh(selObj)

    return mfnObject.getPoints()

vertexOm2()

Это возвращает «Ошибка типа: элемент не путь DAG»

Или использование cmds:

def vertexCmds():
 """
 Using Maya Cmds
 """
 #___________Selection___________
 # query the currently selected object
 selTemp = str(cmds.ls(selection=True))
 # edit retrieved string so we can feed it into commands
 sel = selTemp.split("'")[1]


 #___________Query vertex position ___________
 # use the xform command with the ".vtx[*]" to retireve all vertex positions at once
 vertPosTemp = cmds.xform(sel + '.vtx[*]', q=True, ws=True, t=True)

 # split the resulting list into sets of 3
 vertPos = zip(*[iter(vertPosTemp)]*3)

 return vertPos

Я получил оба из здесь .

1 Ответ

0 голосов
/ 21 сентября 2018

если вы хотите получить ответ, вы должны хотя бы опубликовать фрагмент кода.Ваш вопрос:

Как бы это реализовать?

это просто: сделать цикл for для итерации по объектам.

Также,Я обрабатываю большое количество ячеек .obj

здесь есть функция xform и createMayaRanges, чтобы ответить на этот вопрос, но вы можете исследовать Maya API

Чтобы выполнить итерацию по каждомуфайл, какую технику я должен использовать?

Вручную, или делать цикл внутри сеанса Maya или последнего решения, используя Mayapy, но это много работы.Подробнее о пакетном файле Maya:

http://www.toadstorm.com/blog/?p=136

import itertools
import maya.cmds as cmds

sel = cmds.ls(sl=True)

def createMayaRanges(i):
    output = []
    for a, b in itertools.groupby(enumerate(i), lambda (x, y): y - x):
        b = list(b)
        myString = '{0}:{1}'.format(b[0][1], b[-1][1])
        output.append(myString)
    return output

output_sel = []
for obj in sel:
    coord = cmds.xform('{}.vtx[:]'.format(obj),
                         q=1,
                         ws=1,
                         t=1)
    coordY = coord[1::3]
    index_lower = [x for (x,i) in enumerate(coordY) if i < 0]
    optimized_sel = createMayaRanges(index_lower)
    selToString = ['{}.vtx[{}]'.format(obj, j) for j in optimized_sel]
    if selToString:
        output_sel += selToString

cmds.select(output_sel)
...