#include <vtkImageData.h>
#include <vtkProperty.h>
#include <vtkRenderer.h>
+#include <vtkRendererCollection.h>
+#include <vtkRenderWindow.h>
#include <vtkRenderWindowInteractor.h>
#include <cpExtensions/QT/SimpleMPRWidget.h>
// This callback is responsible for changing update time
namespace cpPluginsWidgets
{
- /**
- */
- /* TODO
+ /**
+ */
class SeedWidgetCallback
- : public vtkCommand
- {
- public:
- static SeedWidgetCallback* New( )
- { return( new SeedWidgetCallback ); }
- virtual void Execute( vtkObject* caller, unsigned long id, void* data )
- {
- typedef cpPluginsWidgets::SeedWidget::TImageActor _TImageActor;
- auto actor = dynamic_cast< _TImageActor* >( caller );
-
- if( id == vtkCommand::InteractionEvent && actor != NULL )
- {
- int slice = actor->GetSliceNumber( );
- if( this->Data->ActualWidgetId != slice )
- {
- this->Data->Widgets[ this->Data->ActualWidgetId ]->EnabledOff( );
- this->Data->Widgets[ slice ]->EnabledOn( );
- this->Data->ActualWidgetId = slice;
-
- } // fi
- }
- else if(
- (
- id == vtkCommand::CursorChangedEvent ||
- id == vtkCommand::PlacePointEvent
- ) &&
- this->Widget != NULL
- )
- this->Widget->Modified( );
+ : public vtkCommand
+ {
+ public:
+ static SeedWidgetCallback* New( )
+ { return( new SeedWidgetCallback ); }
+ virtual void Execute( vtkObject* caller, unsigned long id, void* data )
+ {
+ /*
+ typedef cpPluginsWidgets::SeedWidget::TImageActor _TImageActor;
+ auto actor = dynamic_cast< _TImageActor* >( caller );
+*/
+/*
+ if( id == vtkCommand::InteractionEvent && actor != NULL )
+ {
+ int slice = actor->GetSliceNumber( );
+ if( this->Data->ActualWidgetId != slice )
+ {
+ this->Data->Widgets[ this->Data->ActualWidgetId ]->EnabledOff( );
+ this->Data->Widgets[ slice ]->EnabledOn( );
+ this->Data->ActualWidgetId = slice;
+
+ } // fi
+ }
+ else
+*/
+ // id == vtkCommand::CursorChangedEvent ||
+ if( id == vtkCommand::PlacePointEvent )
+ {
+ auto wdg = dynamic_cast< cpExtensions::Interaction::SeedWidget* >( caller );
+ if( wdg != NULL )
+ {
+ auto rep =
+ dynamic_cast< vtkSeedRepresentation* >(
+ wdg->GetRepresentation( )
+ );
+ if( rep != NULL )
+ {
+ unsigned long nSeeds = rep->GetNumberOfSeeds( );
+ if( nSeeds > 0 )
+ {
+ double pos[ 3 ];
+ rep->GetSeedWorldPosition( nSeeds - 1, pos );
+
+ Seeds->GetPoints( )->InsertNextPoint( pos );
+ Seeds->GetVerts( )->InsertNextCell( 1 );
+ Seeds->GetVerts( )->InsertCellPoint( nSeeds - 1 );
+ }
+ } // fi
+
+
+ }
+ }
}
- protected:
- SeedWidgetCallback( )
- : vtkCommand( ),
- Widget( NULL ),
- Data( NULL )
- { }
- virtual ~SeedWidgetCallback( ) { }
-
+ protected:
+ SeedWidgetCallback( )
+ : vtkCommand( ),
+ Seeds( NULL )
+/*
+ ,
+ Widget( NULL ),
+ Data( NULL )
+ */
+ { }
+ virtual ~SeedWidgetCallback( ) { }
public:
- SeedWidget* Widget;
- SeedWidget::TWidgetData* Data;
- };
- */
+ vtkPolyData* Seeds;
+ /*
+ public:
+ SeedWidget* Widget;
+ SeedWidget::TWidgetData* Data;
+ */
+ };
-} // ecapseman
+ } // ecapseman
// -------------------------------------------------------------------------
cpPluginsWidgets::SeedWidget::
~SeedWidget( )
{
for( auto i = this->m_Data.begin( ); i != this->m_Data.end( ); ++i )
- delete w->second;
+ delete i->second;
this->m_Data.clear( );
}
void cpPluginsWidgets::SeedWidget::
_GenerateData( )
{
+ auto image = this->GetInputData< vtkImageData >( "Input" );
+ if( image != NULL )
+ this->_GD0_Image( image );
+ else
+ this->_Error( "Invalid input image." );
+
// TODO: std::string init_value = this->m_Parameters.GetString( "Text" );
/* TODO
void cpPluginsWidgets::SeedWidget::
_Configure( )
{
- auto o = this->GetInputData( "Input" );
- cpPlugins_Demangle_ImageVisualDims( o, _GD0_Image );
- else this->_Error( "Invalid input image." );
-
/* TODO
typedef cpPlugins::DataObjects::Image _TImage;
}
// -------------------------------------------------------------------------
-template< class _TImage >
void cpPluginsWidgets::SeedWidget::
-_GD0_Image( _TImage* image )
+_GD0_Image( vtkImageData* image )
{
- std::cout << image << std::endl;
-
- /* TODO
- for( auto p = this->m_Props.begin( ); p != this->m_Props.end( ); ++p )
- {
- TWidgetData* d =
- new TWidgetData(
- this, dynamic_cast< TImageActor* >( p->first ), p->second
- );
- this->m_Widgets.push_back( d );
+ if( this->m_Data.size( ) == 0 )
+ {
+ auto cb = vtkSmartPointer< SeedWidgetCallback >::New( );
+ cb->Seeds = this->GetOutputData< vtkPolyData >( "Output" );
+ this->m_Command = cb;
+
+ for(
+ auto inIt = this->m_Interactors.begin( );
+ inIt != this->m_Interactors.end( );
+ ++inIt
+ )
+ {
+ auto rends = ( *inIt )->GetRenderWindow( )->GetRenderers( );
+ std::set< TImageActor* > all_props;
+ if( rends != NULL )
+ {
+ rends->InitTraversal( );
+ while( vtkRenderer* ren = rends->GetNextItem( ) )
+ {
+ auto props = ren->GetViewProps( );
+ props->InitTraversal( );
+ while( vtkProp* p = props->GetNextProp( ) )
+ {
+ auto image_actor = dynamic_cast< TImageActor* >( p );
+ if( image_actor != NULL )
+ {
+ if( image_actor->GetImage( ) == image )
+ all_props.insert( image_actor );
+
+ }
+
+ } // elihw
+ } // elihw
+
+ } // fi
+ if( all_props.size( ) == 1 )
+ {
+ this->m_Data[ *inIt ] =
+ new TWidgetData( this, *( all_props.begin( ) ), *inIt, this->m_Command );
+ }
+
+ } // rof
+}
+else
+{
+ // akjhdaksjhd
+}
- } // rof
- */
}
// -------------------------------------------------------------------------
TWidgetData(
SeedWidget* seedWidget,
TImageActor* actor,
- vtkRenderWindowInteractor* iren
+ vtkRenderWindowInteractor* iren,
+ vtkCommand* cmd
)
{
+ auto cb = dynamic_cast< SeedWidgetCallback* >( cmd );
+/*
+ auto cb = vtkSmartPointer< SeedWidgetCallback >::New( );
+ cb->Widget = seedWidget;
+ cb->Data = this;
+ this->Command = cb;
+ actor->AddObserver( vtkCommand::InteractionEvent, cb );
+*/
/* TODO
auto image = actor->GetImage( );
int ori = actor->GetOrientation( );
this->Representation->SetHandleRepresentation( this->Handle );
this->Widget->SetRepresentation( this->Representation );
this->Widget->SetInteractor( iren );
- /* TODO
- this->Widget->AddObserver( vtkCommand::PlacePointEvent, cb );
- this->Widget->AddObserver( vtkCommand::CursorChangedEvent, cb );
- */
- this->Widget->EnabledOff( );
+ if( cb != NULL )
+ {
+ this->Widget->AddObserver( vtkCommand::PlacePointEvent, cb );
+ this->Widget->AddObserver( vtkCommand::CursorChangedEvent, cb );
+ }
+ this->Widget->EnabledOn( );
/* TODO
this->Widgets.push_back( wdg );