Python 如何去除三角剖分的选择顺序

Python 如何去除三角剖分的选择顺序,python,selection,maya,Python,Selection,Maya,我正在尝试创建一个三角剖分(不确定这个词是否正确)脚本?基本上,我试图实现的是从定位器的选择中创建一个多边形(它必须是3个或更多定位器) 虽然我可以这样做,但我有这个选择顺序的问题。 在我的场景中,有4个定位器——loc1、loc2、loc3、loc4 如果我将select从loc1向上拖动到loc4,而不是像img01中那样创建多边形,它是按照定位器编号排序在img02中创建的? 在我看来,它是根据定位器的创建顺序对选择进行排序,这不是我想要做的 我错过什么了吗 我的代码: import ma

我正在尝试创建一个三角剖分(不确定这个词是否正确)脚本?基本上,我试图实现的是从定位器的选择中创建一个多边形(它必须是3个或更多定位器)

虽然我可以这样做,但我有这个选择顺序的问题。 在我的场景中,有4个定位器——loc1、loc2、loc3、loc4

如果我将select从loc1向上拖动到loc4,而不是像img01中那样创建多边形,它是按照定位器编号排序在img02中创建的? 在我看来,它是根据定位器的创建顺序对选择进行排序,这不是我想要做的

我错过什么了吗

我的代码:

import maya.cmds as cmds

pts = []

cmds.select( cmds.listRelatives( type = 'locator', fullPath = True, allDescendents = True ) )
cmds.select( cmds.listRelatives( parent = True, fullPath = True ) )
sel = cmds.ls ( selection = True, type = 'transform' )

if not sel:
    cmds.warning( "Please select a locator / No locators in selection " )


for loc in sorted(sel):
    coords = cmds.xform (loc, query=True, worldSpace=True, pivots=True)[0:3]
    print coords
    pts.append(coords)

cmds.polyCreateFacet(p = pts)

一个快速解决方案是让用户自行决定选择的顺序。为此,请在
cmds.ls()
中使用
orderedSelection
标志,而不仅仅是
selection
标志,并去掉
for
循环定义中的
sorted()
方法。这样,将根据用户的选择顺序创建多边形


如果你想更深入地研究三角剖分算法,不管怎样都能奏效,请查看@Basilevs参考答案:。

很抱歉,我尝试了你提到的方法,它无助于解决现有问题。它仍然给我的'交叉'多边形,如我的第二张照片。不过,感谢您提供的链接。目前,做这样的算法是我力所不及的:)使用orderedSelection的技术只是让用户按照正确的顺序选择定位器。除非用户随机或仅通过任意拖动选择定位器,否则它不会失败。