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 int axis = image_actors->GetAxis();
47 vtkImageMapper3D * mapper = image_actors->GetImageActor()->GetMapper();
48 vtkAbstractMapper3D* abs = dynamic_cast<vtkAbstractMapper3D*>(mapper);
49 auto imgSliceMap = vtkImageSliceMapper::SafeDownCast(abs);
50 // auto centerImg = imgSliceMap->GetCenter();
52 auto center = image_actors->GetPlaneActor()->GetCenter();
54 std::cout << "plane: {" << center[0] << " , " << center[1] << " , " << center[2] << "} " << std::endl;
55 //std::cout << "slice: {" << centerImg[0] << " , " << centerImg[1] << " , " << centerImg[2] << "} " << std::endl;
60 center[1] = sphereWidget->GetPosition()[1];
61 center[2] = sphereWidget->GetPosition()[2];
64 center[0] = sphereWidget->GetPosition()[0];
65 center[2] = sphereWidget->GetPosition()[2];
68 center[1] = sphereWidget->GetPosition()[1];
69 center[0] = sphereWidget->GetPosition()[0];
75 sphereWidget->SetCenter(center);
82 int main(int argc, char* argv[])
86 _pathIOplugin = argv[1];
92 if (!plugins.Load(_pathIOplugin))
94 std::cerr << "Failed to load plugins." << std::endl;
99 TProcessObject::Pointer reader;
100 reader = plugins.CreateObject("cpPlugins::IO::ImageReader");
104 << "No suitable reader found in plugins." << std::endl
105 << "Reader: " << reader.GetPointer() << std::endl
111 TParameters* reader_params = reader->GetParameters();
112 reader_params->AddToStringList("FileNames", _img);
115 std::string err = reader->Update();
118 std::cerr << "ERROR: " << err << std::endl;
123 TImage* image = reader->GetOutput< TImage >("Output");
125 // Configure visualization objects
126 vtkSmartPointer< vtkRenderer > renderer =
127 vtkSmartPointer< vtkRenderer >::New();
128 renderer->SetBackground(0.1, 0.1, 0.1);
130 vtkSmartPointer< vtkRenderWindow > window =
131 vtkSmartPointer< vtkRenderWindow >::New();
132 window->AddRenderer(renderer);
133 window->SetSize(600, 600);
135 // Set up the interaction
136 vtkSmartPointer< vtkRenderWindowInteractor > interactor =
137 vtkSmartPointer< vtkRenderWindowInteractor >::New();
138 window->SetInteractor(interactor);
140 // Create slice actors
141 image_actors = vtkSmartPointer< TSliceActors >::New();
142 image_actors->SetInputImage(image->GetVTK< vtkImageData >());
143 image_actors->SetAxis(0);
144 image_actors->PushActorsInto(window);
146 vtkSmartPointer< vtkImageActorPointPlacer > placer =
147 vtkSmartPointer< vtkImageActorPointPlacer >::New();
148 placer->SetImageActor(image_actors->GetImageActor());
150 // Create a sphere widget
152 vtkSmartPointer<TSphereWidget>::New();
153 sphereWidget->SetInteractor(interactor);
154 sphereWidget->SetAxis(image_actors->GetAxis()); //sinchronize image pane with sphere plane
156 vtkSmartPointer<vtkCallbackCommand> myCallBack =
157 vtkSmartPointer<vtkCallbackCommand>::New();
158 myCallBack->SetCallback(WheelCallbackFunction);
159 myCallBack->SetClientData(sphereWidget);
162 interactor->AddObserver(vtkCommand::MouseWheelForwardEvent, myCallBack);
163 interactor->AddObserver(vtkCommand::MouseWheelBackwardEvent, myCallBack);
166 renderer->ResetCamera();