3 #include <cpExtensions/IO/MementoState.h>
4 #include <cpPlugins/Plugins/BasicFilters/BinaryErodeImageFilter.h>
6 #include <vtkRenderWindow.h>
7 #include <vtkRenderWindowInteractor.h>
8 #include <vtkRenderer.h>
10 #include <itkImageToVTKImageFilter.h>
13 #define myWait Sleep(10000);
15 #define myWait usleep(10000);
19 // -------------------------------------------------------------------------
22 typedef cpPlugins::Interface::Interface TInterface;
23 typedef cpPlugins::Interface::ProcessObject TProcessObject;
24 typedef cpPlugins::Interface::DataObject TDataObject;
25 typedef cpPlugins::Interface::Image TImage;
26 typedef cpPlugins::Interface::Parameters TParameters;
27 typedef TInterface::TClasses TClasses;
29 typedef cpExtensions::Visualization::ImageSliceActors TSliceActors;
31 typedef cpExtensions::IO::MementoState TMemento;
32 typedef cpPlugins::BasicFilters::BinaryErodeImageFilter TBinaryErodeFilter;
33 // -------------------------------------------------------------------------
35 std::string _pathIOplugin = "C://dev//creatis//cpPlugins//build//Debug//cpPluginsIO.dll";
36 std::string _pathBasicFiltersPlugin= "C://dev//creatis//cpPlugins//build//Debug//cpPluginsBasicFilters.dll";
37 std::string _img = "C://img//SphereVolume.mhd";
39 int main(int argc, char* argv[])
44 _pathIOplugin = argv[2];
45 _pathBasicFiltersPlugin = argv[3];
50 if (!plugins.Load(_pathIOplugin) ||
51 !plugins.Load(_pathBasicFiltersPlugin))
53 std::cerr << "Failed to load plugins." << std::endl;
58 TProcessObject::Pointer reader;
59 reader = plugins.CreateObject("cpPlugins::IO::ImageReader");
63 << "No suitable reader found in plugins." << std::endl
64 << "Reader: " << reader.GetPointer() << std::endl
70 TParameters* reader_params = reader->GetParameters();
71 reader_params->AddToStringList("FileNames", _img);
74 std::string err = reader->Update();
77 std::cerr << "ERROR: " << err << std::endl;
82 TImage* image = reader->GetOutput< TImage >("Output");
85 TMemento* _memento = new TMemento();
86 _memento->SetToMemento(image);
88 /* auto retrievedImage = _memento->GetFromMemento(1);
89 image->SetVTK(retrievedImage);
91 // filter 1 (state 2) ---------------------------------------------------------------
93 TProcessObject::Pointer binaryFilter;
94 binaryFilter = plugins.CreateObject("cpPlugins::BasicFilters::BinaryErodeImageFilter");
95 if (binaryFilter.IsNull())
98 << "No suitable reader found in plugins." << std::endl
99 << "Reader: " << binaryFilter.GetPointer() << std::endl
105 TDataObject * readerOut = reader->GetOutput< TDataObject >("Output");
106 binaryFilter->SetInput("Input", readerOut);
107 binaryFilter->Update();
108 _memento->SetToMemento(binaryFilter->GetOutput< TImage >("Output"));
112 vtkSmartPointer<vtkImageData> retrievedImage = _memento->MementoUndo();
114 // the retrieved image could not be ready if this happens the function returns null
115 // for the test we made the example wait before try to read but this is the way
117 if (retrievedImage == nullptr)
122 //image->SetVTK(retrievedImage.Get()); // this metohd is not implemented yet
124 // Configure visualization objects
125 vtkSmartPointer< vtkRenderer > renderer =
126 vtkSmartPointer< vtkRenderer >::New();
127 renderer->SetBackground(0.1, 0.1, 0.1);
129 vtkSmartPointer< vtkRenderWindow > window =
130 vtkSmartPointer< vtkRenderWindow >::New();
131 window->AddRenderer(renderer);
132 window->SetSize(600, 600);
134 // Set up the interaction
135 vtkSmartPointer< vtkRenderWindowInteractor > interactor =
136 vtkSmartPointer< vtkRenderWindowInteractor >::New();
137 window->SetInteractor(interactor);
139 // Create slice actors
140 vtkSmartPointer< TSliceActors > image_actors =
141 vtkSmartPointer< TSliceActors >::New();
142 //image_actors->AddInputData(image->GetVTK< vtkImageData >(), 2);
143 image_actors->AddInputData(retrievedImage);
144 image_actors->SetAxis(2);
145 image_actors->PushActorsInto(window);
148 renderer->ResetCamera();