2013-09-13 2 views
2

Я написал следующий код (упрощенный для лучшего чтения), чтобы прочитать структурированную сетку и нарисовать плоскость разреза через мой том. Все в порядке относительно визуализации: я получаю красивый контурный сюжет с проходящей через него плоскостью разреза. Однако я не смог извлечь данные, показанные на плоскости разреза. Есть ли способ извлечь координаты и данные («Интенсивность» - см. Ниже), связанную с моей плоскостью разреза?извлечение данных из плоскости разреза

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() 

Большое спасибо за вашу помощь

Эрик

ответ

1

это то, что я хотел бы сделать, чтобы записать данные:

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() 

пользователей ВТК является хорошим местом для поиска Например. Вот вопрос уже ansered на извлечение координат из polyData: http://vtk.1045678.n5.nabble.com/Polydata-get-point-coordinates-td3214274.html В подобной записи, как, например, от Давида, попробуйте:

#... 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, на пользователей ВТК, есть этот пример: http://vtk.1045678.n5.nabble.com/Extract-Data-from-vtkImageReslice-to-numpy-array-td1246899.html#a1246902. В тех же обозначениях, как, например, от Эрика, вы можете попробовать:

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')) 

Есть еще много примеров на пользователях ВОК архива :)

Смежные вопросы