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 <vtkSphere.h>
15 #include <vtkSphereRepresentation.h>
16 #include <vtkSphereWidget2.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;
40 void WheelCallbackFunction(vtkObject* caller, long unsigned int eventId, void* clientData, void* vtkNotUsed(callData))
42 std::cout << "WheelCallbackFunction callback" << std::endl;
44 vtkSmartPointer<TSphereWidget> sphere =
45 reinterpret_cast<TSphereWidget*>(clientData);
47 // double * center = image_actors->GetImageActor()->GetCenter();
48 double * center = image_actors->GetPlaneActor()->GetCenter();
49 auto slice = image_actors->GetSliceNumber();
50 std::cout << "plane: [" << center[0] << " , " << center[1] + slice << " , " << (center[2] + 19)*(-1) << "] " << std::endl;
51 std::cout << "slice #. " << slice <<std::endl;
53 sphere->SetCenter(center);
59 int main(int argc, char* argv[])
63 _pathIOplugin = argv[1];
69 if (!plugins.Load(_pathIOplugin))
71 std::cerr << "Failed to load plugins." << std::endl;
76 TProcessObject::Pointer reader;
77 reader = plugins.CreateProcessObject("cpPlugins::IO::ImageReader");
81 << "No suitable reader found in plugins." << std::endl
82 << "Reader: " << reader.GetPointer() << std::endl
88 TParameters* reader_params = reader->GetParameters();
89 reader_params->AddToStringList("FileNames", _img);
92 std::string err = reader->Update();
95 std::cerr << "ERROR: " << err << std::endl;
100 TImage* image = reader->GetOutput< TImage >("Output");
102 // Configure visualization objects
103 vtkSmartPointer< vtkRenderer > renderer =
104 vtkSmartPointer< vtkRenderer >::New();
105 renderer->SetBackground(0.1, 0.1, 0.1);
107 vtkSmartPointer< vtkRenderWindow > window =
108 vtkSmartPointer< vtkRenderWindow >::New();
109 window->AddRenderer(renderer);
110 window->SetSize(600, 600);
112 // Set up the interaction
113 vtkSmartPointer< vtkRenderWindowInteractor > interactor =
114 vtkSmartPointer< vtkRenderWindowInteractor >::New();
115 window->SetInteractor(interactor);
117 // Create slice actors
118 image_actors = vtkSmartPointer< TSliceActors >::New();
119 image_actors->AddInputData(image->GetVTK< vtkImageData >());
120 image_actors->SetAxis(2);
121 image_actors->PushActorsInto(window);
123 vtkSmartPointer< vtkImageActorPointPlacer > placer =
124 vtkSmartPointer< vtkImageActorPointPlacer >::New();
125 placer->SetImageActor(image_actors->GetImageActor());
127 // Create a sphere widget
128 vtkSmartPointer<TSphereWidget> sphereWidget =
129 vtkSmartPointer<TSphereWidget>::New();
130 sphereWidget->SetInteractor(interactor);
132 vtkSmartPointer<vtkCallbackCommand> myCallBack =
133 vtkSmartPointer<vtkCallbackCommand>::New();
134 myCallBack->SetCallback(WheelCallbackFunction);
135 myCallBack->SetClientData(sphereWidget);
138 interactor->AddObserver(vtkCommand::MouseWheelForwardEvent, myCallBack);
139 interactor->AddObserver(vtkCommand::MouseWheelBackwardEvent, myCallBack);
142 renderer->ResetCamera();