ACloudViewer  3.9.4
A Modern Library for 3D Data Processing
ecvGenericCameraTool.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 <CVGeom.h>
11 
12 #include "CV_db.h"
13 
14 // QT
15 #include <QFile>
16 #include <QObject>
17 
19 class CV_DB_LIB_API ecvGenericCameraTool : public QObject {
20  Q_OBJECT
21 public:
24 
32  double viewAngle;
33  double eyeAngle;
34 
36  : clippRange(CCVector2d(0.0, 0.0)),
37  position(CCVector3d(0.0, 0.0, 0.0)),
38  focal(CCVector3d(0.0, 0.0, 0.0)),
39  viewUp(CCVector3d(0.0, 0.0, 0.0)),
40  pivot(CCVector3d(0.0, 0.0, 0.0)),
41  rotationFactor(1.0),
42  viewAngle(1.0),
43  eyeAngle(1.0) {}
44 
45  std::string toString() {
46  QStringList cameraInfo;
47  const int precision = 4;
48  cameraInfo << QString::number(position.x, 'f', precision)
49  << QString::number(position.y, 'f', precision)
50  << QString::number(position.z, 'f', precision)
51  << QString::number(focal.x, 'f', precision)
52  << QString::number(focal.y, 'f', precision)
53  << QString::number(focal.z, 'f', precision)
54  << QString::number(viewUp.x, 'f', precision)
55  << QString::number(viewUp.y, 'f', precision)
56  << QString::number(viewUp.z, 'f', precision)
57  << QString::number(pivot.x, 'f', precision)
58  << QString::number(pivot.y, 'f', precision)
59  << QString::number(pivot.z, 'f', precision)
60  << QString::number(rotationFactor, 'f', precision)
61  << QString::number(viewAngle, 'f', precision)
62  << QString::number(eyeAngle, 'f', precision)
63  << QString::number(clippRange.x, 'f', precision)
64  << QString::number(clippRange.y, 'f', precision);
65 
66  return cameraInfo.join(",").toStdString();
67  }
68 
69  QStringList parseConfig(const QString& info) {
70  if (info.isEmpty()) {
71  return QStringList();
72  }
73 
74  return info.split(",");
75  }
76 
77  void loadConfig(QString& info) {
78  QStringList cameraInfo = parseConfig(info);
79 
80  assert(cameraInfo.size() == 17);
81  position.x = cameraInfo[0].toDouble();
82  position.y = cameraInfo[1].toDouble();
83  position.z = cameraInfo[2].toDouble();
84  focal.x = cameraInfo[3].toDouble();
85  focal.y = cameraInfo[4].toDouble();
86  focal.z = cameraInfo[5].toDouble();
87  viewUp.x = cameraInfo[6].toDouble();
88  viewUp.y = cameraInfo[7].toDouble();
89  viewUp.z = cameraInfo[8].toDouble();
90  pivot.x = cameraInfo[9].toDouble();
91  pivot.y = cameraInfo[10].toDouble();
92  pivot.z = cameraInfo[11].toDouble();
93  rotationFactor = cameraInfo[12].toDouble();
94  viewAngle = cameraInfo[13].toDouble();
95  eyeAngle = cameraInfo[14].toDouble();
96  clippRange.x = cameraInfo[15].toDouble();
97  clippRange.y = cameraInfo[16].toDouble();
98  }
99  };
100 
103  static void SaveBuffer() { OldCameraParam = CurrentCameraParam; }
104 
105  virtual void saveCameraConfiguration(const std::string& file);
106  virtual void loadCameraConfiguration(const std::string& file);
107 
108  virtual void resetViewDirection(double look_x,
109  double look_y,
110  double look_z,
111  double up_x,
112  double up_y,
113  double up_z) {}
114 
115  virtual void setAutoPickPivotAtCenter(bool state);
116 
117  enum CameraAdjustmentType { Roll = 0, Elevation, Azimuth, Zoom };
118 
119  virtual void adjustCamera(CameraAdjustmentType enType, double value) = 0;
120  virtual void updateCamera() = 0;
121  virtual void updateCameraParameters() = 0;
122 
123 public slots:
124  void UpdateCamera() { updateCamera(); }
125 };
#define CV_DB_LIB_API
Definition: CV_db.h:15
math::float3 position
#define slots
Type y
Definition: CVGeom.h:137
Type x
Definition: CVGeom.h:137
Type z
Definition: CVGeom.h:137
Type x
Definition: CVGeom.h:36
Type y
Definition: CVGeom.h:36
virtual void saveCameraConfiguration(const std::string &file)
virtual void updateCamera()=0
static CameraInfo CurrentCameraParam
virtual void setAutoPickPivotAtCenter(bool state)
virtual void resetViewDirection(double look_x, double look_y, double look_z, double up_x, double up_y, double up_z)
virtual void updateCameraParameters()=0
virtual void loadCameraConfiguration(const std::string &file)
static CameraInfo OldCameraParam
virtual void adjustCamera(CameraAdjustmentType enType, double value)=0
~ecvGenericCameraTool() override
Generic visualizer 3D interface.
QStringList parseConfig(const QString &info)