]> Creatis software - cpPlugins.git/blobdiff - lib/cpExtensions/Visualization/ImageSliceActors.cxx
Widgets updated
[cpPlugins.git] / lib / cpExtensions / Visualization / ImageSliceActors.cxx
index 17dc4c45035be5b973135d00e93a81f6266d6ac6..4bafde1bca30fc773949adb8d5eebdd5302aabad 100644 (file)
@@ -264,6 +264,14 @@ Clear( )
   this->AddItem( this->m_PlaneActor );
 }
 
+// -------------------------------------------------------------------------
+void cpExtensions::Visualization::ImageSliceActors::
+AssociateSlice( Self* slice )
+{
+  this->m_AssociatedSlices.push_back( slice );
+  this->Modified( );
+}
+
 // -------------------------------------------------------------------------
 vtkInteractorStyle* cpExtensions::Visualization::ImageSliceActors::
 GetStyle( )
@@ -278,17 +286,40 @@ GetStyle( ) const
   return( this->m_Style.GetPointer( ) );
 }
 
+// -------------------------------------------------------------------------
+vtkImageData* cpExtensions::Visualization::ImageSliceActors::
+GetInputImage( unsigned int id )
+{
+  vtkAlgorithmOutput* aout = this->m_ImageMaps[ id ]->GetOutputPort( );
+  vtkImageData* image = dynamic_cast< vtkImageData* >(
+    aout->GetProducer( )->GetOutputDataObject( aout->GetIndex( ) )
+    );
+  return( image );
+}
+
+// -------------------------------------------------------------------------
+const vtkImageData* cpExtensions::Visualization::ImageSliceActors::
+GetInputImage( unsigned int id ) const
+{
+  vtkAlgorithmOutput* aout = this->m_ImageMaps[ id ]->GetOutputPort( );
+  const vtkImageData* image = dynamic_cast< const vtkImageData* >(
+    aout->GetProducer( )->GetOutputDataObject( aout->GetIndex( ) )
+    );
+  return( image );
+}
+
 // -------------------------------------------------------------------------
 void cpExtensions::Visualization::ImageSliceActors::
 PushActorsInto( vtkRenderWindow* window, bool force_style )
 {
+  this->m_Window = window;
   if( window == NULL )
     return;
   vtkRenderWindowInteractor* rwi = window->GetInteractor( );
   vtkRenderer* renderer = window->GetRenderers( )->GetFirstRenderer( );
   if( rwi == NULL || renderer == NULL )
     return;
-  
+
   // Update style
   if( this->m_Style.GetPointer( ) != NULL && force_style )
     rwi->SetInteractorStyle( this->m_Style );
@@ -299,6 +330,12 @@ PushActorsInto( vtkRenderWindow* window, bool force_style )
   while( prop = this->GetNextProp( ) )
     renderer->AddViewProp( prop );
   renderer->Modified( );
+  if( !force_style )
+  {
+    renderer->RemoveViewProp( this->m_CursorActor );
+    renderer->RemoveViewProp( this->m_TextActor );
+
+  } // fi
 
   // Configure camera
   vtkCamera* camera = renderer->GetActiveCamera( );
@@ -859,6 +896,15 @@ SetSliceNumber( const int& slice )
   d_ext[ axis << 1 ] = slice;
   d_ext[ ( axis << 1 ) + 1 ] = slice;
 
+  std::cout
+    << d_ext[ 0 ] << " "
+    << d_ext[ 1 ] << " "
+    << d_ext[ 2 ] << " "
+    << d_ext[ 3 ] << " "
+    << d_ext[ 4 ] << " "
+    << d_ext[ 5 ] << " : "
+    << axis << std::endl;
+
   // Change visualization extent
   for( unsigned int i = 0; i < nImages; ++i )
   {
@@ -873,18 +919,18 @@ SetSliceNumber( const int& slice )
   // Prevent obscuring voxels by offsetting the plane geometry
   double xbnds[ ] =
     {
-      ori[ 0 ] + ( spac[ 0 ] * double( ext[ 0 ] ) ),
-      ori[ 0 ] + ( spac[ 0 ] * double( ext[ 1 ] ) )
+      ori[ 0 ] + ( spac[ 0 ] * double( d_ext[ 0 ] ) ),
+      ori[ 0 ] + ( spac[ 0 ] * double( d_ext[ 1 ] ) )
     };
   double ybnds[ ] =
     {
-      ori[ 1 ] + ( spac[ 1 ] * double( ext[ 2 ] ) ),
-      ori[ 1 ] + ( spac[ 1 ] * double( ext[ 3 ] ) )
+      ori[ 1 ] + ( spac[ 1 ] * double( d_ext[ 2 ] ) ),
+      ori[ 1 ] + ( spac[ 1 ] * double( d_ext[ 3 ] ) )
     };
   double zbnds[ ] =
     {
-      ori[ 2 ] + ( spac[ 2 ] * double( ext[ 4 ] ) ),
-      ori[ 2 ] + ( spac[ 2 ] * double( ext[ 5 ] ) )
+      ori[ 2 ] + ( spac[ 2 ] * double( d_ext[ 4 ] ) ),
+      ori[ 2 ] + ( spac[ 2 ] * double( d_ext[ 5 ] ) )
     };
 
   if( spac[ 0 ] < double( 0 ) )
@@ -1084,28 +1130,18 @@ UpdateText( const double& w, const double& l )
 void cpExtensions::Visualization::ImageSliceActors::
 Render( )
 {
-  vtkInteractorStyle* style = this->GetStyle( );
-  if( style == NULL )
-    return;
-  vtkRenderWindowInteractor* rwi = style->GetInteractor( );
-  if( rwi != NULL )
-    rwi->Render( );
+  if( this->m_Window != NULL )
+    this->m_Window->Render( );
 }
 
 // -------------------------------------------------------------------------
 void cpExtensions::Visualization::ImageSliceActors::
 ResetCamera( )
 {
-  vtkInteractorStyle* style = this->GetStyle( );
-  if( style == NULL )
-    return;
-  vtkRenderWindowInteractor* rwi = style->GetInteractor( );
-  if( rwi == NULL )
-    return;
-  vtkRenderWindow* rw = rwi->GetRenderWindow( );
-  if( rw == NULL )
+  if( this->m_Window == NULL )
     return;
-  vtkRenderer* renderer = rw->GetRenderers( )->GetFirstRenderer( );
+  vtkRenderer* renderer =
+    this->m_Window->GetRenderers( )->GetFirstRenderer( );
   if( renderer != NULL )
     renderer->ResetCamera( );
 }
@@ -1114,6 +1150,7 @@ ResetCamera( )
 cpExtensions::Visualization::ImageSliceActors::
 ImageSliceActors( )
   : Superclass( ),
+    m_Window( NULL ),
     m_Interpolate( false )
 {
   this->Clear( );
@@ -1313,8 +1350,16 @@ _MouseWheelCommand(
     if( slice > actors->GetSliceNumberMaxValue( ) )
       slice = actors->GetSliceNumberMaxValue( );
     actors->SetSliceNumber( slice );
-    actors->Render( );
 
+    auto a = actors->m_AssociatedSlices.begin( );
+    for( ; a != actors->m_AssociatedSlices.end( ); ++a )
+    {
+      ( *a )->SetSliceNumber( slice );
+      ( *a )->Render( );
+
+    } // rof
+    actors->Render( );
+    
     // Associate objects
     auto i = actors->m_RenderCommands.begin( );
     for( ; i != actors->m_RenderCommands.end( ); ++i )