]> Creatis software - cpPlugins.git/blob - appli/examples/example_SphereWidget.cxx
cd6d63550aba8ef6b4ec9d2e0822bcdd1cf28aff
[cpPlugins.git] / appli / examples / example_SphereWidget.cxx
1 #include <cpPlugins/Interface/Interface.h>
2 #include <cpPlugins/Interface/ProcessObject.h>
3 #include <cpPlugins/Interface/Image.h>
4
5 #include <cpExtensions/Visualization/ImageSliceActors.h>
6 #include <cpExtensions/Interaction/SphereWidget.h>
7
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>
19
20 // -------------------------------------------------------------------------
21 // type definiftions
22
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;
29
30 typedef cpExtensions::Visualization::ImageSliceActors TSliceActors;
31 typedef cpExtensions::Interaction::SphereWidget       TSphereWidget;
32
33 // -------------------------------------------------------------------------
34
35 std::string _pathIOplugin = "C://dev//creatis//cpPlugins//build//Debug//cpPluginsIO.dll";
36 std::string _img = "C://img//SphereVolume.mhd";
37
38 vtkSmartPointer<cpExtensions::Visualization::ImageSliceActors> image_actors;
39 vtkSmartPointer<cpExtensions::Interaction::SphereWidget> sphereWidget;
40
41
42 void WheelCallbackFunction(vtkObject* caller, long unsigned int eventId, void* vtkNotUsed(clientData), void* vtkNotUsed(callData))
43 {
44   std::cout << "WheelCallbackFunction callback" << std::endl;
45
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();  
51   
52   auto center = image_actors->GetPlaneActor()->GetCenter();
53
54   std::cout << "plane: {" << center[0] << " , " << center[1] << " , " << center[2] << "} " << std::endl;
55   //std::cout << "slice: {" << centerImg[0] << " , " << centerImg[1] << " , " << centerImg[2] << "} " << std::endl;
56
57   switch (axis)
58   {
59   case 0: // X
60     center[1] = sphereWidget->GetPosition()[1];
61     center[2] = sphereWidget->GetPosition()[2];
62     break;                    
63   case 1: // Y                
64     center[0] = sphereWidget->GetPosition()[0];
65     center[2] = sphereWidget->GetPosition()[2];
66     break;                    
67   case 2: // Z                
68     center[1] = sphereWidget->GetPosition()[1];
69     center[0] = sphereWidget->GetPosition()[0];
70     break;
71   default: 
72     break;
73   }
74
75   sphereWidget->SetCenter(center);
76  
77 }
78
79
80
81
82 int main(int argc, char* argv[])
83 {
84   if (argc >= 3)
85   {
86     _pathIOplugin = argv[1];
87     _img = argv[2];
88   }
89
90   // Create interface
91   TInterface plugins;
92   if (!plugins.Load(_pathIOplugin))
93   {
94     std::cerr << "Failed to load plugins." << std::endl;
95     return(1);
96   }
97
98   // Create reader
99   TProcessObject::Pointer reader;
100   reader = plugins.CreateObject("cpPlugins::IO::ImageReader");
101   if (reader.IsNull())
102   {
103     std::cerr
104       << "No suitable reader found in plugins." << std::endl
105       << "Reader: " << reader.GetPointer() << std::endl
106       << std::endl;
107     return(1);
108   } 
109
110   // Configure reader
111   TParameters* reader_params = reader->GetParameters();
112   reader_params->AddToStringList("FileNames", _img);
113
114   // Execute pipeline
115   std::string err = reader->Update();
116   if (err != "")
117   {
118     std::cerr << "ERROR: " << err << std::endl;
119     return(1);
120
121   } 
122
123   TImage* image = reader->GetOutput< TImage >("Output");
124
125   // Configure visualization objects
126   vtkSmartPointer< vtkRenderer > renderer =
127     vtkSmartPointer< vtkRenderer >::New();
128   renderer->SetBackground(0.1, 0.1, 0.1);
129
130   vtkSmartPointer< vtkRenderWindow > window =
131     vtkSmartPointer< vtkRenderWindow >::New();
132   window->AddRenderer(renderer);
133   window->SetSize(600, 600);
134
135   // Set up the interaction
136   vtkSmartPointer< vtkRenderWindowInteractor > interactor =
137     vtkSmartPointer< vtkRenderWindowInteractor >::New();
138   window->SetInteractor(interactor);
139
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);
145
146   vtkSmartPointer< vtkImageActorPointPlacer > placer =
147     vtkSmartPointer< vtkImageActorPointPlacer >::New();
148   placer->SetImageActor(image_actors->GetImageActor());
149  
150   // Create a sphere widget
151   sphereWidget =
152     vtkSmartPointer<TSphereWidget>::New();
153   sphereWidget->SetInteractor(interactor);
154   sphereWidget->SetAxis(image_actors->GetAxis()); //sinchronize image pane with sphere plane
155
156   vtkSmartPointer<vtkCallbackCommand> myCallBack =
157     vtkSmartPointer<vtkCallbackCommand>::New();
158   myCallBack->SetCallback(WheelCallbackFunction);
159   myCallBack->SetClientData(sphereWidget);
160   
161  
162   interactor->AddObserver(vtkCommand::MouseWheelForwardEvent, myCallBack);
163   interactor->AddObserver(vtkCommand::MouseWheelBackwardEvent, myCallBack);
164
165   // Begin interaction
166   renderer->ResetCamera(); 
167   window->Render();
168   sphereWidget->On();
169   interactor->Start();
170
171   return(0);
172 }