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>
12 #include <vtkPolyData.h>
13 #include <vtkCellArray.h>
14 #include <vtkPoints.h>
16 #include <vtkWidgetEvent.h>
17 #include <vtkWidgetEventTranslator.h>
18 #include <vtkInteractorStyleTrackballCamera.h>
19 #include <vtkInteractorStyleImage.h>
21 #include <vtkPNGReader.h>
22 #include <vtkImageViewer2.h>
23 #include <vtkObjectFactory.h>
24 #include <vtkPolyDataMapper.h>
25 #include <vtkPolyData.h>
29 vtkSmartPointer<vtkContourWidget> contourWidget;
30 vtkSmartPointer<vtkPolyData> pd;
31 vtkSmartPointer<vtkRenderWindowInteractor> interactor;
32 vtkSmartPointer<vtkOrientedGlyphContourRepresentation> contourRep;
34 class KeyPressInteractorStyle : public vtkInteractorStyleImage//vtkInteractorStyleTrackballCamera
37 static KeyPressInteractorStyle* New();
38 vtkTypeMacro(KeyPressInteractorStyle, vtkInteractorStyleTrackballCamera);
42 virtual void OnKeyPress()
45 vtkRenderWindowInteractor *rwi = this->Interactor;
46 std::string key = rwi->GetKeySym();
48 // Output the key that was pressed
49 std::cout << "Pressed " << key << std::endl;
51 // Handle an arrow key
55 vtkSmartPointer<vtkContourWidget>::New();
56 contourWidget->SetInteractor(interactor);
57 contourWidget->SetRepresentation(contourRep);
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);
67 //contourWidget->Initialize(pd);
68 //contourWidget->Render();
70 //interactor->Initialize();
71 //interactor->Start();
72 //Interactor->Disable();
75 // Handle a "normal" key
78 std::cout << "Remove points" << std::endl;
79 contourWidget->GetEventTranslator()->RemoveTranslation(
80 vtkCommand::LeftButtonPressEvent);
81 contourWidget->GetEventTranslator()->SetTranslation(
82 vtkCommand::LeftButtonPressEvent,
83 vtkWidgetEvent::Delete);
88 vtkInteractorStyleTrackballCamera::OnKeyPress();
92 vtkStandardNewMacro(KeyPressInteractorStyle);
94 int main( int argc, char *argv[] )
96 // Create the RenderWindow, Renderer and both Actors
98 vtkSmartPointer<vtkRenderer> renderer = vtkSmartPointer<vtkRenderer>::New();
99 vtkSmartPointer<vtkRenderWindow> renderWindow = vtkSmartPointer<vtkRenderWindow>::New();
100 renderWindow->AddRenderer(renderer);
103 vtkSmartPointer<vtkRenderWindowInteractor>::New();
104 interactor->SetRenderWindow(renderWindow);
106 vtkSmartPointer<KeyPressInteractorStyle> style =
107 vtkSmartPointer<KeyPressInteractorStyle>::New();
108 interactor->SetInteractorStyle(style);
110 style->SetCurrentRenderer(renderer);
112 renderer->SetBackground(0.1, 0.2, 0.4);
113 renderWindow->SetSize(600, 600);
116 vtkSmartPointer<vtkPNGReader> reader =
117 vtkSmartPointer<vtkPNGReader>::New();
118 reader->SetFileName("C:\\Users\\JoseLuis\\Downloads\\pulmon.png");
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);
129 renderWindowInteractor->Start();
131 // contour representation
133 vtkSmartPointer<vtkOrientedGlyphContourRepresentation>::New();
134 contourRep->GetLinesProperty()->SetColor(1, 0, 0); //set color to red
137 vtkSmartPointer<vtkContourWidget>::New();
138 contourWidget->SetInteractor(interactor);
139 contourWidget->SetRepresentation(contourRep);
142 pd = vtkSmartPointer<vtkPolyData>::New();
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++)
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);
156 lines->InsertNextCell(21,lineIndices);
157 delete [] lineIndices;
158 pd->SetPoints(points);
161 imageViewer->Render();
162 imageViewer->GetRenderer()->ResetCamera();
164 vtkSmartPointer<vtkPolyData> poly = contourRep->GetContourRepresentationAsPolyData();
166 vtkSmartPointer<vtkPolyDataMapper> map = vtkSmartPointer<vtkPolyDataMapper>::New();
167 map->SetInputData(poly);
169 vtkSmartPointer<vtkActor> act = vtkSmartPointer<vtkActor>::New();
173 imageViewer->GetRenderer()->AddActor(act);
174 //imageViewer->Render();
176 contourWidget->Initialize(pd);
177 contourWidget->Render();
178 renderer->ResetCamera();
179 renderWindow->Render();
183 interactor->Initialize();
186 //contourWidget->Off();