6 #include <vtkRenderer.h>
7 #include <vtkRenderWindow.h>
8 #include <vtkRenderWindowInteractor.h>
10 #include <cpPlugins/Interface/Plugins.h>
11 #include <cpPlugins/Interface/Image.h>
13 #include <cpExtensions/Visualization/ImageSliceActors.h>
15 // -------------------------------------------------------------------------
16 typedef cpPlugins::Interface::Plugins TPlugins;
17 typedef cpPlugins::Interface::Image TImage;
18 typedef cpExtensions::Visualization::ImageSliceActors TSliceActors;
20 // -------------------------------------------------------------------------
21 int main( int argc, char* argv[] )
26 << "Usage: " << argv[ 0 ]
27 << " plugins_file input_image lower upper"
32 std::string plugins_file = argv[ 1 ];
33 double lower = std::atof( argv[ argc - 2 ] );
34 double upper = std::atof( argv[ argc - 1 ] );
37 cpPlugins::Interface::Plugins plugins;
38 if( !plugins.LoadPluginsPath( plugins_file ) )
40 std::cerr << "Failed to load plugins." << std::endl;
45 // Associate filenames
46 std::vector< std::string > fnames;
47 for( int i = 2; i < argc - 2; ++i )
48 fnames.push_back( argv[ i ] );
51 std::string image_name = "";
54 image_name = plugins.ReadImage( fnames, "" );
56 catch( std::exception& err )
58 std::cerr << err.what( ) << std::endl;
63 // Apply a two-level threshold
64 std::string filter_name =
65 "cpPlugins::BasicFilters::BinaryThresholdImageFilter";
67 if( !( plugins.ActivateFilter( filter_name ) ) )
69 std::cerr << "No filter found" << std::endl;
75 TPlugins::TStringContainer input_names;
76 plugins.GetActiveFilterInputsNames( input_names );
77 for( auto iIt = input_names.begin( ); iIt != input_names.end( ); ++iIt )
78 plugins.ConnectInputInActiveFilter( image_name, *iIt );
81 TPlugins::TParameters* filter_params = plugins.GetActiveFilterParameters( );
82 filter_params->SetReal( "LowerThresholdValue", lower );
83 filter_params->SetReal( "UpperThresholdValue", upper );
84 filter_params->SetUint( "InsideValue", 1 );
85 filter_params->SetUint( "OutsideValue", 0 );
88 TPlugins::TStringContainer output_names;
91 if( !( plugins.UpdateActiveFilter( output_names, image_name ) ) )
93 std::cerr << "Error executing filter." << std::endl;
98 catch( std::exception& err )
100 std::cerr << err.what( ) << std::endl;
104 std::string threshold_name = *( output_names.begin( ) );
107 TImage* image = plugins.GetData< TImage >( image_name );
108 TImage* threshold = plugins.GetData< TImage >( threshold_name );
110 // Configure visualization objects
111 vtkSmartPointer< vtkRenderer > renderer =
112 vtkSmartPointer< vtkRenderer >::New( );
113 renderer->SetBackground( 0.1, 0.3, 0.5 );
115 vtkSmartPointer< vtkRenderWindow > window =
116 vtkSmartPointer< vtkRenderWindow >::New( );
117 window->AddRenderer( renderer );
118 window->SetSize( 600, 600 );
120 // Set up the interaction
121 vtkSmartPointer< vtkRenderWindowInteractor > interactor =
122 vtkSmartPointer< vtkRenderWindowInteractor >::New( );
123 window->SetInteractor( interactor );
125 // Create slice actors
126 vtkSmartPointer< TSliceActors > image_actors =
127 vtkSmartPointer< TSliceActors >::New( );
128 image_actors->SetInputImage( image->GetVTK< vtkImageData >( ) );
129 image_actors->AddBinaryImage( threshold->GetVTK< vtkImageData >( ), 1, 0, 1 );
130 image_actors->SetAxis( 2 );
131 image_actors->PushActorsInto( window );
134 image_actors->ResetCamera( );
136 interactor->Start( );