Open3D (C++ API)
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 
29 #include "Open3D/GUI/Widget.h"
32 
33 namespace open3d {
34 
35 namespace geometry {
36 class AxisAlignedBoundingBox;
37 } // namespace geometry
38 
39 namespace visualization {
40 class Camera;
41 class CameraManipulator;
42 class Scene;
43 class View;
44 } // namespace visualization
45 
46 namespace gui {
47 
48 class Color;
49 
50 class SceneWidget : public Widget {
51  using Super = Widget;
52 
53 public:
54  explicit SceneWidget(visualization::Scene& scene);
55  ~SceneWidget() override;
56 
57  void SetFrame(const Rect& f) override;
58 
59  void SetBackgroundColor(const Color& color);
60  void SetDiscardBuffers(const visualization::View::TargetBuffers& buffers);
61 
62  enum Controls { ROTATE_OBJ, 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 SetCameraChangedCallback(
69  std::function<void(visualization::Camera*)> on_cam_changed);
70 
74  void SelectDirectionalLight(
76  std::function<void(const Eigen::Vector3f&)> on_dir_changed);
78  void SetSkyboxHandle(visualization::SkyboxHandle skybox, bool is_on);
79 
82  std::vector<visualization::GeometryHandle> point_clouds;
83  std::vector<visualization::GeometryHandle> meshes;
84  // Optional point clouds drawn instead of 'pointClouds' when rotating.
85  // These should have substantially fewer points than the originals
86  // so that rotations are faster.
87  std::vector<visualization::GeometryHandle> fast_point_clouds;
88  };
89  void SetModel(const ModelDescription& desc);
90 
91  enum class Quality { FAST, BEST };
92  void SetRenderQuality(Quality level);
93  Quality GetRenderQuality() const;
94 
95  enum class CameraPreset {
96  PLUS_X, // at (X, 0, 0), looking (-1, 0, 0)
97  PLUS_Y, // at (0, Y, 0), looking (0, -1, 0)
98  PLUS_Z // at (0, 0, Z), looking (0, 0, 1) [default OpenGL camera]
99  };
100  void GoToCameraPreset(CameraPreset preset);
101 
102  visualization::View* GetView() const;
103  visualization::Scene* GetScene() const;
104 
105  Widget::DrawResult Draw(const DrawContext& context) override;
106 
107  Widget::EventResult Mouse(const MouseEvent& e) override;
108  Widget::EventResult Key(const KeyEvent& e) override;
109  Widget::DrawResult Tick(const TickEvent& e) override;
110 
111 private:
112  visualization::Camera* GetCamera() const;
113 
114 private:
115  struct Impl;
116  std::unique_ptr<Impl> impl_;
117 };
118 
119 } // namespace gui
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:676
CameraPreset
Definition: SceneWidget.h:95
Definition: Events.h:171
EventResult
Definition: Widget.h:97
A bounding box that is aligned along the coordinate axes.
Definition: BoundingVolume.h:164
Definition: SceneWidget.h:50
visualization::GeometryHandle axes
Definition: SceneWidget.h:81
TargetBuffers
Definition: View.h:39
Definition: SceneWidget.h:80
std::vector< visualization::GeometryHandle > point_clouds
Definition: SceneWidget.h:82
std::vector< visualization::GeometryHandle > meshes
Definition: SceneWidget.h:83
math::float4 color
Definition: LineSetBuffers.cpp:46
Definition: Color.h:32
Definition: SceneWidget.cpp:594
Definition: Widget.h:43
Definition: Events.h:74
Definition: View.h:37
Definition: SceneWidget.h:62
Quality
Definition: SceneWidget.h:91
Definition: Widget.h:53
Definition: Camera.h:34
Definition: Events.h:53
Definition: Open3DViewer.h:29
Definition: Gui.h:48
std::vector< visualization::GeometryHandle > fast_point_clouds
Definition: SceneWidget.h:87
Controls
Definition: SceneWidget.h:62
DrawResult
Definition: Widget.h:89
Definition: Scene.h:47