VTK学习笔记(二十八)ExtractEnclosedPoints python示例
VTK学习笔记(二十八)ExtractEnclosedPoints python示例
- 1、Python vtkSelectEnclosedPoints Examples
- 1.1、File: findPointsInCell.py Project: gacevedobolton/myVTKPythonLibrary
- 1.2、File: world.py Project: cjauvin/pypetree
- 1.3、File: vtklib.py Project: ajgeers/utils
- 1.4、File: TissuePunctures.py Project: PerkTutor/PythonMetrics
- 1.5、File: STL_VTK.py Project: ksiezykm/GeometryGenerator
- 1.6、File: surftools.py Project: dgoyard/pyfreesurfer
- 1.7、File: vtk_itf.py Project: dladd/pyFormex
- 2、CellsInsideObject
- 2.1、代码
- 2.2、执行
- 3、检查polydata1在polydata2内
- 3.1、函数代码
- 3.2、输入polydata
- 3.3、打印信息
- 3.4、输出分析
1、Python vtkSelectEnclosedPoints Examples
Python vtkSelectEnclosedPoints - 10 examples found. These are the top rated real world Python examples of vtk.vtkSelectEnclosedPoints extracted from open source projects. You can rate examples to help us improve the quality of examples.
1.1、File: findPointsInCell.py Project: gacevedobolton/myVTKPythonLibrary
def findPointsInCell(points,cell,verbose=1):ugrid_cell = vtk.vtkUnstructuredGrid()ugrid_cell.SetPoints(cell.GetPoints())cell = vtk.vtkHexahedron()for k_point in xrange(8): cell.GetPointIds().SetId(k_point, k_point)cell_array_cell = vtk.vtkCellArray()cell_array_cell.InsertNextCell(cell)ugrid_cell.SetCells(vtk.VTK_HEXAHEDRON, cell_array_cell)geometry_filter = vtk.vtkGeometryFilter()geometry_filter.SetInputData(ugrid_cell)geometry_filter.Update()cell_boundary = geometry_filter.GetOutput()pdata_points = vtk.vtkPolyData()pdata_points.SetPoints(points)enclosed_points_filter = vtk.vtkSelectEnclosedPoints()enclosed_points_filter.SetSurfaceData(cell_boundary)enclosed_points_filter.SetInputData(pdata_points)enclosed_points_filter.Update()points_in_cell = [k_point for k_point in xrange(points.GetNumberOfPoints()) if enclosed_points_filter.GetOutput().GetPointData().GetArray('SelectedPoints').GetTuple(k_point)[0]]return points_in_cell
1.2、File: world.py Project: cjauvin/pypetree
def select_point_cloud(self):if not self.scene.get_active_point_cloud(): returnself.unselect_point_cloud()transform = vtk.vtkTransform()transform.SetMatrix(self.actor.GetMatrix())transform_filter = vtk.vtkTransformPolyDataFilter()transform_filter.SetInputConnection(self.src.GetOutputPort())transform_filter.SetTransform(transform)enclosed_pts = vtk.vtkSelectEnclosedPoints()if USING_VTK6:enclosed_pts.SetInputData(self.scene.get_active_point_cloud().polydata)enclosed_pts.SetSurfaceConnection(transform_filter.GetOutputPort())else:enclosed_pts.SetInput(self.scene.get_active_point_cloud().polydata)enclosed_pts.SetSurface(transform_filter.GetOutput())enclosed_pts.Update()inside_arr = enclosed_pts.GetOutput().GetPointData().\GetArray('SelectedPoints')self.selected_pts = []for i in range(inside_arr.GetNumberOfTuples()):if inside_arr.GetComponent(i, 0):self.scene.get_active_point_cloud().colors.\SetTuple3(i, *name_to_rgb('blue'))self.selected_pts.append(i)self.scene.get_active_point_cloud().selected_pts[i] += 1self.scene.get_active_point_cloud().colors.Modified()self.frame.ren_win.Render()
1.3、File: vtklib.py Project: ajgeers/utils
def insidepoints(points, surface, tolerance=1e-4):"""Mark points as to whether they are inside a closed surface"""marker = vtk.vtkSelectEnclosedPoints()marker.SetInput(points)marker.SetSurface(surface)marker.SetTolerance(tolerance)marker.Update()return marker.GetOutput()
1.4、File: TissuePunctures.py Project: PerkTutor/PythonMetrics
def SetAnatomy( self, role, node ):if ( role == "Tissue" and node.GetPolyData() != None ):self.tissueNode = nodeself.enclosedFilter = vtk.vtkSelectEnclosedPoints()self.enclosedFilter.Initialize( self.tissueNode.GetPolyData() ) return Truereturn False
1.5、File: STL_VTK.py Project: ksiezykm/GeometryGenerator
def IsInsideCheck(pX,pY,pZ,mesh):select = vtk.vtkSelectEnclosedPoints()select.SetSurface(mesh)select.SetTolerance(.00001)pts = vtk.vtkPoints()pts.InsertNextPoint((pX),(pY),(pZ))pts_pd = vtk.vtkPolyData()pts_pd.SetPoints(pts)select.SetInput(pts_pd)select.Update()# print pX,pY,pZ,select.IsInside(0)return select.IsInside(0)
1.6、File: surftools.py Project: dgoyard/pyfreesurfer
def voxelize(self, shape, tol=0):""" Compute the enclosed points of the TriSurface.This code uses vtk.Parameters----------shape: 3-upletthe image shape.Returns-------inside_array: arraya mask array with the enclosed voxels."""# Import here since vtk is not required by the packageimport vtkfrom vtk.util.numpy_support import vtk_to_numpy# Construct the mesh grid from shapenx, ny, nz = shapegridx, gridy, gridz = numpy.meshgrid(numpy.linspace(0, nx - 1, nx),numpy.linspace(0, ny - 1, ny),numpy.linspace(0, nz - 1, nz))# Create polydatavtk_points = vtk.vtkPoints()for point in zip(gridx.flatten(), gridy.flatten(), gridz.flatten()):vtk_points.InsertNextPoint(point)points_polydata = vtk.vtkPolyData()points_polydata.SetPoints(vtk_points)surf_polydata = self._polydata()# Compute enclosed pointsenclosed_pts = vtk.vtkSelectEnclosedPoints()enclosed_pts.SetInput(points_polydata)enclosed_pts.SetTolerance(tol)enclosed_pts.SetSurface(surf_polydata)enclosed_pts.SetCheckSurface(1)enclosed_pts.Update()inside_points = enclosed_pts.GetOutput().GetPointData().GetArray("SelectedPoints")enclosed_pts.ReleaseDataFlagOn()enclosed_pts.Complete()# Convert result as a numpy arrayinside_array = vtk_to_numpy(inside_points).reshape(ny, nx, nz)inside_array = numpy.swapaxes(inside_array, 1, 0)return inside_array
1.7、File: vtk_itf.py Project: dladd/pyFormex
def vtkPointInsideObject(S,P,tol=0.):"""vtk function to test which of the points P are inside surface S"""from vtk import vtkSelectEnclosedPointsvpp = convert2VPD(P)vps =convert2VPD(S,clean=False)enclosed_pts = vtkSelectEnclosedPoints()enclosed_pts.SetInput(vpp)enclosed_pts.SetTolerance(tol)enclosed_pts.SetSurface(vps)enclosed_pts.SetCheckSurface(1)enclosed_pts.Update()inside_arr = enclosed_pts.GetOutput().GetPointData().GetArray('SelectedPoints')enclosed_pts.ReleaseDataFlagOn()enclosed_pts.Complete()del enclosed_ptsreturn asarray(v2n(inside_arr),'bool')
参考:Python vtkSelectEnclosedPoints Examples
2、CellsInsideObject
2.1、代码
#!/usr/bin/env pythonimport vtkdef get_program_parameters():import argparsedescription = 'Read a polydata file of a surface and determine if it is a closed surface.'epilogue = '''
This example illustrates how to extract the cells that exist inside a closed surface.
It uses vtkSelectEnclosedPoints to mark points that are inside and outside the surface.
vtkMultiThreshold is used to extract the three meshes into three vtkMultiBlockDataSet's.
The cells completely outside are shown in crimson, completely inside are yellow andborder cells are green.
A translucent copy of the closed surface helps illustrate the selection process.If two polydata datasets are provided, the example uses the second as the closed surface.
If only one dataset is provided, the closed surface is generated by rotating thefirst dataset by 90 degrees around its Y axis.'''parser = argparse.ArgumentParser(description=description, epilog=epilogue,formatter_class=argparse.RawDescriptionHelpFormatter)parser.add_argument('filename1', help='Enter a polydata file e.g cow.g.')parser.add_argument('filename2', default=None, nargs='?', help='Enter another polydata file e.g cow.g.')args = parser.parse_args()return args.filename1, args.filename2def ReadPolyData(file_name):import ospath, extension = os.path.splitext(file_name)extension = extension.lower()if extension == ".ply":reader = vtk.vtkPLYReader()reader.SetFileName(file_name)reader.Update()poly_data = reader.GetOutput()elif extension == ".vtp":reader = vtk.vtkXMLpoly_dataReader()reader.SetFileName(file_name)reader.Update()poly_data = reader.GetOutput()elif extension == ".obj":reader = vtk.vtkOBJReader()reader.SetFileName(file_name)reader.Update()poly_data = reader.GetOutput()elif extension == ".stl":reader = vtk.vtkSTLReader()reader.SetFileName(file_name)reader.Update()poly_data = reader.GetOutput()elif extension == ".vtk":reader = vtk.vtkpoly_dataReader()reader.SetFileName(file_name)reader.Update()poly_data = reader.GetOutput()elif extension == ".g":reader = vtk.vtkBYUReader()reader.SetGeometryFileName(file_name)reader.Update()poly_data = reader.GetOutput()else:# Return a None if the extension is unknown.poly_data = Nonereturn poly_datadef main():fn1, fn2 = get_program_parameters()polyData1 = ReadPolyData(fn1)if fn2:polyData2 = ReadPolyData(fn1)else:# If only one polydata is present, generate a second polydata by# rotating the original about its center.print('Generating modified polyData1')center = polyData1.GetCenter()transform = vtk.vtkTransform()transform.Translate(center[0], center[1], center[2])transform.RotateY(90.0)transform.Translate(-center[0], -center[1], -center[2])transformPD = vtk.vtkTransformPolyDataFilter()transformPD.SetTransform(transform)transformPD.SetInputData(polyData1)transformPD.Update()polyData2 = transformPD.GetOutput()# Mark points inside with 1 and outside with a 0select = vtk.vtkSelectEnclosedPoints()select.SetInputData(polyData1)select.SetSurfaceData(polyData2)# Extract three meshes, one completely inside, one completely# outside and on the border between the inside and outside.threshold = vtk.vtkMultiThreshold()# Outside points have a 0 value in ALL points of a celloutsideId = threshold.AddBandpassIntervalSet(0, 0,vtk.vtkDataObject.FIELD_ASSOCIATION_POINTS, "SelectedPoints",0, 1)# Inside points have a 1 value in ALL points of a cellinsideId = threshold.AddBandpassIntervalSet(1, 1,vtk.vtkDataObject.FIELD_ASSOCIATION_POINTS, "SelectedPoints",0, 1)# Border points have a 0 or a 1 in at least one point of a cellborderId = threshold.AddIntervalSet(0, 1,vtk.vtkMultiThreshold.OPEN, vtk.vtkMultiThreshold.OPEN,vtk.vtkDataObject.FIELD_ASSOCIATION_POINTS, "SelectedPoints",0, 0)threshold.SetInputConnection(select.GetOutputPort())# Select the intervals to be outputthreshold.OutputSet(outsideId)threshold.OutputSet(insideId)threshold.OutputSet(borderId)threshold.Update()# Visualizecolors = vtk.vtkNamedColors()outsideColor = colors.GetColor3d("Crimson")insideColor = colors.GetColor3d("Banana")borderColor = colors.GetColor3d("Mint")surfaceColor = colors.GetColor3d("Peacock")backgroundColor = colors.GetColor3d("Silver")# OutsideoutsideMapper = vtk.vtkDataSetMapper()outsideMapper.SetInputData(threshold.GetOutput().GetBlock(outsideId).GetBlock(0))outsideMapper.ScalarVisibilityOff()outsideActor = vtk.vtkActor()outsideActor.SetMapper(outsideMapper)outsideActor.GetProperty().SetDiffuseColor(outsideColor)outsideActor.GetProperty().SetSpecular(.6)outsideActor.GetProperty().SetSpecularPower(30)# InsideinsideMapper = vtk.vtkDataSetMapper()insideMapper.SetInputData(threshold.GetOutput().GetBlock(insideId).GetBlock(0))insideMapper.ScalarVisibilityOff()insideActor = vtk.vtkActor()insideActor.SetMapper(insideMapper)insideActor.GetProperty().SetDiffuseColor(insideColor)insideActor.GetProperty().SetSpecular(.6)insideActor.GetProperty().SetSpecularPower(30)insideActor.GetProperty().EdgeVisibilityOn()# BorderborderMapper = vtk.vtkDataSetMapper()borderMapper.SetInputData(threshold.GetOutput().GetBlock(borderId).GetBlock(0))borderMapper.ScalarVisibilityOff()borderActor = vtk.vtkActor()borderActor.SetMapper(borderMapper)borderActor.GetProperty().SetDiffuseColor(borderColor)borderActor.GetProperty().SetSpecular(.6)borderActor.GetProperty().SetSpecularPower(30)borderActor.GetProperty().EdgeVisibilityOn()surfaceMapper = vtk.vtkDataSetMapper()surfaceMapper.SetInputData(polyData2)surfaceMapper.ScalarVisibilityOff()# Surface of object containing cellsurfaceActor = vtk.vtkActor()surfaceActor.SetMapper(surfaceMapper)surfaceActor.GetProperty().SetDiffuseColor(surfaceColor)surfaceActor.GetProperty().SetOpacity(.1)renderer = vtk.vtkRenderer()renderWindow = vtk.vtkRenderWindow()renderWindow.AddRenderer(renderer)renderWindow.SetSize(640, 480)renderWindowInteractor = vtk.vtkRenderWindowInteractor()renderWindowInteractor.SetRenderWindow(renderWindow)renderer.SetBackground(backgroundColor)renderer.UseHiddenLineRemovalOn()renderer.AddActor(surfaceActor)renderer.AddActor(outsideActor)renderer.AddActor(insideActor)renderer.AddActor(borderActor)renderWindow.SetWindowName('CellsInsideObject')renderWindow.Render()renderer.GetActiveCamera().Azimuth(30)renderer.GetActiveCamera().Elevation(30)renderer.GetActiveCamera().Dolly(1.25)renderWindow.Render()renderWindowInteractor.Start()if __name__ == '__main__':main()
2.2、执行
python ./PolyData/CellsInsideObject.py ../Testing/Data/cow.g
3、检查polydata1在polydata2内
3.1、函数代码
def judge_polydata_One_in_another(self, polyData1, polyData2, tolerance=1e-3):# Mark points inside with 1 and outside with a 0print("polyData1: \n", polyData1)select = vtk.vtkSelectEnclosedPoints()select.SetInputData(polyData1)select.SetSurfaceData(polyData2)# select.SetTolerance(tolerance)# select.SetCheckSurface(1)select.Update()inside_arr = select.GetOutput().GetPointData().GetArray("SelectedPoints")print("inside_arr \n", inside_arr)in_count = 0out_count = 0all_count = inside_arr.GetNumberOfTuples()print("all_count \n", all_count)for i in range(inside_arr.GetNumberOfTuples()):if inside_arr.GetComponent(i, 0):in_count += 1else:out_count += 1print("in_count \n", in_count)print("out_count \n", out_count)
3.2、输入polydata
3.3、打印信息
下面只截取了我认为有用的重要信息:
polyData1: vtkPolyData (000001E8A33E1680)Debug: OffModified Time: 2908271Reference Count: 3Registered Events: Registered Observers:vtkObserver (000001E8A3B3C1A0)Event: 36EventName: ModifiedEventCommand: 000001E8A3B3C260Priority: 0Tag: 1Information: 000001E8A3AD23A0Data Released: FalseGlobal Release Data: OffUpdateTime: 2908667Field Data:Debug: OffModified Time: 2908096Reference Count: 1Registered Events: (none)Number Of Arrays: 0Number Of Components: 0Number Of Tuples: 0Number Of Points: 1894Number Of Cells: 3892
inside_arr vtkUnsignedCharArray (000001E8A39160A0)Debug: OffModified Time: 2912431Reference Count: 3Registered Events: (none)Name: SelectedPointsData type: unsigned charSize: 1894MaxId: 1893NumberOfComponents: 1Information: 0000000000000000Name: SelectedPointsNumber Of Components: 1Number Of Tuples: 1894Size: 1894MaxId: 1893LookupTable: (none)all_count 1894
in_count 1833
out_count 61
3.4、输出分析
通过上述打印信息与图片可以知道,polydata1只有极小的一部分点在polydata2之外。
如果polydata1的所有点都在polydata2之内,则可以判断 polydata1在polydata2之内。
当只有极小一部分点在外面时,可以调整polydata1的位置,使其全部包含在polydata2之内。
通过上述打印信息还可以知道,判断时实际上时遍历了polydata1的左右点数据,并对在polydata2内的数据标记了1,在polydata2外的数据标记了0,如果polydata1的点数据是有序的并且可以获取到,那么就可以找到在polydata2外的点,然后就可以根据这些点的相对与polydata1和polydata2的位置,调整polydata1的姿态,使polydata1完全包含在polydata2之内。
VTK学习笔记(二十八)ExtractEnclosedPoints python示例相关推荐
- 嵌入式系统设计师学习笔记二十八:嵌入式程序设计③——高级程序设计语言
嵌入式系统设计师学习笔记二十八:嵌入式程序设计③--高级程序设计语言 解释程序和编译程序 编译器的工作阶段示意图 语法错误:非法字符,关键字或标识符拼写错误 语法错误:语法结构出错,if--endif ...
- Mr.J-- jQuery学习笔记(二十八)--DOM操作方法(添加方法总结)
Table of Contents appendTo appendTo(source, target) 源代码 append prependTo prependTo源码 prepend ...
- 立创eda学习笔记二十八:在嘉立创购买pcb板并贴片(smt)
完整的写一下,分为两部分: 1.下pcb订单 这个可以看之前写的一个博客: 立创eda学习笔记三:pcb购买_Gutie_bartholomew的博客-CSDN博客 补充一下,买pcb可以直接有几个途 ...
- OpenCV学习笔记(十六)——CamShift研究 OpenCV学习笔记(十七)——运动分析和物体跟踪Video OpenCV学习笔记(十八)——图像的各种变换(cvtColor*+)imgproc
OpenCV学习笔记(十六)--CamShift研究 CamShitf算法,即Continuously Apative Mean-Shift算法,基本思想就是对视频图像的多帧进行MeanShift运算 ...
- OpenCV学习笔记(十八):凸包,最小包围区域算子:convexHull(),minAreaRect(),minEnclosingTriangle(),minEnclosingCircle()
OpenCV学习笔记(十八):凸包,最小包围区域算子:convexHull(),minAreaRect(),minEnclosingTriangle(),minEnclosingCircle() 1. ...
- MATLAB学习笔记(十八)
MATLAB学习笔记(十八) 一.Simulink仿真基础 1.1 Simulink的启动 1.2 系统仿真模型的创建 1.3 仿真参数的设置 1.4 总结 二.子系统的创建与封装 2.1 子系统的创 ...
- JavaScript学习(二十八)—事件冒泡和事件捕获
JavaScript学习(二十八)-事件冒泡和事件捕获 一.什么是事件流? 简单说,事件流就是指事件的执行顺序,他包含两种模式:事件冒泡.事件捕获. (一).事件冒泡 最常用的一种模式,就是指事件的执 ...
- uniapp 学习笔记二十二 购物车页面结构搭建
uniapp 学习笔记二十二 购物车页面结构搭建 cart.vue <template><view><view class="flex padding" ...
- Polyworks脚本开发学习笔记(二十)-补充几个常见操作指令的使用
Polyworks脚本开发学习笔记(二十)-补充几个常见操作指令的使用 大概要写到结尾了,最后几篇就将手册的各常用命令再看一遍,组合一下,并列举出常见的一些有用的操作. DATA_COLOR_MAP数 ...
- 计算机二级C语言学习笔记(十八)
上一篇:计算机二级C语言学习笔记(十七) 程序填空题(二) 题型二:平均值 首先求和,然后将和除以项数 ===================================== ========== ...
最新文章
- 认证连接_长江连接器哪些产品通过认证?
- 数据中心、云计算、大数据之间的区别与联系
- nginx+tornado与nginx+go的性能测试
- Win7下telnet使用
- nginx静态文件服务器_Linux分享文件?快速创建静态文件服务器
- Python在运维工作中的经典应用之ansible
- js中获取中文相应gbk编码
- 第9章 项目-房屋出租系统
- 苹果企业开发者账号证书申请(保姆级)
- python安装报错error: pybind11 2.10+ requires MSVC 2017 or newer
- python画circos图_手把手教你画Circos图
- Unbuntu 安装 TeamViewer14
- python 调用另一个python文件
- Maven 编译时缺少依赖,java: 程序包org.apache.http不存在
- 矩阵变换:矩阵是怎样变换向量的
- ubuntu windows 分别安装openslide
- 基于MATLAB的路面裂缝检测识别算法仿真
- reshape2包的基本用法(melt及cast)
- HTML 5 参考手册,HTML 5 标准属性,HTML 5 事件属性
- 基于单片机的自动化硬币分拣找零系统设计