1 #include <cpPlugins/Interface/Interface.h>
2 #include <cpPlugins/Interface/ProcessObject.h>
3 #include <cpPlugins/Interface/Image.h>
5 #include <cpExtensions/Visualization/ImageSliceActors.h>
6 #include <cpExtensions/Interaction/SphereWidget.h>
8 #include <vtkImageActorPointPlacer.h>
9 #include <vtkPointHandleRepresentation3D.h>
10 #include <vtkProperty.h>
11 #include <vtkRenderer.h>
12 #include <vtkRenderWindow.h>
13 #include <vtkRenderWindowInteractor.h>
14 #include <vtkMapper.h>
15 #include <vtkSphereRepresentation.h>
16 #include <vtkImageSliceMapper.h>
17 #include <vtkCommand.h>
18 #include <vtkCallbackCommand.h>
20 // -------------------------------------------------------------------------
23 typedef cpPlugins::Interface::Interface TInterface;
24 typedef cpPlugins::Interface::ProcessObject TProcessObject;
25 typedef cpPlugins::Interface::DataObject TDataObject;
26 typedef cpPlugins::Interface::Image TImage;
27 typedef cpPlugins::Interface::Parameters TParameters;
28 typedef TInterface::TClasses TClasses;
30 typedef cpExtensions::Visualization::ImageSliceActors TSliceActors;
31 typedef cpExtensions::Interaction::SphereWidget TSphereWidget;
33 // -------------------------------------------------------------------------
35 std::string _pathIOplugin = "C://dev//creatis//cpPlugins//build//Debug//cpPluginsIO.dll";
36 std::string _img = "C://img//SphereVolume.mhd";
38 vtkSmartPointer<cpExtensions::Visualization::ImageSliceActors> image_actors;
39 vtkSmartPointer<cpExtensions::Interaction::SphereWidget> sphereWidget;
42 void WheelCallbackFunction(vtkObject* caller, long unsigned int eventId, void* vtkNotUsed(clientData), void* vtkNotUsed(callData))
44 std::cout << "WheelCallbackFunction callback" << std::endl;
46 vtkMapper * mapper = image_actors->GetPlaneActor()->GetMapper();
47 //vtkImageSliceMapper* imageSliceMapper = dynamic_cast<vtkImageSliceMapper*>(mapper);
48 //vtkImageSliceMapper* imageSliceMapper = vtkImageSliceMapper::SafeDownCast(mapper);
50 vtkAbstractMapper3D* abs = dynamic_cast<vtkAbstractMapper3D*>(mapper);
51 auto imgSliceMap = vtkImageSliceMapper::SafeDownCast(abs);
52 auto center = imgSliceMap->GetCenter();
55 sphereWidget->SetCenter(center);
56 //actor mapper -> cast image slice mapper -> cast dynamic plane
62 int main(int argc, char* argv[])
66 _pathIOplugin = argv[1];
72 if (!plugins.Load(_pathIOplugin))
74 std::cerr << "Failed to load plugins." << std::endl;
79 TProcessObject::Pointer reader;
80 reader = plugins.CreateObject("cpPlugins::IO::ImageReader");
84 << "No suitable reader found in plugins." << std::endl
85 << "Reader: " << reader.GetPointer() << std::endl
91 TParameters* reader_params = reader->GetParameters();
92 reader_params->AddToStringList("FileNames", _img);
95 std::string err = reader->Update();
98 std::cerr << "ERROR: " << err << std::endl;
103 TImage* image = reader->GetOutput< TImage >("Output");
105 // Configure visualization objects
106 vtkSmartPointer< vtkRenderer > renderer =
107 vtkSmartPointer< vtkRenderer >::New();
108 renderer->SetBackground(0.1, 0.1, 0.1);
110 vtkSmartPointer< vtkRenderWindow > window =
111 vtkSmartPointer< vtkRenderWindow >::New();
112 window->AddRenderer(renderer);
113 window->SetSize(600, 600);
115 // Set up the interaction
116 vtkSmartPointer< vtkRenderWindowInteractor > interactor =
117 vtkSmartPointer< vtkRenderWindowInteractor >::New();
118 window->SetInteractor(interactor);
120 // Create slice actors
121 image_actors = vtkSmartPointer< TSliceActors >::New();
122 image_actors->AddInputData(image->GetVTK< vtkImageData >());
123 image_actors->SetAxis(2);
124 image_actors->PushActorsInto(window);
126 vtkSmartPointer< vtkImageActorPointPlacer > placer =
127 vtkSmartPointer< vtkImageActorPointPlacer >::New();
128 placer->SetImageActor(image_actors->GetImageActor());
130 // Create a sphere widget
132 vtkSmartPointer<TSphereWidget>::New();
133 sphereWidget->SetInteractor(interactor);
135 vtkSmartPointer<vtkCallbackCommand> myCallBack =
136 vtkSmartPointer<vtkCallbackCommand>::New();
137 myCallBack->SetCallback(WheelCallbackFunction);
138 myCallBack->SetClientData(sphereWidget);
141 interactor->AddObserver(vtkCommand::MouseWheelForwardEvent, myCallBack);
142 interactor->AddObserver(vtkCommand::MouseWheelBackwardEvent, myCallBack);
145 renderer->ResetCamera();