]> Creatis software - cpPlugins.git/blob - appli/examples/example_ContourWidget.cxx
d9fad29133ff4381afc54f187c61c3f8f9689479
[cpPlugins.git] / appli / examples / example_ContourWidget.cxx
1 #include <vtkSmartPointer.h>
2 #include <vtkProperty.h>
3 #include <vtkContourWidget.h>
4 #include <vtkOrientedGlyphContourRepresentation.h>
5 #include <vtkRenderer.h>
6 #include <vtkRenderWindow.h>
7 #include <vtkRenderWindowInteractor.h>
8 #include <vtkCommand.h>
9 #include <vtkDebugLeaks.h>
10 #include <vtkCamera.h>
11 #include <vtkPlane.h>
12 #include <vtkPolyData.h>
13 #include <vtkCellArray.h>
14 #include <vtkPoints.h>
15 #include <vtkMath.h>
16 #include <vtkWidgetEvent.h>
17 #include <vtkWidgetEventTranslator.h>
18 #include <vtkInteractorStyleTrackballCamera.h>
19 #include <vtkInteractorStyleImage.h>
20
21 #include <vtkPNGReader.h>
22 #include <vtkImageViewer2.h> 
23 #include <vtkObjectFactory.h>
24 #include <vtkPolyDataMapper.h>
25 #include <vtkPolyData.h>
26 #include <vtkActor.h>
27
28
29 vtkSmartPointer<vtkContourWidget> contourWidget;
30 vtkSmartPointer<vtkPolyData> pd;
31 vtkSmartPointer<vtkRenderWindowInteractor> interactor;
32 vtkSmartPointer<vtkOrientedGlyphContourRepresentation> contourRep;
33
34 class KeyPressInteractorStyle : public vtkInteractorStyleImage//vtkInteractorStyleTrackballCamera
35 {
36 public:
37         static KeyPressInteractorStyle* New();
38         vtkTypeMacro(KeyPressInteractorStyle, vtkInteractorStyleTrackballCamera);
39
40         
41
42         virtual void OnKeyPress()
43         {
44                 // Get the keypress
45                 vtkRenderWindowInteractor *rwi = this->Interactor;
46                 std::string key = rwi->GetKeySym();
47
48                 // Output the key that was pressed
49                 std::cout << "Pressed " << key << std::endl;
50
51                 // Handle an arrow key
52                 if (key == "Up")
53                 {
54                         contourWidget =
55                                 vtkSmartPointer<vtkContourWidget>::New();
56                         contourWidget->SetInteractor(interactor);
57                         contourWidget->SetRepresentation(contourRep);
58                         contourWidget->On();
59
60                         std::cout << "add and move points" << std::endl;
61                         contourWidget->GetEventTranslator()->RemoveTranslation(
62                                 vtkCommand::LeftButtonPressEvent);
63                         contourWidget->GetEventTranslator()->SetTranslation(
64                                 vtkCommand::LeftButtonPressEvent,
65                                 vtkWidgetEvent::Translate);
66
67                         //contourWidget->Initialize(pd);
68                         //contourWidget->Render();
69
70                         //interactor->Initialize();
71                         //interactor->Start();
72                         //Interactor->Disable();
73                 }
74
75                 // Handle a "normal" key
76                 if (key == "Down")
77                 {
78                         std::cout << "Remove points" << std::endl;
79                         contourWidget->GetEventTranslator()->RemoveTranslation(
80                                 vtkCommand::LeftButtonPressEvent);
81                         contourWidget->GetEventTranslator()->SetTranslation(
82                                 vtkCommand::LeftButtonPressEvent,
83                                 vtkWidgetEvent::Delete);
84                         
85                 }
86
87                 // Forward events
88                 vtkInteractorStyleTrackballCamera::OnKeyPress();
89         }
90
91 };
92 vtkStandardNewMacro(KeyPressInteractorStyle);
93
94 int main( int argc, char *argv[] )
95 {
96   // Create the RenderWindow, Renderer and both Actors
97   //
98   vtkSmartPointer<vtkRenderer> renderer = vtkSmartPointer<vtkRenderer>::New();
99   vtkSmartPointer<vtkRenderWindow> renderWindow = vtkSmartPointer<vtkRenderWindow>::New();
100   renderWindow->AddRenderer(renderer);
101
102   interactor = 
103       vtkSmartPointer<vtkRenderWindowInteractor>::New();
104   interactor->SetRenderWindow(renderWindow);
105
106   vtkSmartPointer<KeyPressInteractorStyle> style =
107           vtkSmartPointer<KeyPressInteractorStyle>::New();
108   interactor->SetInteractorStyle(style);
109   style->EndRotate();
110   style->SetCurrentRenderer(renderer);
111
112   renderer->SetBackground(0.1, 0.2, 0.4);
113   renderWindow->SetSize(600, 600);
114
115   // image 2d reader
116   vtkSmartPointer<vtkPNGReader> reader =
117           vtkSmartPointer<vtkPNGReader>::New();
118   reader->SetFileName("C:\\Users\\JoseLuis\\Downloads\\pulmon.png");
119
120   // Visualize
121   vtkSmartPointer<vtkImageViewer2> imageViewer =
122           vtkSmartPointer<vtkImageViewer2>::New();
123   imageViewer->SetInputConnection(reader->GetOutputPort());
124   vtkSmartPointer<vtkRenderWindowInteractor> renderWindowInteractor =
125           vtkSmartPointer<vtkRenderWindowInteractor>::New();
126   imageViewer->SetupInteractor(renderWindowInteractor);
127  
128
129   renderWindowInteractor->Start();
130
131   // contour representation
132   contourRep = 
133       vtkSmartPointer<vtkOrientedGlyphContourRepresentation>::New();
134   contourRep->GetLinesProperty()->SetColor(1, 0, 0); //set color to red
135
136   contourWidget = 
137       vtkSmartPointer<vtkContourWidget>::New();
138   contourWidget->SetInteractor(interactor);
139   contourWidget->SetRepresentation(contourRep);
140   contourWidget->On();
141
142   pd = vtkSmartPointer<vtkPolyData>::New();
143
144   vtkSmartPointer<vtkPoints> points = vtkSmartPointer<vtkPoints>::New();
145   vtkSmartPointer<vtkCellArray> lines = vtkSmartPointer<vtkCellArray>::New();
146   vtkIdType* lineIndices = new vtkIdType[21];
147   for (int i = 0; i< 20; i++)
148     {
149     const double angle = 2.0*vtkMath::Pi()*i/20.0;
150     points->InsertPoint(static_cast<vtkIdType>(i), 0.1*cos(angle),
151                         0.1*sin(angle), 0.0 );
152     lineIndices[i] = static_cast<vtkIdType>(i);
153     }
154
155   lineIndices[20] = 0;
156   lines->InsertNextCell(21,lineIndices);
157   delete [] lineIndices;
158   pd->SetPoints(points);
159   pd->SetLines(lines);
160   
161   imageViewer->Render();
162   imageViewer->GetRenderer()->ResetCamera();
163
164   vtkSmartPointer<vtkPolyData> poly = contourRep->GetContourRepresentationAsPolyData();
165   
166   vtkSmartPointer<vtkPolyDataMapper> map = vtkSmartPointer<vtkPolyDataMapper>::New();
167   map->SetInputData(poly);
168
169   vtkSmartPointer<vtkActor> act = vtkSmartPointer<vtkActor>::New();
170   act->SetMapper(map);
171
172
173   imageViewer->GetRenderer()->AddActor(act);
174   //imageViewer->Render();
175
176   contourWidget->Initialize(pd);
177   contourWidget->Render();
178   renderer->ResetCamera();
179   renderWindow->Render();
180    
181
182   
183   interactor->Initialize();
184   interactor->Start();
185     
186   //contourWidget->Off();
187   
188   return EXIT_SUCCESS;
189 }