]> Creatis software - cpPlugins.git/blobdiff - lib/cpPlugins/Plugins/BasicFilters/DoubleFloodImageFilter.cxx
...
[cpPlugins.git] / lib / cpPlugins / Plugins / BasicFilters / DoubleFloodImageFilter.cxx
index af44e53e27cc6df44be5a0a376f1ac2df6fcc4cb..61ff7d2e291b46a22e67b9fed0406d48735b64dc 100644 (file)
@@ -3,6 +3,7 @@
 #include <cpPlugins/Interface/BaseApplication.h>
 #include <cpPlugins/Interface/Plugins.h>
 #include <cpExtensions/Interaction/ImageInteractorStyle.h>
+#include <cpExtensions/Visualization/ImageSliceActors.h>
 
 #include <vtkRenderWindowInteractor.h>
 
@@ -55,8 +56,10 @@ accept( )
     return;
 
   typedef cpExtensions::Interaction::ImageInteractorStyle _TImageStyle;
+  typedef cpExtensions::Visualization::ImageSliceActors   _TImageActors;
 
-  // Activate seed widgets
+  // Get seeds
+  unsigned int nTotalSeeds = 0;
   auto iIt = this->m_Filter->m_Interactors.begin( );
   for( ; iIt != this->m_Filter->m_Interactors.end( ); ++iIt )
   {
@@ -66,27 +69,35 @@ accept( )
         );
     if( istyle == NULL )
       continue;
+
+    // Get window level
+    _TImageActors* actors =
+      dynamic_cast< _TImageActors* >( istyle->GetAssociatedObject( ) );
+    if( actors != NULL )
+    {
+      this->m_Filter->GetParameters( )->SetReal( "Window", actors->GetWindow( ) );
+      this->m_Filter->GetParameters( )->SetReal( "Level", actors->GetLevel( ) );
+
+    } // fi
+
     unsigned int nSeeds = istyle->GetNumberOfSeeds( );
     for( unsigned int s = 0; s < nSeeds; ++s )
     {
-      double seed[ 3 ];
-      istyle->GetSeed( s, seed );
+      if( nTotalSeeds < 2 )
+      {
+        double seed[ 3 ];
+        istyle->GetSeedAsPoint( s, seed );
+        if( nTotalSeeds == 0 )
+          this->m_Filter->GetParameters( )->SetPoint( "Seed0", 3, seed );
+        else
+          this->m_Filter->GetParameters( )->SetPoint( "Seed1", 3, seed );
+
+      } // fi
+      nTotalSeeds++;
 
     } // rof
 
   } // rof
-  /*
-  vtkPlaneWidget* wdg = this->m_Filter->m_PlaneWidget;
-  if( wdg == NULL )
-    return;
-
-  // Get/Set plane parameters
-  double center[ 3 ], normal[ 3 ];
-  wdg->GetCenter( center );
-  wdg->GetNormal( normal );
-
-  this->m_Filter->GetParameters( )->SetPoint( "PlaneCenter", 3, center );
-  this->m_Filter->GetParameters( )->SetVector( "PlaneNormal", 3, normal );
 
   // Update filter
   auto plugins = this->m_Filter->GetPlugins( );
@@ -97,7 +108,6 @@ accept( )
       app->UpdateActualFilter( );
 
   } // fi
-  */
 }
 
 // -------------------------------------------------------------------------
@@ -139,15 +149,15 @@ ExecConfigurationDialog( QWidget* parent )
     
   } // rof
   if( !at_least_one )
-    return( Self::DialogResult_Cancel );
-
+    return( false );
+  
   // Create dialog
   this->m_Dialog = new DoubleFloodImageFilter_Dialog( NULL, this );
   this->m_Dialog->show( );
 
-  return( Self::DialogResult_Modal );
+  return( true );
 #else // cpPlugins_Interface_QT4
-  return( Self::DialogResult_Cancel );
+  return( false );
 #endif // cpPlugins_Interface_QT4
 }
 
