如何在Python中导入OBJ模型并实现顶点可视化与部件标注?
你的需求完全可行,下面分别用PyVista和Vedo给出具体实现方案:
PyVista 实现方案
1. 查看单个顶点
导入模型后,通过开启顶点可见性及可选的顶点编号显示,就能像Blender编辑模式那样看到单个顶点:
import pyvista as pv # 导入OBJ模型 mesh = pv.read("your_model.obj") # 创建绘图器并配置顶点显示 plotter = pv.Plotter() # 显示顶点,设置点大小和颜色 plotter.add_mesh(mesh, show_vertices=True, point_size=5, vertex_color="red") # 可选:显示每个顶点的编号 plotter.add_point_labels(mesh.points, [str(i) for i in range(mesh.n_points)], point_size=5) plotter.show()
2. 为特定部件分配标签
方法一:预设部件索引批量标记
如果你已知模型部件对应的面/顶点索引范围,可以直接给模型添加标量数组作为标签,可视化时按标签着色区分:
import pyvista as pv mesh = pv.read("your_model.obj") # 假设前100个面属于部件A,剩余面属于部件B mesh["part_labels"] = ["A"] * 100 + ["B"] * (mesh.n_cells - 100) # 按标签着色显示模型,同时保留顶点可见性 plotter = pv.Plotter() plotter.add_mesh(mesh, scalars="part_labels", show_vertices=True, cmap="Set1") plotter.show()
方法二:交互式选择部件标记
如果不知道部件索引,可以开启交互选择模式,手动选中部件后添加标签:
import pyvista as pv plotter = pv.Plotter(interactive=True) plotter.add_mesh(mesh, show_vertices=True) # 启用面选择功能,点击模型即可选中对应面 plotter.enable_cell_picking() plotter.show() # 获取选中的面索引,给选中区域标记为"Selected Part" selected_cells = plotter.picked_cells if selected_cells: mesh["selected_part"] = [0] * mesh.n_cells for idx in selected_cells: mesh["selected_part"][idx] = 1 # 重新可视化,选中区域用蓝色高亮 plotter = pv.Plotter() plotter.add_mesh(mesh, scalars="selected_part", cmap=["white", "blue"], show_vertices=True) plotter.show()
Vedo 实现方案
1. 查看单个顶点
Vedo支持直接开启顶点显示,还能添加顶点编号:
from vedo import Mesh, show # 导入OBJ模型 mesh = Mesh("your_model.obj") # 开启顶点显示,设置点大小和颜色 mesh.show_vertices(point_size=5, color="red") # 可选:添加顶点编号 mesh.add_point_labels([str(i) for i in range(mesh.n_points)], size=0.5) show(mesh, axes=1)
2. 为特定部件分配标签
方法一:标量属性标记部件
给模型的顶点/面添加标签属性,通过着色区分不同部件:
from vedo import Mesh, show mesh = Mesh("your_model.obj") # 假设前501个顶点属于部件A,剩余属于部件B mesh.pointdata["part_labels"] = ["A"] * 501 + ["B"] * (mesh.n_points - 501) # 按标签颜色渲染模型 mesh.cmap("Set1", "part_labels", on="points") show(mesh, axes=1)
方法二:交互式选择后添加文本标签
通过交互选中部件,直接添加文本标签标注:
from vedo import Plotter, Mesh mesh = Mesh("your_model.obj") plt = Plotter() plt.add(mesh) # 开启交互模式,点击选中模型部件 plt.show(interactive=True) # 获取选中的部件,添加文本标签 selected = plt.selected_actors() if selected: plt.add_text("Part A", pos=selected[0].center(), color="black", size=0.8) plt.show()
内容的提问来源于stack exchange,提问作者Arkos
相关产品推荐
相关产品推荐

