在Maya中获取Isolate face group
程序员文章站
2022-03-19 15:00:04
...
问题描述:
Isolate face group 指的是,假设在网格中随机选择若干的面,如果有几个面是相邻的,并且不和其他面相邻,则把这几个面视作是一个isolate group.
例如上图的红色网格,品红色网格以及黄色网格就是三个独立的Isolate face group。
如果能够获取这个信息,我们就可以将每个Isolate face group视作为一个整体,来执行单独的操作。
解决方法:
Maya 中没有现成的命令来处理这个问题。
可以通过查询两个面是否存在共线来判断这两个面是否相邻,这样需要比较当前Isolate group里的每一个面,算法复杂度比较高。
我目前想到的另一个方法是使用UV Shell的ID来查询。如果是Isolate face group,他们的UV Shell也是不同的。这种做法的缺陷是,如果两个面没有共用的边,但有共用的顶点,他们也会共享一个UV Shell。
# 使用UV shell进行判断
import maya.cmds as mc
def get_isolate_face(all_face = None):
'''
:param selFace: 选择的面
:return: [[isolat_faceGrp01], [isolate_faceGrp02]...]
'''
if not all_face:
all_face = mc.ls(sl=True, fl=True)
mc.polyProjection(all_face, type='planar')
isolate_face = {}
for face in all_face:
mc.select(face, replace=True)
uv_shell_name = mc.polyEvaluate(mc.ls(sl=True, fl=True), activeUVShells=True)[0]
mc.select(clear=True)
if not isolate_face:
isolate_face[uv_shell_name] = []
isolate_face[uv_shell_name].append(face)
continue
if uv_shell_name in isolate_face.keys():
isolate_face[uv_shell_name].append(face)
else:
isolate_face[uv_shell_name] = []
isolate_face[uv_shell_name].append(face)
isolate_face_grp = [value for value in isolate_face.values()]
return isolate_face_grp
上一篇: 2020,当做世界第一等
下一篇: 钉钉小程序推送消息准备步骤