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

助けてくれてどうもありがとう

エリック

4

1 に答える 1

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

vtk users は、例を探すのに適した場所です。 polyDataから座標を抽出することに関して既に ansered の質問があります: 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 に渡すこともできます。vtk ユーザーには、次の例があります 。 #a1246902 . Eric の例と同じ表記法で、次のことを試すことができます。

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 users archive には他にもたくさんの例があります:)

于 2014-05-10T13:47:08.737 に答える