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 )
39 vtkSliderWidget* wdg =
40 reinterpret_cast< vtkSliderWidget* >( caller );
43 vtkSliderRepresentation* rep =
44 static_cast< vtkSliderRepresentation* >(
45 wdg->GetRepresentation( )
49 std::string title = rep->GetTitleText( );
51 this->Actors->SetSlice( 0, int( rep->GetValue( ) ) );
52 else if( title == "Y" )
53 this->Actors->SetSlice( 1, int( rep->GetValue( ) ) );
54 else if( title == "Z" )
55 this->Actors->SetSlice( 2, int( rep->GetValue( ) ) );
56 else if( title == "Window" )
57 this->Actors->SetWindow( 0, rep->GetValue( ) );
58 else if( title == "Level" )
59 this->Actors->SetLevel( 0, rep->GetValue( ) );
71 // -------------------------------------------------------------------------
74 vtkSmartPointer< vtkSliderRepresentation2D > Representation;
75 vtkSmartPointer< vtkSliderWidget > Widget;
81 const std::string& title,
82 vtkRenderWindowInteractor* iren,
83 double p1x, double p1y, double p2x, double p2y,
84 SliderCallback* callback = NULL
87 this->Representation =
88 vtkSmartPointer< vtkSliderRepresentation2D >::New( );
89 this->Representation->SetMinimumValue( min_value );
90 this->Representation->SetMaximumValue( max_value );
91 this->Representation->SetValue( value );
92 this->Representation->SetTitleText( title.c_str( ) );
93 this->Representation->GetPoint1Coordinate( )->
94 SetCoordinateSystemToNormalizedDisplay();
95 this->Representation->GetPoint1Coordinate( )->
97 this->Representation->GetPoint2Coordinate( )->
98 SetCoordinateSystemToNormalizedDisplay();
99 this->Representation->GetPoint2Coordinate( )->SetValue( p2x, p2y );
101 this->Widget = vtkSmartPointer< vtkSliderWidget >::New( );
102 this->Widget->SetInteractor( iren );
103 this->Widget->SetRepresentation( this->Representation );
104 this->Widget->SetAnimationModeToAnimate( );
105 this->Widget->EnabledOn( );
106 if( callback != NULL )
107 this->Widget->AddObserver( vtkCommand::InteractionEvent, callback );
111 // -------------------------------------------------------------------------
112 int main( int argc, char* argv[] )
117 << "Usage: " << argv[ 0 ]
118 << " plugins_file input_image(s)"
123 std::string plugins_file = argv[ 1 ];
127 plugins.Load( plugins_file );
130 TFilter::Pointer reader =
131 plugins.CreateProcessObject( "cpPlugins::IO::ImageReader" );
132 if( reader.IsNull( ) )
135 << "ERROR: No suitable image reader found in plugins."
142 TParameters* reader_params = reader->GetParameters( );
143 for( int i = 2; i < argc; ++i )
144 reader_params->AddToStringList( "FileNames", argv[ i ] );
147 std::string msg = reader->Update( );
150 std::cerr << "ERROR: " << msg << std::endl;
155 // Get input image's vtk representation
156 vtkImageData* image =
157 reader->GetOutput< TImage >( "Output" )->GetVTK< vtkImageData >( );
161 << "ERROR: read image does not have a valid VTK conversion."
167 // Visualization stuff
168 vtkSmartPointer< vtkRenderWindow > window =
169 vtkSmartPointer< vtkRenderWindow >::New( );
170 window->SetSize( 700, 700 );
173 vtkSmartPointer< vtkRenderer > renderer =
174 vtkSmartPointer< vtkRenderer >::New( );
175 renderer->SetBackground( 0, 0, 1 );
176 window->AddRenderer( renderer );
179 vtkSmartPointer< vtkRenderWindowInteractor > interactor =
180 vtkSmartPointer< vtkRenderWindowInteractor >::New( );
181 interactor->SetRenderWindow( window );
184 vtkSmartPointer< TMPRActors > mpr_actors =
185 vtkSmartPointer< TMPRActors >::New( );
186 mpr_actors->AddInputData( image );
187 mpr_actors->PushActorsInto( NULL, NULL, NULL, window );
190 vtkSmartPointer< SliderCallback > cb =
191 vtkSmartPointer< SliderCallback >::New( );
192 cb->Actors = mpr_actors;
196 mpr_actors->GetSliceNumberMinValue( 0 ),
197 mpr_actors->GetSliceNumberMaxValue( 0 ),
198 mpr_actors->GetSliceNumberMinValue( 0 ),
200 0.100, 0.15, 0.290, 0.15, cb
203 mpr_actors->GetSliceNumberMinValue( 1 ),
204 mpr_actors->GetSliceNumberMaxValue( 1 ),
205 mpr_actors->GetSliceNumberMinValue( 1 ),
207 0.300, 0.15, 0.490, 0.15, cb
210 mpr_actors->GetSliceNumberMinValue( 2 ),
211 mpr_actors->GetSliceNumberMaxValue( 2 ),
212 mpr_actors->GetSliceNumberMinValue( 2 ),
214 0.500, 0.15, 0.690, 0.15, cb
217 mpr_actors->GetMinWindow( 0 ),
218 mpr_actors->GetMaxWindow( 0 ),
219 mpr_actors->GetWindow( 0 ),
220 "Window", interactor,
221 0.100, 0.05, 0.290, 0.05, cb
224 mpr_actors->GetMinWindow( 0 ),
225 mpr_actors->GetMaxWindow( 0 ),
226 mpr_actors->GetWindow( 0 ),
228 0.300, 0.05, 0.490, 0.05, cb
233 renderer->ResetCamera( );
235 interactor->Start( );