无锡市网站,查网站是什么公司做的,建设银行的网站首页,东莞南城电子网站建设简介
在STL几何模型处理的过程中#xff0c;经常需要判断一个点是否在模型的内部。网上给出的资料主要是使用C vtk的#xff0c;而python vtk的很少。本文给出了一段精简版的python代码#xff0c;实现判断任意坐标点在STL几何模型的内部或外部。
代码
首先定义三个函数 …简介
在STL几何模型处理的过程中经常需要判断一个点是否在模型的内部。网上给出的资料主要是使用C vtk的而python vtk的很少。本文给出了一段精简版的python代码实现判断任意坐标点在STL几何模型的内部或外部。
代码
首先定义三个函数
import vtkdef create_enclosed_points(path):# 读取STL文件reader vtk.vtkSTLReader()reader.SetFileName(path)reader.Update()# 获取STL模型的几何数据polydata reader.GetOutput()# 创建vtkSelectEnclosedPoints对象select_enclosed_points vtk.vtkSelectEnclosedPoints()select_enclosed_points.SetSurfaceData(polydata)select_enclosed_points.SetTolerance(0.001) # 设置容差值可根据实际情况进行调整select_enclosed_points.Update()return select_enclosed_pointsdef create_test_points(points_array):points vtk.vtkPoints()for item in points_array:points.InsertNextPoint(item[0], item[1], item[2]) # 第i个待测试点# 创建vtkPolyData对象并将待测试点添加到其中test_points vtk.vtkPolyData()test_points.SetPoints(points)return test_pointsdef get_is_insides(enclosed_points, test_points):# 将待测试点设置为输入点enclosed_points.SetInputData(test_points)# 执行点的包含性检查enclosed_points.Update()# 检查点是否在STL模型内部is_insides enclosed_points.IsInsidereturn is_insides调用方式
enclosed_points create_enclosed_points(data/GRAIN_PNG/m/orb.stl)input_data create_test_points([(0.0, 0.0, 0.5), (0.0, 1.1, 0.5)])is_insides get_is_insides(enclosed_points, input_data)print(is_insides(0)) # 第一个待测试点
print(is_insides(1)) # 第二个待测试点代码中路径data/GRAIN_PNG/m/orb.stl是一个半径为1的标准球体需要判断坐标(0.0, 0.0, 0.5)和(0.0, 1.1, 0.5)这两个测试点是否在球体内。
运行代码后返回结果为
1
0这表明第一个测试点在球内第二个测试点在球外