38 #include "usVirtualNeedle.h"
40 #ifdef USTK_HAVE_VTK_QT
48 m_meshPolyData = vtkPolyData::New();
50 vtkSmartPointer<vtkCylinderSource> cylinderSource = vtkSmartPointer<vtkCylinderSource>::New();
51 cylinderSource->SetCenter(0, 0, 0);
52 cylinderSource->SetRadius(0.0001);
53 cylinderSource->SetHeight(0.01);
54 cylinderSource->SetResolution(100);
55 cylinderSource->Update();
56 m_meshNeedle = cylinderSource->GetOutput();
59 vtkSmartPointer<vtkPolyDataMapper> cylinderMapper = vtkSmartPointer<vtkPolyDataMapper>::New();
60 cylinderMapper->SetInputConnection(cylinderSource->GetOutputPort());
61 m_needleActor = vtkSmartPointer<vtkActor>::New();
62 m_needleActor->GetProperty()->SetColor(1.0, 0, 0);
63 m_needleActor->GetProperty()->SetOpacity(1.0);
64 m_needleActor->SetMapper(cylinderMapper);
67 m_axesActor = vtkSmartPointer<vtkAxesActor>::New();
70 m_axesActor->SetXAxisLabelText(
"X");
71 m_axesActor->SetYAxisLabelText(
"Y");
72 m_axesActor->SetZAxisLabelText(
"Z");
73 m_axesActor->SetTotalLength(0.01, 0.01, 0.01);
76 renderer = vtkRenderer::New();
77 renderer->AddActor(m_axesActor);
78 renderer->AddActor(m_needleActor);
79 renderer->SetBackground(0.5, 0.5, 0.5);
80 renderer->ResetCamera();
83 #if USTK_HAVE_VTK_VERSION < 0x090000
84 vtkRenderWindow *renderWindow = this->GetRenderWindow();
86 vtkRenderWindow *renderWindow = this->renderWindow();
88 renderWindow->AddRenderer(renderer);
108 if (event->key() == Qt::Key_Left) {
109 vpHomogeneousMatrix transform;
111 transform[0][3] = 0.001;
113 }
else if (event->key() == Qt::Key_Right) {
114 vpHomogeneousMatrix transform;
116 transform[0][3] = -0.001;
118 }
else if (event->key() == Qt::Key_Up) {
119 vpHomogeneousMatrix transform;
121 transform[1][3] = 0.001;
123 }
else if (event->key() == Qt::Key_Down) {
124 vpHomogeneousMatrix transform;
126 transform[1][3] = -0.001;
128 }
else if (event->key() == Qt::Key_PageUp) {
129 vpHomogeneousMatrix transform;
131 transform[2][3] = 0.001;
133 }
else if (event->key() == Qt::Key_PageDown) {
134 vpHomogeneousMatrix transform;
136 transform[2][3] = -0.001;
138 }
else if (event->key() == Qt::Key_Space) {
139 double *point1 = m_meshPolyData->GetPoints()->GetPoint(0);
141 m_meshPolyData->GetPoints()->SetPoint(0, point1);
142 m_meshPolyData->GetPoints()->Modified();
143 #if USTK_HAVE_VTK_VERSION < 0x090000
144 this->GetRenderWindow()->Render();
146 this->renderWindow()->Render();
148 }
else if (event->key() == Qt::Key_0) {
149 double *point1 = m_meshPolyData->GetPoints()->GetPoint(0);
151 m_meshPolyData->GetPoints()->SetPoint(0, point1);
152 m_meshPolyData->GetPoints()->Modified();
153 #if USTK_HAVE_VTK_VERSION < 0x090000
154 this->GetRenderWindow()->Render();
156 this->renderWindow()->Render();
159 usViewerWidget::keyPressEvent(event);
169 m_meshPolyData = mesh;
171 vtkSmartPointer<vtkPolyDataMapper> meshMapper = vtkSmartPointer<vtkPolyDataMapper>::New();
172 meshMapper->SetInputData(mesh);
173 m_meshActor = vtkSmartPointer<vtkActor>::New();
174 m_meshActor->GetProperty()->SetColor(0, 0, 1.0);
175 m_meshActor->SetMapper(meshMapper);
177 renderer->AddActor(m_meshActor);
188 if (m_needleActor->GetUserMatrix() == NULL) {
189 vtkSmartPointer<vtkMatrix4x4> vtkMatrix = vtkSmartPointer<vtkMatrix4x4>::New();
191 m_needleActor->SetUserMatrix(vtkMatrix);
194 vpHomogeneousMatrix currentTransform;
195 currentTransform.eye();
199 vpHomogeneousMatrix newTransform = currentTransform * transform;
202 vtkMatrix4x4 *vtkNewtransform = vtkMatrix4x4::New();
205 m_needleActor->SetUserMatrix(vtkNewtransform);
206 #if USTK_HAVE_VTK_VERSION < 0x090000
207 this->GetRenderWindow()->Render();
209 this->renderWindow()->Render();
226 #if USTK_HAVE_VTK_VERSION < 0x090000
227 this->GetRenderWindow()->Render();
229 this->renderWindow()->Render();
static void convert(const usImagePostScan3D< unsigned char > &postScanImage, vtkSmartPointer< vtkImageData > &vtkPostScanImage, vtkSmartPointer< vtkImageImport > importer=NULL)
usVirtualNeedle(QWidget *parent=NULL, Qt::WindowFlags f=Qt::WindowFlags())
vtkPoints * getMeshPoints()
void setMeshInScene(vtkPolyData *mesh)
void paintEvent(QPaintEvent *event)
void keyPressEvent(QKeyEvent *event)
void updateNeedlePosition(vpHomogeneousMatrix transform)