如何获取选择Mesh物体 选择 点 线 面 ID 编号?


如何获取 选择面的 两个 ID 号 (5,9),
又如何 自定义的 自动去选择 指定的 点 线 面

这里给一个获取网格面序号的范例,其他都差不多:

# coding=utf-8
import rhinoscriptsyntax as rs

mesh_guid = rs.GetObject("点击要选取子面的网格",filter=rs.filter.mesh)
mesh_id_list = rs.GetMeshFaces(mesh_guid, "选取子面")

print(mesh_id_list)

这种只能一步步的来 先选择物体,在选中面。。。

如果我想 提前选择好了面。。通过面得到物体,在得到选择的ID 呢。。。卡在 通过面 得到物体这步。

import rhinoscriptsyntax as rs
import Rhino

AllmeshOBJ = rs.ObjectsByType(32, False)
for o in AllmeshOBJ :
mesh = rs.coercemesh(o)
MeshObject = Rhino.DocObjects.Custom.CustomMeshObject(mesh) #######
Indelist = MeshObject.GetSelectedSubObjects()

本想是 得到所有mesh物体,在依次通过物体上的 子选择数量 来判断 但是 对Common 还不是很熟悉 报错。

报错的原因是,Rhino.DocObjects.Custom.CustomMeshObject 是个抽象类,不能直接实例化。
用 RhinoCommon 选择物件的话可以用 Rhino.Input.Custom.GetObject

另外,发代码把代码格式化一下,python 的格式没有了很难看清楚是哪个块里面的:

在讨论区贴代码时语法高亮的方法

还是用 RhinoCommon 写了一个网格面的范例,其他都差不多,这个支持预选,也支持执行脚本以后再选网格面:

# coding=utf-8
import Rhino
import scriptcontext as sc

def getMeshFacesId():
    go = Rhino.Input.Custom.GetObject()
    go.SetCommandPrompt("选取网格面");
    go.GeometryFilter = Rhino.DocObjects.ObjectType.MeshFace;
    go.SubObjectSelect=True
    go.GroupSelect=False
    go.EnablePreSelect(True,True)
    go.GetMultiple(1,0)
    if go.CommandResult() != Rhino.Commands.Result.Success:
        return None
    objs = go.Objects()
    result = [item.GeometryComponentIndex.Index for item in objs]
    go.Dispose()
    return result

selected_faces_id_list = getMeshFacesId()
print selected_faces_id_list
2 个赞