]> Creatis software - FrontAlgorithms.git/blobdiff - appli/examples/example_ImageAlgorithmDijkstra_03.cxx
Even more tests
[FrontAlgorithms.git] / appli / examples / example_ImageAlgorithmDijkstra_03.cxx
index 0de81262791453d8f802238ce15b6ebbb3e37385..613378b2c1e8db3a6aa130b99334e24a9ce9fce9 100644 (file)
 #include <vtkCellArray.h>
 #include <vtkFloatArray.h>
 #include <vtkPolyData.h>
+#include <vtkPolyDataWriter.h>
 #include <vtkSmartPointer.h>
 #include <vtkImageMarchingCubes.h>
+#include <vtkLookupTable.h>
 
 #include <fpa/Image/DijkstraWithSphereBacktracking.h>
 #include <fpa/VTK/ImageMPR.h>
@@ -138,19 +140,22 @@ int main( int argc, char* argv[] )
   vtkSmartPointer< vtkFloatArray > scalars =
     vtkSmartPointer< vtkFloatArray >::New( );
 
+  const TDijkstra::TMarkImage* marks = paths->GetOutputMarkImage( );
+  TDijkstra::TMark max_mark = paths->GetNumberOfBranches( );
   const TDijkstra::TVertices& endpoints = paths->GetEndPoints( );
   const TDijkstra::TTree& tree = paths->GetFinalTree( );
   TDijkstra::TVertices::const_iterator epIt = endpoints.begin( );
   for( unsigned int epId = 0; epIt != endpoints.end( ); ++epIt, ++epId )
   {
-    double pd = double( epId ) / double( endpoints.size( ) - 1 );
-
     TDijkstra::TVertex idx = *epIt;
     do
     {
       TImage::PointType pnt;
       input_image->TransformIndexToPhysicalPoint( idx, pnt );
 
+      TDijkstra::TMark mark = marks->GetPixel( idx );
+      double pd = double( mark );
+
       points->InsertNextPoint( pnt[ 0 ], pnt[ 1 ], pnt[ 2 ] );
       scalars->InsertNextTuple1( pd );
       if( idx != *epIt )
@@ -172,10 +177,28 @@ int main( int argc, char* argv[] )
   vtk_tree->SetLines( cells );
   vtk_tree->GetPointData( )->SetScalars( scalars );
 
-  view.AddPolyData( vtk_tree );
+  vtkSmartPointer<vtkLookupTable> lut =
+    vtkSmartPointer<vtkLookupTable>::New( );
+  lut->SetNumberOfTableValues( max_mark + 1 );
+  lut->SetTableRange( 0, max_mark );
+  lut->Build( );
+
+  view.AddPolyData( vtk_tree, lut );
   view.Render( );
   view.Start( );
 
+  vtkSmartPointer< vtkPolyDataWriter > writer =
+    vtkSmartPointer< vtkPolyDataWriter >::New( );
+  writer->SetInputData( vtk_tree );
+  writer->SetFileName( output_image_fn.c_str( ) );
+  writer->Update( );
+
+  itk::ImageFileWriter< TDijkstra::TMarkImage >::Pointer marks_writer =
+    itk::ImageFileWriter< TDijkstra::TMarkImage >::New( );
+  marks_writer->SetInput( marks );
+  marks_writer->SetFileName( "marks.mhd" );
+  marks_writer->Update( );
+
   /* TODO
      TImageWriter::Pointer dijkstra_writer =
      TImageWriter::New( );