ACloudViewer  3.9.4
A Modern Library for 3D Data Processing
QVTKWidgetCustom.h
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 
8 #pragma once
9 
10 #include <QTimer>
11 
12 #ifdef _MSC_VER
13 /* The below is MANDATORY for Windows builds or you will take an exception in
14  * vtkRenderer::SetRenderWindow(vtkRenderWindow *renwin) */
15 #include <vtkAutoInit.h>
16 /* VTK was built with vtkRenderingOpenGL2 */
17 VTK_MODULE_INIT(vtkRenderingOpenGL2);
18 VTK_MODULE_INIT(vtkInteractionStyle);
19 
20 #endif
21 
22 #include "qPCL.h"
23 
24 // CV_CORE_LIB
25 #include <CVGeom.h>
26 
27 // CV_DB_LIB
28 #include <ecvColorTypes.h>
29 
30 // VTK
31 // #include <QVTKWidget.h>
32 #include <QVTKOpenGLNativeWidget.h>
33 #include <vtkDataSet.h>
34 #include <vtkLODActor.h>
35 #include <vtkPlanes.h>
36 #include <vtkPolyData.h>
37 #include <vtkRenderWindow.h>
38 #include <vtkSmartPointer.h>
39 
40 // QPCL_ENGINE_LIB
41 #include <Utils/PCLCloud.h>
42 
43 #include "ScaleBarWidget.h"
44 
45 // SYSTEM
46 #include <assert.h>
47 
48 class QMainWindow;
49 class ecvDisplayTools;
50 
51 class vtkCamera;
52 class vtkRenderer;
53 class vtkRenderWindowInteractor;
54 class vtkLogoWidget;
55 class vtkLookupTable;
56 class vtkScalarBarWidget;
57 class vtkRenderWindowInteractor;
58 class vtkOrientationMarkerWidget;
59 class VtkWidgetPrivate;
60 
62 class QPCL_ENGINE_LIB_API QVTKWidgetCustom : public QVTKOpenGLNativeWidget {
63  Q_OBJECT
64 
65 public:
66  explicit QVTKWidgetCustom(QMainWindow* parentWindow,
67  ecvDisplayTools* tools,
68  bool stereoMode = false);
69  virtual ~QVTKWidgetCustom();
70 
71  inline vtkRenderer* getVtkRender() { return this->m_render; }
72  inline vtkRenderWindowInteractor* getVtkInteractor() {
73  return this->m_interactor;
74  }
75  void initVtk(vtkSmartPointer<vtkRenderWindowInteractor> interactor,
76  bool useVBO = false);
77 
78  void setMultiViewports(bool multi = true);
79  bool multiViewports() const;
80 
81  void addActor(vtkProp* actor, const QColor& clr = Qt::black);
82  void addViewProp(vtkProp* prop);
83  QList<vtkProp*> actors() const;
84 
85  void setActorsVisible(bool visible);
86  void setActorVisible(vtkProp* actor, bool visible);
87  bool actorVisible(vtkProp* actor);
88 
89  void setBackgroundColor(const QColor& clr);
90  QColor backgroundColor() const;
91 
92  vtkRenderer* defaultRenderer();
93  bool defaultRendererTaken() const;
94 
95  void transformCameraView(const double* viewMat);
96  void transformCameraProjection(const double* projMat);
97 
98  void updateScene();
99  vtkRenderWindow* GetRenderWindow() { return this->renderWindow(); }
100  void SetRenderWindow(vtkRenderWindow* win) {
101  return this->setRenderWindow(win);
102  }
103  QVTKInteractor* GetInteractor() { return this->interactor(); }
104 
105 protected:
106  void setBounds(double* bounds);
107 
108  double xMin() const;
109  double xMax() const;
110  double yMin() const;
111  double yMax() const;
112  double zMin() const;
113  double zMax() const;
114 
115 public:
116  void toWorldPoint(const CCVector3d& input2D, CCVector3d& output3D);
117  void toWorldPoint(const CCVector3& input2D, CCVector3d& output3D);
118  void toDisplayPoint(const CCVector3d& worldPos, CCVector3d& displayPos);
119  void toDisplayPoint(const CCVector3& worldPos, CCVector3d& displayPos);
120  void setCameraPosition(const CCVector3d& pos);
121  void setCameraFocalPoint(const CCVector3d& pos);
122  void setCameraViewUp(const CCVector3d& pos);
123 
124  void setBackgroundColor(const ecvColor::Rgbf& bkg1,
125  const ecvColor::Rgbf& bkg2,
126  bool gradient);
127 
128  vtkSmartPointer<vtkLookupTable> createLookupTable(double min, double max);
129 
130  QMainWindow* getWin() { return m_win; }
131 
132  void setScaleBarVisible(bool visible) {
133  if (m_scaleBar) m_scaleBar->setVisible(visible);
134  }
135 
136 protected:
137  // events handling
138  virtual bool event(QEvent* evt) override;
139  virtual void wheelEvent(QWheelEvent* event) override;
140  virtual void keyPressEvent(QKeyEvent* event) override;
141  virtual void mouseMoveEvent(QMouseEvent* event) override;
142  virtual void mousePressEvent(QMouseEvent* event) override;
143  virtual void mouseReleaseEvent(QMouseEvent* event) override;
144  virtual void mouseDoubleClickEvent(QMouseEvent* event) override;
145  virtual void dragEnterEvent(QDragEnterEvent* event) override;
146  virtual void dropEvent(QDropEvent* event) override;
147 
148  virtual void updateActivateditems(
149  int x, int y, int dx, int dy, bool updatePosition = false);
150 
151 protected:
152  bool m_unclosable = true;
153  bool m_useVBO = false;
154  vtkRenderer* m_render;
155  QMainWindow* m_win;
157 
158  vtkDataObject* m_dataObject;
159  vtkActor* m_modelActor = nullptr;
160  vtkLODActor* m_filterActor = nullptr;
161 
162  QColor m_color1 = Qt::blue;
163  QColor m_color2 = Qt::red;
164 
166 
168 
170 
172 
175 
178 
181 
182  ScaleBarWidget* m_scaleBar = nullptr;
183 
184  VtkWidgetPrivate* d_ptr;
185 
186  // Timer for delayed 2D label update after wheel zoom
187  QTimer* m_wheelZoomUpdateTimer = nullptr;
188 };
MouseEvent event
Container widget for vtk.
VtkWidgetPrivate * d_ptr
vtkRenderer * m_render
vtkSmartPointer< vtkScalarBarWidget > m_scalarbarWidget
Internal pointer to widget which contains a scalarbar_Widget_.
QVTKInteractor * GetInteractor()
vtkRenderWindow * GetRenderWindow()
QMainWindow * m_win
ecvDisplayTools * m_tools
void setScaleBarVisible(bool visible)
vtkSmartPointer< vtkPlanes > m_planes
vtkSmartPointer< vtkCamera > m_camera
vtkSmartPointer< vtkOrientationMarkerWidget > m_axesWidget
Internal pointer to widget which contains a set of axes.
vtkSmartPointer< vtkRenderWindowInteractor > m_interactor
vtkRenderer * getVtkRender()
vtkRenderWindowInteractor * getVtkInteractor()
void SetRenderWindow(vtkRenderWindow *win)
vtkDataObject * m_dataObject
vtkSmartPointer< vtkLogoWidget > m_logoWidget
Internal pointer to widget which contains a logo_Widget_.
QMainWindow * getWin()
vtkSmartPointer< vtkRendererCollection > m_renders
RGB color structure.
Definition: ecvColorTypes.h:49
normal_z y
normal_z x
constexpr Rgb black(0, 0, 0)
constexpr Rgb red(MAX, 0, 0)
constexpr Rgb blue(0, 0, MAX)
#define QPCL_ENGINE_LIB_API
Definition: qPCL.h:15