如何从PyVista的PolyData对象直接获取extract_feature_edges()提取的边界点索引
如何从PyVista的PolyData对象直接获取extract_feature_edges()提取的边界点索引
嘿,我太懂你不想靠numpy.where来凑的心情了——PyVista其实早就给你准备了更直接的方式,完全不用自己折腾坐标匹配那一套~
你用extract_feature_edges()提取出来的边界边对象(也就是你代码里的edges),其实自带了和原网格对应的点索引信息。当PyVista从原网格提取子数据集时,会自动把每个子点对应的原网格点ID存在point_data的vtkOriginalPointIds字段里,你直接读取这个字段就能拿到原PolyData里的边界点索引了,既高效又能避免浮点数匹配可能带来的精度问题。
修改后的代码大概是这样:
bot_surf_file = r'bottom.stl' bot_surf_mesh = pv.PolyData(bot_surf_file) # 只提取边界边,过滤其他类型的特征边 edges = bot_surf_mesh.extract_feature_edges(boundary_edges=True, feature_edges=False, manifold_edges=False) # 直接获取原网格中的边界点索引 edge_points_indices = edges.point_data['vtkOriginalPointIds']
哦对了,我在调用extract_feature_edges的时候额外加了feature_edges=False, manifold_edges=False这两个参数,这样可以确保只提取你需要的边界边,过滤掉其他类型的特征边,让结果更纯净——如果你本来就只想要边界边的话,加上会更精准。
这样拿到的edge_points_indices就是一个一维数组,里面全是原bot_surf_mesh中属于边界的点的索引,完全不用再碰numpy.where,完美契合你的需求~
备注:内容来源于stack exchange,提问作者IzaeDA
相关产品推荐
相关产品推荐

