Apollo  6.0
Open source self driving car software
scene_viewer.h
Go to the documentation of this file.
1 /******************************************************************************
2  * Copyright 2018 The Apollo Authors. All Rights Reserved.
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  * http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  *****************************************************************************/
16 
17 #pragma once
18 
19 #include <QtWidgets/QOpenGLWidget>
20 #include <map>
21 #include <memory>
22 #include <string>
23 
27 
28 class QTimer;
29 class SceneCameraDialog;
30 
31 class SceneViewer : public QOpenGLWidget, protected QOpenGLFunctions {
32  Q_OBJECT
33 
34  public:
35  enum CameraType {
38  };
39 
40  explicit SceneViewer(QWidget* parent = nullptr);
41  ~SceneViewer();
42 
43  bool is_init(void) const { return is_init_; }
44  bool IsFreeCamera(void) const { return current_cameraPtr_ == &free_camera_; }
45 
46  bool AddTempRenderableObj(const std::string& tmpObjGroupName,
47  RenderableObject* renderObj);
49  if (obj && obj->haveShaderProgram() && is_init_) {
50  permanent_renderable_obj_list_.append(obj);
51  return true;
52  } else {
53  return false;
54  }
55  }
56 
57  void setTempObjGroupEnabled(const std::string& tmpObjGroupName, bool b);
58 
59  const QVector3D& CameraPos(void) const {
60  return current_cameraPtr_->position();
61  }
62  const QVector3D& CamerAttitude(void) const {
63  return current_cameraPtr_->attitude();
64  }
65 
66  float sensitivity(void) const { return sensitivity_; }
67 
68  void AddNewShaderProg(
69  const std::string& shaderProgName,
70  const std::shared_ptr<QOpenGLShaderProgram>& newShaderProg);
71 
72  std::shared_ptr<QOpenGLShaderProgram> FindShaderProg(
73  const std::string& shaderProgName) {
74  if (managed_shader_prog_.find(shaderProgName) !=
75  managed_shader_prog_.end()) {
76  return managed_shader_prog_[shaderProgName];
77  } else {
78  return std::shared_ptr<QOpenGLShaderProgram>();
79  }
80  }
81 
82  signals: // NOLINT
83  void CameraPosChanged(const QVector3D& pos);
84  void CameraAttitudeChanged(const QVector3D& attitude);
85 
86  public slots: // NOLINT
87  void ChangeCameraType(int index);
88  // void ChangeCameraMode(int index);
89 
90  void ResetCameraPosAttitude(void);
91 
92  void UpdateCameraX(double x);
93  void UpdateCameraY(double Y);
94  void UpdateCameraZ(double Z);
95 
96  void UpdateCameraYaw(double yawInDegrees);
97  void UpdateCameraPitch(double pitchInDegrees);
98  void UpdateCameraRoll(double rollInDegrees);
99 
100  void set_sensitivity(float s) { sensitivity_ = s; }
101 
102  protected:
103  void initializeGL() override;
104  void resizeGL(int w, int h) override;
105  void paintGL() override;
106 
107  void enterEvent(QEvent* event) override;
108  void leaveEvent(QEvent* event) override;
109 
110  void mousePressEvent(QMouseEvent* mouseEvent) override;
111  void mouseMoveEvent(QMouseEvent* mouseEvent) override;
112  void mouseReleaseEvent(QMouseEvent* event) override;
113  void wheelEvent(QWheelEvent* event) override;
114 
115  private:
116  void UpdateCameraWorld(void);
117  void UpdateAllShaderProgMVP(const QMatrix4x4& mvp);
118 
119  bool is_init_;
120  bool right_key_is_moved_;
121 
122  float sensitivity_;
123  QTimer* refreshTimer_;
124 
125  QPoint left_key_last_pos_;
126  float right_key_last_y_;
127 
128  SceneCameraDialog* camera_dialog_;
129  AbstractCamera* current_cameraPtr_;
130 
131  FreeCamera free_camera_;
132  TargetCamera target_camera_;
133 
134  std::map<const std::string, std::shared_ptr<QOpenGLShaderProgram>>
135  managed_shader_prog_;
136 
137  struct TempRenderableObjGroup;
138 
139  std::map<const std::string, TempRenderableObjGroup*> tmp_renderable_obj_list_;
140  QList<RenderableObject*> permanent_renderable_obj_list_;
141 };
void CameraPosChanged(const QVector3D &pos)
CameraType
Definition: scene_viewer.h:35
Definition: scene_viewer.h:37
const QVector3D & CameraPos(void) const
Definition: scene_viewer.h:59
void UpdateCameraRoll(double rollInDegrees)
void mouseReleaseEvent(QMouseEvent *event) override
Definition: scene_viewer.h:31
bool IsFreeCamera(void) const
Definition: scene_viewer.h:44
void UpdateCameraPitch(double pitchInDegrees)
const QVector3D & position(void) const
Definition: abstract_camera.h:84
void wheelEvent(QWheelEvent *event) override
bool haveShaderProgram(void)
Definition: renderable_object.h:60
Definition: renderable_object.h:25
Definition: abstract_camera.h:21
SceneViewer(QWidget *parent=nullptr)
void UpdateCameraYaw(double yawInDegrees)
void UpdateCameraZ(double Z)
void UpdateCameraX(double x)
void resizeGL(int w, int h) override
float sensitivity(void) const
Definition: scene_viewer.h:66
bool is_init(void) const
Definition: scene_viewer.h:43
void paintGL() override
void set_sensitivity(float s)
Definition: scene_viewer.h:100
void mousePressEvent(QMouseEvent *mouseEvent) override
void setTempObjGroupEnabled(const std::string &tmpObjGroupName, bool b)
void mouseMoveEvent(QMouseEvent *mouseEvent) override
std::shared_ptr< QOpenGLShaderProgram > FindShaderProg(const std::string &shaderProgName)
Definition: scene_viewer.h:72
void leaveEvent(QEvent *event) override
Definition: scene_camera_dialog.h:27
void CameraAttitudeChanged(const QVector3D &attitude)
bool AddPermanentRenderObj(RenderableObject *obj)
Definition: scene_viewer.h:48
void ResetCameraPosAttitude(void)
const QVector3D & attitude(void) const
Definition: abstract_camera.h:101
const QVector3D & CamerAttitude(void) const
Definition: scene_viewer.h:62
Definition: scene_viewer.h:36
void UpdateCameraY(double Y)
void ChangeCameraType(int index)
void initializeGL() override
Definition: free_camera.h:21
Definition: target_camera.h:21
void enterEvent(QEvent *event) override
bool AddTempRenderableObj(const std::string &tmpObjGroupName, RenderableObject *renderObj)
void AddNewShaderProg(const std::string &shaderProgName, const std::shared_ptr< QOpenGLShaderProgram > &newShaderProg)