+++ /dev/null
-#include <VTKWidgets/LineWidget.h>
-#include <cpInstances/DataObjects/Image.h>
-#include <cpInstances/DataObjects/Mesh.h>
-#include <cpExtensions/Visualization/WindowLevelImageActor.h>
-
-#include <vtkLineWidget2.h>
-#include <vtkImageData.h>
-#include <vtkImageMapper3D.h>
-#include <vtkInteractorObserver.h>
-#include <vtkLineRepresentation.h>
-#include <vtkMapper.h>
-#include <vtkPolyData.h>
-#include <vtkRenderer.h>
-
-// -------------------------------------------------------------------------
-void cpPluginsVTKWidgets::LineWidget::
-Clear( )
-{
-}
-
-// -------------------------------------------------------------------------
-void cpPluginsVTKWidgets::LineWidget::
-SetEnabled( bool v )
-{
- auto wdg = this->GetVTK< vtkLineWidget2 >( );
- if( wdg != NULL )
- {
- wdg->SetEnabled( v );
- wdg->GetInteractor( )->Render( );
-
- } // fi
-}
-
-// -------------------------------------------------------------------------
-bool cpPluginsVTKWidgets::LineWidget::
-GetEnabled( ) const
-{
- auto wdg = this->GetVTK< const vtkLineWidget2 >( );
- if( wdg != NULL )
- {
- vtkLineWidget2* w = const_cast< vtkLineWidget2* >( wdg );
- return( w->GetEnabled( ) != 0 );
- }
- else
- return( false );
-}
-
-// -------------------------------------------------------------------------
-cpPluginsVTKWidgets::LineWidget::
-LineWidget( )
- : Superclass( )
-{
- typedef cpPlugins::Pipeline::DataObject _TData;
- typedef cpInstances::DataObjects::Mesh _TMesh;
-
- this->_ConfigureInput< _TData >( "Input", false, false );
- this->_ConfigureOutput< _TMesh >( "Output" );
-
- // Create output data
- auto line = this->_CreateVTK< vtkPolyData >( );
- line->SetPoints( vtkSmartPointer< vtkPoints >::New( ) );
- line->SetVerts( vtkSmartPointer< vtkCellArray >::New( ) );
- line->SetLines( vtkSmartPointer< vtkCellArray >::New( ) );
- line->SetPolys( vtkSmartPointer< vtkCellArray >::New( ) );
- line->SetStrips( vtkSmartPointer< vtkCellArray >::New( ) );
- this->GetOutput( "Output" )->SetVTK( line );
-}
-
-// -------------------------------------------------------------------------
-cpPluginsVTKWidgets::LineWidget::
-~LineWidget( )
-{
-}
-
-// -------------------------------------------------------------------------
-void cpPluginsVTKWidgets::LineWidget::
-_GenerateData( )
-{
- if( this->m_Interactors.size( ) == 0 )
- this->_Error( "Give at least one valid interactor." );
-
- auto image = this->GetInputData< vtkImageData >( "Input" );
- if( image != NULL ) this->_GD_Image( image );
- else this->_Error( "Do not know how to create this widget." );
-}
-
-// -------------------------------------------------------------------------
-cpPluginsVTKWidgets::LineWidget::
-TValidProps cpPluginsVTKWidgets::LineWidget::
-_GetValidActors( vtkObject* source )
-{
- TValidProps valid_props;
- auto iIt = this->m_Interactors.begin( );
- for( ; iIt != this->m_Interactors.end( ); ++iIt )
- {
- auto r = ( *iIt )->GetInteractorStyle( )->GetCurrentRenderer( );
- if( r != NULL )
- {
- auto props = r->GetViewProps( );
- if( props != NULL )
- {
- props->InitTraversal( );
- while( vtkProp* prop = props->GetNextProp( ) )
- {
- auto image_actor = dynamic_cast< vtkImageSlice* >( prop );
- auto mesh_actor = dynamic_cast< vtkActor* >( prop );
- vtkObject* input = NULL;
- if( image_actor != NULL )
- {
- auto mapper = image_actor->GetMapper( );
- if( mapper != NULL )
- input = mapper->GetInput( );
- }
- else if( mesh_actor != NULL )
- {
- auto mapper = mesh_actor->GetMapper( );
- if( mapper != NULL )
- input = mapper->GetInput( );
-
- } // fi
- if( input != NULL )
- valid_props[ *iIt ].insert( prop );
-
- } // elihw
-
- } // fi
-
- } // fi
-
- } // rof
- return( valid_props );
-}
-
-// -------------------------------------------------------------------------
-void cpPluginsVTKWidgets::LineWidget::
-_GD_Image( vtkImageData* image )
-{
- auto valid_props = this->_GetValidActors( image );
- if( valid_props.size( ) == 0 )
- this->_Error( "Given image does not have a valid associated actor." );
-
- vtkSmartPointer< vtkLineWidget2 > wdg = this->GetVTK< vtkLineWidget2 >( );
- if( wdg.GetPointer( ) == NULL )
- {
- auto vIt = valid_props.begin( );
- auto actor = dynamic_cast< vtkImageSlice* >( *( vIt->second.begin( ) ) );
-
- double bnds[ 6 ];
- actor->GetBounds( bnds );
- double p0[ 3 ], p1[ 3 ];
- p0[ 0 ] = bnds[ 0 ];
- p0[ 1 ] = bnds[ 2 ];
- p0[ 2 ] = bnds[ 4 ];
- p1[ 0 ] = bnds[ 1 ];
- p1[ 1 ] = bnds[ 3 ];
- p1[ 2 ] = bnds[ 5 ];
-
- auto rep = vtkSmartPointer< vtkLineRepresentation >::New( );
- rep->SetPoint1WorldPosition( p0 );
- rep->SetPoint2WorldPosition( p1 );
- rep->PlaceWidget( bnds );
-
- wdg = this->_CreateVTK< vtkLineWidget2 >( );
- wdg->SetInteractor( valid_props.begin( )->first );
- wdg->SetRepresentation( rep );
- wdg->EnabledOn( );
- }
- else
- dynamic_cast< vtkLineRepresentation* >( wdg->GetRepresentation( ) )->
- GetPolyData( this->GetOutputData< vtkPolyData >( "Output" ) );
-}
-
-// eof - $RCSfile$