[vtkusers] new path tracing classes in VTK

Dean Inglis dean.inglis at camris.ca
Sat Aug 23 23:20:09 EDT 2008


There is now vtkDijkstraImageGeodesicPath.cxx in VTK/Graphics
which inherits from vtkDijkstraGeodesicPath and a 
line interpolator for vtkContourRepresentation:
vtkDijkstraImageContourLineInterpolator, so that vertices can
be placed and interacted with.  I modified vtkDijkstraGeodesicPath 
to use vtkDataSet in some method signatures instead of vtkPolyData 
to re-use most of the core dijkstra algorithm.  Because
vtkDijkstraGeodesicPath indirectly inherits from vtkPolyDataAlgorithm
I had to mandate a second input port for the cost image, which
is what is actually used to build the adjacency list and calculate
edge costs.  So, the first input port which takes vtkPolyData is
currently not used (although maybe could be used for path cooling etc.)
and perhaps a better class hierarchy needs to be considered.
I will submit a test for these classes in VTK/Widgets shortly,
but for now, enclosed is a tcl script that demonstrates use.

enjoy,
Dean


package require vtk
package require vtkinteraction

  vtkPNGReader reader
  reader SetFileName "$VTK_DATA_ROOT/Data/fullhead15.png"
  
  vtkImageResample resample
  resample SetInputConnection [reader GetOutputPort]
  resample SetDimensionality 2
  resample SetAxisMagnificationFactor 0 0.5
  resample SetAxisMagnificationFactor 1 0.5

  vtkImageAnisotropicDiffusion2D diffusion
  diffusion SetInputConnection [resample GetOutputPort]
  diffusion SetDiffusionFactor 1.0
  diffusion SetDiffusionThreshold 200.0
  diffusion SetNumberOfIterations 5
  
  vtkImageGradientMagnitude grad
  grad SetDimensionality 2
  grad HandleBoundariesOn
  grad SetInputConnection [diffusion GetOutputPort]
  grad Update
  
  set grange [[grad GetOutput] GetScalarRange]
  
  vtkImageShiftScale gradInvert
  gradInvert SetShift [ expr -1.0*[lindex $grange 1] ]
  gradInvert SetScale [ expr 1.0 /( [lindex $grange 0] - [lindex $grange 1]
) ]
  gradInvert SetOutputScalarTypeToFloat
  gradInvert SetInputConnection [ grad GetOutputPort ]
  gradInvert ReleaseDataFlagOn
  gradInvert Update
  
  vtkImageShiftScale shifter
  shifter SetShift [ expr -1.0*[lindex $grange 1] ]
  shifter SetScale [ expr 255.0 /( [lindex $grange 0] - [lindex $grange 1] )
]
  shifter SetOutputScalarTypeToUnsignedChar
  shifter SetInputConnection [ grad GetOutputPort ]
  shifter ReleaseDataFlagOn
  shifter Update  
  
  vtkImageActor imageActor
  imageActor SetInput [shifter GetOutput]
  imageActor VisibilityOn
  imageActor SetDisplayExtent 0 127 0 127 0 0
  imageActor InterpolateOff 
  
  #  Create the RenderWindow  Renderer and the DEM + path actors.
 
  vtkRenderer ren1
  vtkRenderWindow renWin
  renWin AddRenderer ren1
  vtkRenderWindowInteractor iren
  iren SetRenderWindow renWin
  vtkInteractorStyleImage style
  iren SetInteractorStyle style
  ren1 SetBackground 0.1 0.2 0.4

  #  Add the actors to the renderer  set the background and size

  ren1 AddActor imageActor
  ren1 ResetCameraClippingRange

  #  Here comes the contour widget stuff.....
  
  vtkContourWidget contourWidget
  contourWidget DebugOff
  contourWidget SetInteractor iren
  
  vtkOrientedGlyphContourRepresentation rep
  [rep GetLinesProperty ] SetColor 1 0.2 0
  [rep GetProperty ] SetColor 0 0.2 1
  [rep GetLinesProperty ] SetLineWidth 3.0  
  contourWidget SetRepresentation rep

  vtkImageActorPointPlacer placer
  placer SetImageActor imageActor  
  rep SetPointPlacer  placer 

 vtkDijkstraImageContourLineInterpolator interpolator
 interpolator SetCostImage [ gradInvert GetOutput ]  
 rep SetLineInterpolator interpolator

  contourWidget On


# render the image
#
iren AddObserver UserEvent {wm deiconify .vtkInteract}
iren Initialize

# prevent the tk window from showing up then start the event loop
wm withdraw .






More information about the vtkusers mailing list