5 #include <cpPlugins/Interface/Interface.h>
6 #include <cpPlugins/Interface/ProcessObject.h>
7 #include <cpPlugins/Interface/Image.h>
9 #include <vtkSmartPointer.h>
10 #include <vtkCommand.h>
11 #include <vtkRenderer.h>
12 #include <vtkRenderWindow.h>
13 #include <vtkRenderWindowInteractor.h>
14 #include <vtkSliderRepresentation2D.h>
15 #include <vtkSliderWidget.h>
17 #include <cpExtensions/Visualization/MPRActors.h>
19 // -------------------------------------------------------------------------
20 typedef cpPlugins::Interface::Interface TInterface;
21 typedef cpPlugins::Interface::ProcessObject TFilter;
22 typedef cpPlugins::Interface::Parameters TParameters;
23 typedef cpPlugins::Interface::Image TImage;
25 typedef cpExtensions::Visualization::MPRActors TMPRActors;
27 // -------------------------------------------------------------------------
32 static SliderCallback* New( )
34 return new SliderCallback;
36 virtual void Execute( vtkObject* caller, unsigned long eId , void* data )
38 vtkSliderWidget* wdg =
39 reinterpret_cast< vtkSliderWidget* >( caller );
42 vtkSliderRepresentation* rep =
43 static_cast< vtkSliderRepresentation* >(
44 wdg->GetRepresentation( )
48 std::string title = rep->GetTitleText( );
50 this->Actors->SetSlice( 0, int( rep->GetValue( ) ) );
51 else if( title == "Y" )
52 this->Actors->SetSlice( 1, int( rep->GetValue( ) ) );
53 else if( title == "Z" )
54 this->Actors->SetSlice( 2, int( rep->GetValue( ) ) );
55 else if( title == "Window" )
56 this->Actors->SetWindow( 0, rep->GetValue( ) );
57 else if( title == "Level" )
58 this->Actors->SetLevel( 0, rep->GetValue( ) );
69 // -------------------------------------------------------------------------
72 vtkSmartPointer< vtkSliderRepresentation2D > Representation;
73 vtkSmartPointer< vtkSliderWidget > Widget;
79 const std::string& title,
80 vtkRenderWindowInteractor* iren,
81 double p1x, double p1y, double p2x, double p2y,
82 SliderCallback* callback = NULL
85 this->Representation =
86 vtkSmartPointer< vtkSliderRepresentation2D >::New( );
87 this->Representation->SetMinimumValue( min_value );
88 this->Representation->SetMaximumValue( max_value );
89 this->Representation->SetValue( value );
90 this->Representation->SetTitleText( title.c_str( ) );
91 this->Representation->GetPoint1Coordinate( )->
92 SetCoordinateSystemToNormalizedDisplay();
93 this->Representation->GetPoint1Coordinate( )->
95 this->Representation->GetPoint2Coordinate( )->
96 SetCoordinateSystemToNormalizedDisplay();
97 this->Representation->GetPoint2Coordinate( )->SetValue( p2x, p2y );
99 this->Widget = vtkSmartPointer< vtkSliderWidget >::New( );
100 this->Widget->SetInteractor( iren );
101 this->Widget->SetRepresentation( this->Representation );
102 this->Widget->SetAnimationModeToAnimate( );
103 this->Widget->EnabledOn( );
104 if( callback != NULL )
105 this->Widget->AddObserver( vtkCommand::InteractionEvent, callback );
109 // -------------------------------------------------------------------------
110 int main( int argc, char* argv[] )
115 << "Usage: " << argv[ 0 ]
116 << " plugins_file input_image(s)"
121 std::string plugins_file = argv[ 1 ];
125 plugins.Load( plugins_file );
128 TFilter::Pointer reader =
129 plugins.CreateProcessObject( "cpPlugins::ImageReader" );
130 if( reader.IsNull( ) )
132 std::cerr << "No suitable image reader found in plugins." << std::endl;
138 TParameters reader_params = reader->GetDefaultParameters( );
139 for( int i = 2; i < argc; ++i )
140 reader_params.AddValueToStringList( "FileNames", argv[ i ] );
141 reader->SetParameters( reader_params );
144 std::string msg = reader->Update( );
147 std::cerr << "ERROR: " << msg << std::endl;
152 // Get input image's vtk representation
153 vtkImageData* image = reader->GetOutput< TImage >( 0 )->GetVTKImageData( );
157 << "ERROR: read image does not have a valid VTK conversion."
163 // Visualization stuff
164 vtkSmartPointer< vtkRenderWindow > window =
165 vtkSmartPointer< vtkRenderWindow >::New( );
166 window->SetSize( 700, 700 );
169 vtkSmartPointer< vtkRenderer > renderer =
170 vtkSmartPointer< vtkRenderer >::New( );
171 window->AddRenderer( renderer );
174 vtkSmartPointer< vtkRenderWindowInteractor > interactor =
175 vtkSmartPointer< vtkRenderWindowInteractor >::New( );
176 interactor->SetRenderWindow( window );
179 vtkSmartPointer< TMPRActors > mpr_actors =
180 vtkSmartPointer< TMPRActors >::New( );
181 mpr_actors->AddInputData( image );
182 mpr_actors->PushDataInto( NULL, NULL, NULL, renderer );
185 vtkSmartPointer< SliderCallback > cb =
186 vtkSmartPointer< SliderCallback >::New( );
187 cb->Actors = mpr_actors;
190 mpr_actors->GetSliceNumberMinValue( 0 ),
191 mpr_actors->GetSliceNumberMaxValue( 0 ),
192 mpr_actors->GetSliceNumberMinValue( 0 ),
194 0.100, 0.15, 0.290, 0.15, cb
197 mpr_actors->GetSliceNumberMinValue( 1 ),
198 mpr_actors->GetSliceNumberMaxValue( 1 ),
199 mpr_actors->GetSliceNumberMinValue( 1 ),
201 0.300, 0.15, 0.490, 0.15, cb
204 mpr_actors->GetSliceNumberMinValue( 2 ),
205 mpr_actors->GetSliceNumberMaxValue( 2 ),
206 mpr_actors->GetSliceNumberMinValue( 2 ),
208 0.500, 0.15, 0.690, 0.15, cb
211 mpr_actors->GetMinWindow( 0 ),
212 mpr_actors->GetMaxWindow( 0 ),
213 mpr_actors->GetWindow( 0 ),
214 "Window", interactor,
215 0.100, 0.05, 0.290, 0.05, cb
218 mpr_actors->GetMinWindow( 0 ),
219 mpr_actors->GetMaxWindow( 0 ),
220 mpr_actors->GetWindow( 0 ),
222 0.300, 0.05, 0.490, 0.05, cb
226 renderer->ResetCamera( );
228 interactor->Start( );