]> Creatis software - cpPlugins.git/blobdiff - lib/cpExtensions/Visualization/CursorActors.cxx
yet another refactoring
[cpPlugins.git] / lib / cpExtensions / Visualization / CursorActors.cxx
diff --git a/lib/cpExtensions/Visualization/CursorActors.cxx b/lib/cpExtensions/Visualization/CursorActors.cxx
new file mode 100644 (file)
index 0000000..29dedc3
--- /dev/null
@@ -0,0 +1,176 @@
+#include <cpExtensions/Visualization/CursorActors.h>
+#include <cpExtensions/Visualization/LineSource.h>
+
+#include <vtkActor.h>
+#include <vtkPolyDataMapper.h>
+
+// -------------------------------------------------------------------------
+cpExtensions::Visualization::CursorActors::
+Self* cpExtensions::Visualization::CursorActors::
+New( )
+{
+  return( new Self( ) );
+}
+
+// -------------------------------------------------------------------------
+void cpExtensions::Visualization::CursorActors::
+Modified( )
+{
+  for( unsigned int i = 0; i < 2; ++i )
+  {
+    if( this->m_Lines[ i ].GetPointer( ) != NULL )
+    {
+      this->m_Lines[ i ]->Modified( );
+      this->m_Mappers[ i ]->Modified( );
+      this->m_Actors[ i ]->Modified( );
+
+    } // fi
+
+  } // rof
+  this->Superclass::Modified( );
+}
+
+// -------------------------------------------------------------------------
+void cpExtensions::Visualization::CursorActors::
+SetImageBounds( double* bounds )
+{
+  this->m_Bounds[ 0 ] = bounds[ 0 ];
+  this->m_Bounds[ 1 ] = bounds[ 1 ];
+  this->m_Bounds[ 2 ] = bounds[ 2 ];
+  this->m_Bounds[ 3 ] = bounds[ 3 ];
+  this->m_Bounds[ 4 ] = bounds[ 4 ];
+  this->m_Bounds[ 5 ] = bounds[ 5 ];
+}
+
+// -------------------------------------------------------------------------
+void cpExtensions::Visualization::CursorActors::
+SetImageOrientation( int orientation )
+{
+  this->m_Orientation = orientation % 3;
+}
+
+// -------------------------------------------------------------------------
+void cpExtensions::Visualization::CursorActors::
+SetCursor( double* pos, bool neg )
+{
+  static const double _eps = 1e-3;
+  double pnts[ 4 ][ 3 ];
+  if( this->m_Orientation == 0 )
+  {
+    pnts[ 0 ][ 1 ] = this->m_Bounds[ 2 ];
+    pnts[ 1 ][ 1 ] = this->m_Bounds[ 3 ];
+    pnts[ 0 ][ 2 ] = pnts[ 1 ][ 2 ] = pos[ 2 ];
+
+    pnts[ 2 ][ 1 ] = pnts[ 3 ][ 1 ] = pos[ 1 ];
+    pnts[ 2 ][ 2 ] = this->m_Bounds[ 4 ];
+    pnts[ 3 ][ 2 ] = this->m_Bounds[ 5 ];
+
+    pnts[ 0 ][ 0 ] = pnts[ 1 ][ 0 ] =
+      pnts[ 2 ][ 0 ] = pnts[ 3 ][ 0 ] =
+      pos[ 0 ] + ( double( neg? -1: 1 ) * _eps );
+  }
+  else if( this->m_Orientation == 1 )
+  {
+    pnts[ 0 ][ 0 ] = pnts[ 1 ][ 0 ] = pos[ 0 ];
+    pnts[ 0 ][ 2 ] = this->m_Bounds[ 4 ];
+    pnts[ 1 ][ 2 ] = this->m_Bounds[ 5 ];
+
+    pnts[ 2 ][ 0 ] = this->m_Bounds[ 0 ];
+    pnts[ 3 ][ 0 ] = this->m_Bounds[ 1 ];
+    pnts[ 2 ][ 2 ] = pnts[ 3 ][ 2 ] = pos[ 2 ];
+
+    pnts[ 0 ][ 1 ] = pnts[ 1 ][ 1 ] =
+      pnts[ 2 ][ 1 ] = pnts[ 3 ][ 1 ] =
+      pos[ 1 ] + ( double( neg? -1: 1 ) * _eps );
+  }
+  else if( this->m_Orientation == 2 )
+  {
+    pnts[ 0 ][ 0 ] = this->m_Bounds[ 0 ];
+    pnts[ 1 ][ 0 ] = this->m_Bounds[ 1 ];
+    pnts[ 0 ][ 1 ] = pnts[ 1 ][ 1 ] = pos[ 1 ];
+
+    pnts[ 2 ][ 0 ] = pnts[ 3 ][ 0 ] = pos[ 0 ];
+    pnts[ 2 ][ 1 ] = this->m_Bounds[ 2 ];
+    pnts[ 3 ][ 1 ] = this->m_Bounds[ 3 ];
+
+    pnts[ 0 ][ 2 ] = pnts[ 1 ][ 2 ] =
+      pnts[ 2 ][ 2 ] = pnts[ 3 ][ 2 ] =
+      pos[ 2 ] + ( double( neg? -1: 1 ) * _eps );
+
+  } // fi
+
+  this->m_Lines[ 0 ]->SetPoint1( pnts[ 0 ] );
+  this->m_Lines[ 0 ]->SetPoint2( pnts[ 1 ] );
+  this->m_Lines[ 1 ]->SetPoint1( pnts[ 2 ] );
+  this->m_Lines[ 1 ]->SetPoint2( pnts[ 3 ] );
+  this->Modified( );
+}
+
+// -------------------------------------------------------------------------
+vtkProperty* cpExtensions::Visualization::CursorActors::
+GetProperty( unsigned int i )
+{
+  return( this->m_Actors[ i % 2 ]->GetProperty( ) );
+}
+
+// -------------------------------------------------------------------------
+const vtkProperty* cpExtensions::Visualization::CursorActors::
+GetProperty( unsigned int i ) const
+{
+  return( this->m_Actors[ i % 2 ]->GetProperty( ) );
+}
+
+// -------------------------------------------------------------------------
+void cpExtensions::Visualization::CursorActors::
+SetVisibility( int v )
+{
+  this->m_Actors[ 0 ]->SetVisibility( v );
+  this->m_Actors[ 1 ]->SetVisibility( v );
+}
+
+// -------------------------------------------------------------------------
+void cpExtensions::Visualization::CursorActors::
+VisibilityOn( )
+{
+  this->m_Actors[ 0 ]->VisibilityOn( );
+  this->m_Actors[ 1 ]->VisibilityOn( );
+}
+
+// -------------------------------------------------------------------------
+void cpExtensions::Visualization::CursorActors::
+VisibilityOff( )
+{
+  this->m_Actors[ 0 ]->VisibilityOff( );
+  this->m_Actors[ 1 ]->VisibilityOff( );
+}
+
+// -------------------------------------------------------------------------
+cpExtensions::Visualization::CursorActors::
+CursorActors( )
+  : Superclass( )
+{
+  this->m_Bounds[ 0 ] = this->m_Bounds[ 1 ] = this->m_Bounds[ 2 ] =
+    this->m_Bounds[ 3 ] = this->m_Bounds[ 4 ] = this->m_Bounds[ 5 ] =
+    double( 0 );
+
+  for( unsigned int i = 0; i < 2; ++i )
+  {
+    this->m_Lines[ i ] = vtkSmartPointer< LineSource >::New( );
+    this->m_Mappers[ i ] = vtkSmartPointer< vtkPolyDataMapper >::New( );
+    this->m_Actors[ i ] = vtkSmartPointer< vtkActor >::New( );
+    this->m_Mappers[ i ]->SetInputConnection(
+      this->m_Lines[ i ]->GetOutputPort( )
+      );
+    this->m_Actors[ i ]->SetMapper( this->m_Mappers[ i ] );
+    this->AddItem( this->m_Actors[ i ] );
+
+  } // rof
+}
+
+// -------------------------------------------------------------------------
+cpExtensions::Visualization::CursorActors::
+~CursorActors( )
+{
+}
+
+// eof - $RCSfile$