]> Creatis software - cpPlugins.git/blob - examples/example_SphereWidget.cxx
Moved to version 1.0
[cpPlugins.git] / 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   vtkMapper * mapper = image_actors->GetPlaneActor()->GetMapper();
47   //vtkImageSliceMapper* imageSliceMapper = dynamic_cast<vtkImageSliceMapper*>(mapper);
48   //vtkImageSliceMapper* imageSliceMapper = vtkImageSliceMapper::SafeDownCast(mapper);
49   
50   vtkAbstractMapper3D* abs = dynamic_cast<vtkAbstractMapper3D*>(mapper);
51   auto imgSliceMap = vtkImageSliceMapper::SafeDownCast(abs);
52   auto center = imgSliceMap->GetCenter();
53   
54  
55   sphereWidget->SetCenter(center);
56   //actor mapper -> cast image slice mapper -> cast dynamic plane 
57 }
58
59
60
61
62 int main(int argc, char* argv[])
63 {
64   if (argc >= 3)
65   {
66     _pathIOplugin = argv[1];
67     _img = argv[2];
68   }
69
70   // Create interface
71   TInterface plugins;
72   if (!plugins.Load(_pathIOplugin))
73   {
74     std::cerr << "Failed to load plugins." << std::endl;
75     return(1);
76   }
77
78   // Create reader
79   TProcessObject::Pointer reader;
80   reader = plugins.CreateObject("cpPlugins::IO::ImageReader");
81   if (reader.IsNull())
82   {
83     std::cerr
84       << "No suitable reader found in plugins." << std::endl
85       << "Reader: " << reader.GetPointer() << std::endl
86       << std::endl;
87     return(1);
88   } 
89
90   // Configure reader
91   TParameters* reader_params = reader->GetParameters();
92   reader_params->AddToStringList("FileNames", _img);
93
94   // Execute pipeline
95   std::string err = reader->Update();
96   if (err != "")
97   {
98     std::cerr << "ERROR: " << err << std::endl;
99     return(1);
100
101   } 
102
103   TImage* image = reader->GetOutput< TImage >("Output");
104
105   // Configure visualization objects
106   vtkSmartPointer< vtkRenderer > renderer =
107     vtkSmartPointer< vtkRenderer >::New();
108   renderer->SetBackground(0.1, 0.1, 0.1);
109
110   vtkSmartPointer< vtkRenderWindow > window =
111     vtkSmartPointer< vtkRenderWindow >::New();
112   window->AddRenderer(renderer);
113   window->SetSize(600, 600);
114
115   // Set up the interaction
116   vtkSmartPointer< vtkRenderWindowInteractor > interactor =
117     vtkSmartPointer< vtkRenderWindowInteractor >::New();
118   window->SetInteractor(interactor);
119
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);
125
126   vtkSmartPointer< vtkImageActorPointPlacer > placer =
127     vtkSmartPointer< vtkImageActorPointPlacer >::New();
128   placer->SetImageActor(image_actors->GetImageActor());
129  
130   // Create a sphere widget
131   sphereWidget =
132     vtkSmartPointer<TSphereWidget>::New();
133   sphereWidget->SetInteractor(interactor);
134
135   vtkSmartPointer<vtkCallbackCommand> myCallBack =
136     vtkSmartPointer<vtkCallbackCommand>::New();
137   myCallBack->SetCallback(WheelCallbackFunction);
138   myCallBack->SetClientData(sphereWidget);
139   
140  
141   interactor->AddObserver(vtkCommand::MouseWheelForwardEvent, myCallBack);
142   interactor->AddObserver(vtkCommand::MouseWheelBackwardEvent, myCallBack);
143
144   // Begin interaction
145   renderer->ResetCamera(); 
146   window->Render();
147   sphereWidget->On();
148   interactor->Start();
149
150   return(0);
151 }