ACloudViewer  3.9.4
A Modern Library for 3D Data Processing
moveactorinteractorstyle.cpp
Go to the documentation of this file.
1 // ----------------------------------------------------------------------------
2 // - CloudViewer: www.cloudViewer.org -
3 // ----------------------------------------------------------------------------
4 // Copyright (c) 2018-2024 www.cloudViewer.org
5 // SPDX-License-Identifier: MIT
6 // ----------------------------------------------------------------------------
7 
9 
10 #include <VtkUtils/vtkutils.h>
11 #include <vtkCellPicker.h>
12 #include <vtkExtractEdges.h>
13 #include <vtkObjectFactory.h>
14 #include <vtkPicker.h>
15 #include <vtkPickingManager.h>
16 #include <vtkPointPicker.h>
17 #include <vtkPolyDataMapper.h>
18 #include <vtkPropPicker.h>
19 #include <vtkProperty.h>
20 #include <vtkRenderWindow.h>
21 #include <vtkRenderWindowInteractor.h>
22 #include <vtkRenderer.h>
23 
24 #include <QDebug>
25 
26 #include "utils.h"
27 
28 static const QColor HighlightColor = Qt::yellow;
29 
30 namespace VtkUtils {
31 
34  : QObject(parent) {}
35 
37  vtkInteractorStyleTrackballCamera::OnLeftButtonDown();
38 
39  int x = GetInteractor()->GetEventPosition()[0];
40  int y = GetInteractor()->GetEventPosition()[1];
41 
42  VTK_CREATE(vtkPicker, picker);
43  picker->SetTolerance(0.001);
44  vtkRenderer* defaultRenderer = GetDefaultRenderer();
45  picker->Pick(x, y, 0, defaultRenderer);
46  m_pickedActor = picker->GetActor();
47 }
48 
50  vtkInteractorStyleTrackballCamera::OnLeftButtonUp();
52  m_pickedActor = nullptr;
53 }
54 
56  if (m_pickedActor) return;
57 
58  vtkInteractorStyleTrackballCamera::Rotate();
59 }
60 
62  if (m_pickedActor) return;
63 
64  vtkInteractorStyleTrackballCamera::Spin();
65 }
66 
68  vtkInteractorStyleTrackballCamera::OnMouseMove();
69 
70  if (m_useHighlight) {
71  int x = GetInteractor()->GetEventPosition()[0];
72  int y = GetInteractor()->GetEventPosition()[1];
73 
74  VTK_CREATE(vtkPicker, picker);
75  picker->SetTolerance(0.001);
76  vtkRenderer* defaultRenderer = GetDefaultRenderer();
77  picker->Pick(x, y, 0, defaultRenderer);
78  vtkActor* hoverActor = picker->GetActor();
79 
80  if (hoverActor) {
81  vtkDataSet* dataSet = hoverActor->GetMapper()->GetInput();
82  double* hoverPos = picker->GetPickPosition();
83 
85  m_highlightActor->SetPickable(false);
86  VTK_CREATE(vtkExtractEdges, edges);
87  edges->SetInputData(dataSet);
88 
89  VTK_CREATE(vtkPolyDataMapper, mapper);
90  mapper->SetInputConnection(edges->GetOutputPort());
91 
92  double clrArr[3];
94 
95  m_highlightActor->SetMapper(mapper);
96  m_highlightActor->SetVisibility(1);
97  m_highlightActor->GetProperty()->SetColor(clrArr);
98  m_highlightActor->SetPosition(hoverPos);
99  defaultRenderer->AddActor(m_highlightActor);
100  defaultRenderer->GetRenderWindow()->Render();
101  } else {
102  if (m_highlightActor) {
103  m_highlightActor->SetVisibility(0);
104  defaultRenderer->GetRenderWindow()->Render();
105  }
106  }
107  }
108 
109  if (m_pickedActor) {
110  int x = GetInteractor()->GetEventPosition()[0];
111  int y = GetInteractor()->GetEventPosition()[1];
112 
113  VTK_CREATE(vtkPicker, picker);
114  picker->SetTolerance(0.001);
115  vtkRenderer* defaultRenderer = GetDefaultRenderer();
116  picker->Pick(x, y, 0, defaultRenderer);
117 
118  double* movePos = picker->GetPickPosition();
119  m_pickedActor->SetPosition(movePos);
120  defaultRenderer->GetRenderWindow()->Render();
121  }
122 }
123 
125  vtkInteractorStyleTrackballCamera::OnChar();
126 }
127 
129  m_useHighlight = highlight;
130 }
131 
133 
134 } // namespace VtkUtils
vtkSmartPointer< vtkActor > m_highlightActor
vtkSmartPointer< vtkActor > m_pickedActor
void actorMoved(vtkActor *actor)
static const QColor HighlightColor
normal_z y
normal_z x
void vtkColor(const QColor &clr, double *vtkClr)
Definition: utils.cpp:60
void vtkInitOnce(T **obj)
Definition: vtkutils.h:44
vtkStandardNewMacro(MoveActorInteractorStyle)
constexpr Rgb yellow(MAX, MAX, 0)
#define VTK_CREATE(type, name)