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示例相关推荐

  1. 嵌入式系统设计师学习笔记二十八:嵌入式程序设计③——高级程序设计语言

    嵌入式系统设计师学习笔记二十八:嵌入式程序设计③--高级程序设计语言 解释程序和编译程序 编译器的工作阶段示意图 语法错误:非法字符,关键字或标识符拼写错误 语法错误:语法结构出错,if--endif ...

  2. Mr.J-- jQuery学习笔记(二十八)--DOM操作方法(添加方法总结)

    Table of Contents appendTo appendTo(source, target) 源代码 append prependTo ​ ​ ​ ​ prependTo源码 prepend ...

  3. 立创eda学习笔记二十八:在嘉立创购买pcb板并贴片(smt)

    完整的写一下,分为两部分: 1.下pcb订单 这个可以看之前写的一个博客: 立创eda学习笔记三:pcb购买_Gutie_bartholomew的博客-CSDN博客 补充一下,买pcb可以直接有几个途 ...

  4. OpenCV学习笔记(十六)——CamShift研究 OpenCV学习笔记(十七)——运动分析和物体跟踪Video OpenCV学习笔记(十八)——图像的各种变换(cvtColor*+)imgproc

    OpenCV学习笔记(十六)--CamShift研究 CamShitf算法,即Continuously Apative Mean-Shift算法,基本思想就是对视频图像的多帧进行MeanShift运算 ...

  5. OpenCV学习笔记(十八):凸包,最小包围区域算子:convexHull(),minAreaRect(),minEnclosingTriangle(),minEnclosingCircle()

    OpenCV学习笔记(十八):凸包,最小包围区域算子:convexHull(),minAreaRect(),minEnclosingTriangle(),minEnclosingCircle() 1. ...

  6. MATLAB学习笔记(十八)

    MATLAB学习笔记(十八) 一.Simulink仿真基础 1.1 Simulink的启动 1.2 系统仿真模型的创建 1.3 仿真参数的设置 1.4 总结 二.子系统的创建与封装 2.1 子系统的创 ...

  7. JavaScript学习(二十八)—事件冒泡和事件捕获

    JavaScript学习(二十八)-事件冒泡和事件捕获 一.什么是事件流? 简单说,事件流就是指事件的执行顺序,他包含两种模式:事件冒泡.事件捕获. (一).事件冒泡 最常用的一种模式,就是指事件的执 ...

  8. uniapp 学习笔记二十二 购物车页面结构搭建

    uniapp 学习笔记二十二 购物车页面结构搭建 cart.vue <template><view><view class="flex padding" ...

  9. Polyworks脚本开发学习笔记(二十)-补充几个常见操作指令的使用

    Polyworks脚本开发学习笔记(二十)-补充几个常见操作指令的使用 大概要写到结尾了,最后几篇就将手册的各常用命令再看一遍,组合一下,并列举出常见的一些有用的操作. DATA_COLOR_MAP数 ...

  10. 计算机二级C语言学习笔记(十八)

    上一篇:计算机二级C语言学习笔记(十七) 程序填空题(二) 题型二:平均值 首先求和,然后将和除以项数 ===================================== ========== ...

最新文章

  1. 认证连接_长江连接器哪些产品通过认证?
  2. 数据中心、云计算、大数据之间的区别与联系
  3. nginx+tornado与nginx+go的性能测试
  4. Win7下telnet使用
  5. nginx静态文件服务器_Linux分享文件?快速创建静态文件服务器
  6. Python在运维工作中的经典应用之ansible
  7. js中获取中文相应gbk编码
  8. 第9章 项目-房屋出租系统
  9. 苹果企业开发者账号证书申请(保姆级)
  10. python安装报错error: pybind11 2.10+ requires MSVC 2017 or newer
  11. python画circos图_手把手教你画Circos图
  12. Unbuntu 安装 TeamViewer14
  13. python 调用另一个python文件
  14. Maven 编译时缺少依赖,java: 程序包org.apache.http不存在
  15. 矩阵变换:矩阵是怎样变换向量的
  16. ubuntu windows 分别安装openslide
  17. 基于MATLAB的路面裂缝检测识别算法仿真
  18. reshape2包的基本用法(melt及cast)
  19. HTML 5 参考手册,HTML 5 标准属性,HTML 5 事件属性
  20. 基于单片机的自动化硬币分拣找零系统设计

热门文章

  1. Cell Ranger
  2. win10网信政府版安装.NET Framework3.5
  3. 快速下载网页全部图片的方法
  4. 第 42 章 RTC—实时时钟
  5. 太阳能计算机屏幕是什么材质,电脑显示器表面是什么材质的 什么是液晶玻璃...
  6. recv函数linux,linux 下调用recv函数,死循环在recv函数里面,什么原因?
  7. Navicat 添加唯一索引
  8. 几种常用App原型设计工具详解
  9. JESD204B协议基础知识
  10. vue项目中配置跨域