Open3D (C++ API)  0.11.0
SceneWidget.h
Go to the documentation of this file.
1 // ----------------------------------------------------------------------------
2 // - Open3D: www.open3d.org -
3 // ----------------------------------------------------------------------------
4 // The MIT License (MIT)
5 //
6 // Copyright (c) 2018 www.open3d.org
7 //
8 // Permission is hereby granted, free of charge, to any person obtaining a copy
9 // of this software and associated documentation files (the "Software"), to deal
10 // in the Software without restriction, including without limitation the rights
11 // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
12 // copies of the Software, and to permit persons to whom the Software is
13 // furnished to do so, subject to the following conditions:
14 //
15 // The above copyright notice and this permission notice shall be included in
16 // all copies or substantial portions of the Software.
17 //
18 // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
19 // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
20 // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
21 // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
22 // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
23 // FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
24 // IN THE SOFTWARE.
25 // ----------------------------------------------------------------------------
26 
27 #pragma once
28 
32 
33 namespace open3d {
34 
35 namespace geometry {
36 class AxisAlignedBoundingBox;
37 } // namespace geometry
38 
39 namespace visualization {
40 namespace rendering {
41 class Camera;
42 class CameraManipulator;
43 class Open3DScene;
44 class View;
45 } // namespace rendering
46 } // namespace visualization
47 
48 namespace visualization {
49 namespace gui {
50 
51 class Color;
52 
53 class SceneWidget : public Widget {
54  using Super = Widget;
55 
56 public:
57  explicit SceneWidget();
58  ~SceneWidget() override;
59 
60  void SetFrame(const Rect& f) override;
61 
62  enum Controls { ROTATE_CAMERA, FLY, ROTATE_SUN, ROTATE_IBL, ROTATE_MODEL };
63  void SetViewControls(Controls mode);
64 
65  void SetupCamera(float verticalFoV,
66  const geometry::AxisAlignedBoundingBox& geometry_bounds,
67  const Eigen::Vector3f& center_of_rotation);
68  void SetOnCameraChanged(
69  std::function<void(visualization::rendering::Camera*)>
70  on_cam_changed);
71 
75  void SetOnSunDirectionChanged(
76  std::function<void(const Eigen::Vector3f&)> on_dir_changed);
78  void ShowSkybox(bool is_on);
79 
80  void SetScene(std::shared_ptr<rendering::Open3DScene> scene);
81  std::shared_ptr<rendering::Open3DScene> GetScene() const;
82 
83  rendering::View* GetRenderView() const; // is nullptr if no scene
84 
87  void EnableSceneCaching(bool enable);
88 
91  void ForceRedraw();
92  enum class Quality { FAST, BEST };
93  void SetRenderQuality(Quality level);
94  Quality GetRenderQuality() const;
95 
96  enum class CameraPreset {
97  PLUS_X, // at (X, 0, 0), looking (-1, 0, 0)
98  PLUS_Y, // at (0, Y, 0), looking (0, -1, 0)
99  PLUS_Z // at (0, 0, Z), looking (0, 0, 1) [default OpenGL camera]
100  };
101  void GoToCameraPreset(CameraPreset preset);
102 
103  void Layout(const Theme& theme) override;
104  Widget::DrawResult Draw(const DrawContext& context) override;
105 
106  Widget::EventResult Mouse(const MouseEvent& e) override;
107  Widget::EventResult Key(const KeyEvent& e) override;
108  Widget::DrawResult Tick(const TickEvent& e) override;
109 
110 private:
111  visualization::rendering::Camera* GetCamera() const;
112 
113 private:
114  struct Impl;
115  std::unique_ptr<Impl> impl_;
116 };
117 
118 } // namespace gui
119 } // namespace visualization
120 } // namespace open3d
const char const char value recording_handle imu_sample recording_handle uint8_t size_t data_size k4a_record_configuration_t config target_format k4a_capture_t capture_handle k4a_imu_sample_t imu_sample playback_handle k4a_logging_message_cb_t void min_level device_handle k4a_imu_sample_t timeout_in_ms capture_handle capture_handle capture_handle image_handle temperature_c k4a_image_t image_handle uint8_t image_handle image_handle image_handle image_handle image_handle timestamp_usec white_balance image_handle k4a_device_configuration_t config device_handle char size_t serial_number_size bool int32_t int32_t int32_t int32_t k4a_color_control_mode_t default_mode mode
Definition: K4aPlugin.cpp:677
Definition: Theme.h:39
Controls
Definition: SceneWidget.h:62
A bounding box that is aligned along the coordinate axes.
Definition: BoundingVolume.h:149
CameraPreset
Definition: SceneWidget.h:96
Definition: Widget.h:62
Definition: SceneWidget.cpp:577
EventResult
Definition: Widget.h:106
Definition: PinholeCameraIntrinsic.cpp:35
Definition: Events.h:172
DrawResult
Definition: Widget.h:98
Definition: SceneWidget.h:53
Quality
Definition: SceneWidget.h:92