You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用Python Trimesh获取网格的边界顶点索引?

如何用Trimesh检索网格边界的顶点索引

核心解决方案:用Trimesh内置的边界边提取顶点

Trimesh提供了直接获取边界边的属性,从边界边中提取去重后的顶点就是你需要的边界顶点,适用于所有开口网格(平面带洞、开口圆柱等):

import trimesh
import numpy as np

# 加载或创建你的网格实例
mesh = trimesh.load("your_mesh_file.obj")

# 获取所有边界边(仅属于单个面的边)
boundary_edges = mesh.edges_boundary

# 提取边界顶点并去重
boundary_vertex_indices = np.unique(boundary_edges.flatten())

为什么你之前尝试的属性无效

  • edges:返回的是每个面的所有边,每个面的边都会被重复记录,因此条目数远多于顶点数,无法直接得到边界。
  • edges_unique:返回所有不重复的边,但包含内部边(属于两个面的边),并非仅边界边。
  • facets_boundary:返回的是带有边界边的面,而非边界顶点,仅适合平面网格的边缘面检索,对开口圆柱这类没有边缘面的网格不适用。

关于np.bincount的替代思路

你提到的vertex_counts = np.bincount(faces.flatten())方法,本质是统计每个顶点被多少个面包含:边界顶点的包含次数通常少于内部顶点。但这个方法的通用性很差——不同拓扑的网格(三角形/四边形面),边界顶点的次数阈值不同,比如你给出的圆柱网格中边界顶点次数是3,而平面网格的角落顶点次数是1/2。如果你的网格拓扑固定,或许可以用这个阈值筛选,但可靠性远不如内置的edges_boundary方法,不推荐作为通用方案。

内容的提问来源于stack exchange,提问作者KevinM

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.19 06:02:03