@@ -159,13 +169,17 @@ DoubleFloodImageFilter( )
   this->_AddInput( "Input" );
   this->_MakeOutput< cpPlugins::Interface::Image >( "Output" );
 
-  double seed[ 3 ] = { double( 0 ) };
-  this->m_Parameters->ConfigureAsPoint( "Seed0", 3, seed );
-  this->m_Parameters->ConfigureAsPoint( "Seed1", 3, seed );
-  this->m_Parameters->ConfigureAsReal( "Window", 0 );
-  this->m_Parameters->ConfigureAsReal( "Level", 0 );
-  this->m_Parameters->ConfigureAsUint( "InsideValue", 255 );
-  this->m_Parameters->ConfigureAsUint( "OutsideValue", 0 );
+  this->m_Parameters->ConfigureAsPoint( "Seed0" );
+  this->m_Parameters->ConfigureAsPoint( "Seed1" );
+  this->m_Parameters->ConfigureAsReal( "Window" );
+  this->m_Parameters->ConfigureAsReal( "Level" );
+  this->m_Parameters->ConfigureAsUint( "InsideValue" );
+  this->m_Parameters->ConfigureAsUint( "OutsideValue" );
+
+  this->m_Parameters->SetReal( "Window", 0 );
+  this->m_Parameters->SetReal( "Level", 0 );
+  this->m_Parameters->SetUint( "InsideValue", 255 );
+  this->m_Parameters->SetUint( "OutsideValue", 0 );
 }
 
 // -------------------------------------------------------------------------
@@ -293,14 +307,16 @@ template< class I, class O >
 inline std::string cpPlugins::BasicFilters::DoubleFloodImageFilter::
 _RealGD( itk::DataObject* image )
 {
-  /*
   typedef typename O::PixelType _OP;
   typedef cpPlugins_BasicFilters_DoubleFloodImageFilter_Function< I > _F;
   typedef itk::FloodFilledImageFunctionConditionalConstIterator< I, _F > _It;
 
-  typename I::PointType pseed;
-  pseed = this->m_Parameters->GetPoint< typename I::PointType >(
-    "Seed", I::ImageDimension
+  typename I::PointType pseed0, pseed1;
+  pseed0 = this->m_Parameters->GetPoint< typename I::PointType >(
+    "Seed0", I::ImageDimension
+    );
+  pseed1 = this->m_Parameters->GetPoint< typename I::PointType >(
+    "Seed1", I::ImageDimension
     );
   double window = this->m_Parameters->GetReal( "Window" );
   double level = this->m_Parameters->GetReal( "Level" );
@@ -308,8 +324,9 @@ _RealGD( itk::DataObject* image )
   _OP out_val = _OP( this->m_Parameters->GetUint( "OutsideValue" ) );
 
   const I* in = dynamic_cast< const I* >( image );
-  typename I::IndexType seed;
-  in->TransformPhysicalPointToIndex( pseed, seed );
+  typename I::IndexType seed0, seed1;
+  in->TransformPhysicalPointToIndex( pseed0, seed0 );
+  in->TransformPhysicalPointToIndex( pseed1, seed1 );
 
   typename O::Pointer out = O::New( );
   out->SetLargestPossibleRegion( in->GetLargestPossibleRegion( ) );
@@ -326,7 +343,8 @@ _RealGD( itk::DataObject* image )
   f->SetWindow( window );
   f->SetLevel( level );
   _It i( in, f );
-  i.AddSeed( seed );
+  i.AddSeed( seed0 );
+  i.AddSeed( seed1 );
 
   for( i.GoToBegin( ); !i.IsAtEnd( ); ++i )
     out->SetPixel( i.GetIndex( ), in_val );
@@ -340,7 +358,6 @@ _RealGD( itk::DataObject* image )
     return( "" );
   }
   else
-*/
     return( "DoubleFloodImageFilter: output not correctly created." );
 }