]> Creatis software - cpPlugins.git/blob - appli/examples/example_SphereWidget.cxx
sphere widget update
[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 <vtkSphere.h>
15 #include <vtkSphereRepresentation.h>
16 #include <vtkSphereWidget2.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
40 void WheelCallbackFunction(vtkObject* caller, long unsigned int eventId, void* clientData, void* vtkNotUsed(callData))
41 {
42   std::cout << "WheelCallbackFunction callback" << std::endl;
43
44   vtkSmartPointer<TSphereWidget> sphere =
45     reinterpret_cast<TSphereWidget*>(clientData);
46
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;
52
53   sphere->SetCenter(center);
54   
55 }
56
57
58
59 int main(int argc, char* argv[])
60 {
61   if (argc >= 3)
62   {
63     _pathIOplugin = argv[1];
64     _img = argv[2];
65   }
66
67   // Create interface
68   TInterface plugins;
69   if (!plugins.Load(_pathIOplugin))
70   {
71     std::cerr << "Failed to load plugins." << std::endl;
72     return(1);
73   }
74
75   // Create reader
76   TProcessObject::Pointer reader;
77   reader = plugins.CreateProcessObject("cpPlugins::IO::ImageReader");
78   if (reader.IsNull())
79   {
80     std::cerr
81       << "No suitable reader found in plugins." << std::endl
82       << "Reader: " << reader.GetPointer() << std::endl
83       << std::endl;
84     return(1);
85   } 
86
87   // Configure reader
88   TParameters* reader_params = reader->GetParameters();
89   reader_params->AddToStringList("FileNames", _img);
90
91   // Execute pipeline
92   std::string err = reader->Update();
93   if (err != "")
94   {
95     std::cerr << "ERROR: " << err << std::endl;
96     return(1);
97
98   } 
99
100   TImage* image = reader->GetOutput< TImage >("Output");
101
102   // Configure visualization objects
103   vtkSmartPointer< vtkRenderer > renderer =
104     vtkSmartPointer< vtkRenderer >::New();
105   renderer->SetBackground(0.1, 0.1, 0.1);
106
107   vtkSmartPointer< vtkRenderWindow > window =
108     vtkSmartPointer< vtkRenderWindow >::New();
109   window->AddRenderer(renderer);
110   window->SetSize(600, 600);
111
112   // Set up the interaction
113   vtkSmartPointer< vtkRenderWindowInteractor > interactor =
114     vtkSmartPointer< vtkRenderWindowInteractor >::New();
115   window->SetInteractor(interactor);
116
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);
122
123   vtkSmartPointer< vtkImageActorPointPlacer > placer =
124     vtkSmartPointer< vtkImageActorPointPlacer >::New();
125   placer->SetImageActor(image_actors->GetImageActor());
126  
127   // Create a sphere widget
128   vtkSmartPointer<TSphereWidget> sphereWidget =
129     vtkSmartPointer<TSphereWidget>::New();
130   sphereWidget->SetInteractor(interactor);
131
132   vtkSmartPointer<vtkCallbackCommand> myCallBack =
133     vtkSmartPointer<vtkCallbackCommand>::New();
134   myCallBack->SetCallback(WheelCallbackFunction);
135   myCallBack->SetClientData(sphereWidget);
136   
137  
138   interactor->AddObserver(vtkCommand::MouseWheelForwardEvent, myCallBack);
139   interactor->AddObserver(vtkCommand::MouseWheelBackwardEvent, myCallBack);
140
141   // Begin interaction
142   renderer->ResetCamera(); 
143   window->Render();
144   sphereWidget->On();
145   interactor->Start();
146
147   return(0);
148 }