【发布时间】:2017-03-08 17:33:52
【问题描述】:
我想找到所有距离小于0.0003 的顶点并将它们作为列表返回。我使用以下算法,但对于大场景来说非常慢。你有什么提高速度的小窍门吗?
listOfAllMesh = cmds.ls(geometry=True,type="mesh")
overlapping = []
for meshToCek in listOfAllMesh:
listOFVertex=[]
cmds.select(meshToCek)
mel.eval("ConvertSelectionToVertices")
AllVertexes = cmds.ls(selection=True, flatten=True)
listOFVertex.append(AllVertexes[0])
Flag=False
for VertexToCek in AllVertexes[1:]:
c1=cmds.xform(VertexToCek, q=True, os=True, a=True, t=True)
for cek in listOFVertex:
c2=cmds.xform(cek, q=True, os=True, a=True, t=True)
distance = math.sqrt(math.pow(c2[0] - c1[0], 2) + math.pow(c2[1] - c1[1], 2) + math.pow(c2[2] - c1[2], 2))
if distance<0.0003:
overlapping.append(VertexToCek)
overlapping.append(cek)
Flag=True
if not Flag:
listOFVertex.append(VertexToCek)
Flag=False
return overlapping
【问题讨论】:
-
您可以先检查边界框是否相交。如果边界框不相交,则不应有相交的顶点