如何使用Python在Maya中查找立方体的Y面

如何使用Python在Maya中查找立方体的Y面,python,maya,Python,Maya,抱歉问了这么具体的问题,伙计们,我想只有了解玛雅的人才会回答这个问题。在Maya中,我有不同大小的立方体,我需要使用python查找立方体的哪个面指向Y轴。(枢轴位于中心)如有任何提示,将不胜感激 非常感谢:)使用pymel,代码可以更加紧凑。选择指向下方的面: n=pm.PyNode("pCubeShape1") s = [] for f in n.faces: if f.getNormal(space='world')[1] < 0.0: s.append(f)

抱歉问了这么具体的问题,伙计们,我想只有了解玛雅的人才会回答这个问题。在Maya中,我有不同大小的立方体,我需要使用python查找立方体的哪个面指向Y轴。(枢轴位于中心)如有任何提示,将不胜感激


非常感谢:)

使用pymel,代码可以更加紧凑。选择指向下方的面:

n=pm.PyNode("pCubeShape1")
s = []
for f in n.faces:
    if f.getNormal(space='world')[1] < 0.0:
        s.append(f)
pm.select(s)
n=pm.PyNode(“pCubeShape1”)
s=[]
对于n面中的f:
如果f.getNormal(space='world')[1]<0.0:
s、 附加(f)
pm.选择(s)

使用pymel,代码可以更加紧凑。选择指向下方的面:

n=pm.PyNode("pCubeShape1")
s = []
for f in n.faces:
    if f.getNormal(space='world')[1] < 0.0:
        s.append(f)
pm.select(s)
n=pm.PyNode(“pCubeShape1”)
s=[]
对于n面中的f:
如果f.getNormal(space='world')[1]<0.0:
s、 附加(f)
pm.选择(s)

如果您只需要不使用矢量数学和Pymel或API的快速解决方案,可以使用
cmds.polySelectConstraint
查找与法线对齐的面。您只需选择所有面,然后使用约束仅获取指向正确方向的面。这将选择网格中沿给定轴指向的所有面:

import maya.cmds as cmds
def select_faces_by_axis (mesh, axis = (0,1,0), tolerance = 45):
    cmds.select(mesh + ".f[*]")
    cmds.polySelectConstraint(mode = 3, type = 8, orient = 2, orientaxis = axis, orientbound = (0, tolerance))
    cmds.polySelectConstraint(dis=True)  # remember to turn constraint off!
是您想要的x、y、z轴,
公差
是您可以容忍的倾斜度。为了得到向下的面,你会这样做

select_faces_by_axis ('your_mesh_here', (0,0,-1))


这种方法的优点主要是在玛雅的C++中运行,它比Python的方法在网格中的所有面上都要快。

< P>如果你只需要一个没有矢量数学和Pymel或API的快速解决方案,你可以使用<代码> CMDS.PultSimultBuffest<代码>找到与普通对齐的脸。您只需选择所有面,然后使用约束仅获取指向正确方向的面。这将选择网格中沿给定轴指向的所有面:

import maya.cmds as cmds
def select_faces_by_axis (mesh, axis = (0,1,0), tolerance = 45):
    cmds.select(mesh + ".f[*]")
    cmds.polySelectConstraint(mode = 3, type = 8, orient = 2, orientaxis = axis, orientbound = (0, tolerance))
    cmds.polySelectConstraint(dis=True)  # remember to turn constraint off!
是您想要的x、y、z轴,
公差
是您可以容忍的倾斜度。为了得到向下的面,你会这样做

select_faces_by_axis ('your_mesh_here', (0,0,-1))


这种方法的优点主要是在玛雅的C++中运行,它比Python的方法在网格中的所有面上都要快。如果立方体绕另一个轴旋转,则没有直接指向Y轴的面检查每个面的法线方向?此外,如果立方体绕另一个轴旋转,则没有直接指向Y轴的面,或者选择所有向下看的面使用cmds替换打印。选择(face,add=True)或选择所有向下看的面使用cmds替换打印。选择(face,add=True)我已经测试过了,但您的代码似乎有点错误。在一个有很多面和一些斜面的立方体上。它输出指向x和-x的两个面以及倒角的所有面。ababak的代码似乎给出了更好的结果。是的,它输出了法线指向-y的所有面,即使它只向下一点点。但是您可以通过将“<0.0”变小,比如“<-0.2”,来轻松地调整它。我测试它是为了好玩,但您的代码似乎有点问题。在一个有很多面和一些斜面的立方体上。它输出指向x和-x的两个面以及倒角的所有面。ababak的代码似乎给出了更好的结果。是的,它输出了法线指向-y的所有面,即使它只向下一点点。但您可以通过将“<0.0”变小,如“<-0.2”来轻松调整它。