首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从剖切面提取数据

从剖切面提取数据
EN

Stack Overflow用户
提问于 2013-09-13 14:39:48
回答 1查看 1.9K关注 0票数 2

我写了以下代码(为了更好的阅读而简化)来读取结构化网格并通过我的体积绘制剖切面。关于可视化,一切都很好:我得到了一个很好的等高线图,剖切面穿过它。但是,我无法提取剖切面中显示的数据。有没有办法提取与我的剖切面相关的坐标和数据(“强度”-见下文)?

代码语言:javascript
复制
self._reader = vtk.vtkXMLStructuredGridReader()
self._reader.SetFileName(filename)
self._reader.Update()

self._reader.GetOutput().GetPointData().SetActiveScalars("Intensity")

self._isoContour = vtk.vtkContourFilter()
self._isoContour.SetInputConnection(self._reader.GetOutputPort())
self._isoContour.SetValue(0,100)

self.mapper = vtk.vtkPolyDataMapper()
self.mapper.SetInputConnection(self._reader.GetOutputPort())
self.mapper.ScalarVisibilityOn()
self.mapper.Update()

self._surface = vtk.vtkActor()
self._surface.SetMapper(self.mapper)
self._surface.GetProperty().SetRepresentationToWireframe()

plane = vtk.vtkPlane()
plane.SetOrigin(self._reader.GetOutput().GetCenter())
plane.SetNormal(0, 0, 1)

planeCut = vtk.vtkCutter()
planeCut.SetInput(self._reader.GetOutput())
planeCut.SetCutFunction(plane)

cutMapper = vtk.vtkPolyDataMapper()
cutMapper.SetInputConnection(planeCut.GetOutputPort())
cutMapper.SetLookupTable(table)
cutMapper.SetScalarRange(0,100)

cutActor = vtk.vtkActor()
cutActor.SetMapper(cutMapper)

self._renderer.AddActor(self._surface) 
self._renderer.AddActor(cutActor)

self._iren.Render()

非常感谢你的帮助

埃里克

EN

回答 1

Stack Overflow用户

发布于 2014-05-10 21:47:09

这就是我要做的,写出数据:

代码语言:javascript
复制
self._reader.GetOutput().GetPointData().SetActiveScalars("Intensity")

planeCut = vtk.vtkCutter()
planeCut.SetInput(self._reader.GetOutput())
planeCut.SetCutFunction(plane)

planeCut.Update()

#DataSet of your cut:
planeCutPolyData=planeCut.GetOutput()

#Let write all the slice data:
w=vtk.vtkPolyDataWriter()
w.SetFileName('anyfilename.vtp')
w.SetInputConnection(placeCut.GetOutputPort())
w.Write()

vtk用户是寻找示例的好地方。这是一个关于从polyData:http://vtk.1045678.n5.nabble.com/Polydata-get-point-coordinates-td3214274.html中提取坐标的问题,使用与David的示例类似的表示法,尝试:

代码语言:javascript
复制
#... insert code to generate planeCut
planeCut.Update()    
for i in xrange(planeCut.GetOutput().GetNumberOfPoints()):
  p=[0,0,0]
  planeCut.GetOutput().GetPoint(i, p)
  print p[0],p[1],p[2] 

您还可以将数据传递给numpy,在vtk用户上,有一个示例:http://vtk.1045678.n5.nabble.com/Extract-Data-from-vtkImageReslice-to-numpy-array-td1246899.html#a1246902。在与Eric的示例相同的表示法中,您可以尝试:

代码语言:javascript
复制
import vtk.util.numpy_support as VN
#... insert code to generate planceCut
planeCut.Update()
pointData=planeCut.GetOutput().GetPointData() 
intensityPointArray= VN.vtk_to_numpy(pointData.GetArray('Intensity')) 
cellData=planeCut.GetOutput().GetCellData() 
intensityCellArray= VN.vtk_to_numpy(pointData.GetArray('Intensity')) 

还有更多关于vtk用户归档的示例:)

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18779799

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档