Open3D (C++ API)  0.18.0
Application.h
Go to the documentation of this file.
1 // ----------------------------------------------------------------------------
2 // - Open3D: www.open3d.org -
3 // ----------------------------------------------------------------------------
4 // Copyright (c) 2018-2023 www.open3d.org
5 // SPDX-License-Identifier: MIT
6 // ----------------------------------------------------------------------------
7 
8 #pragma once
9 
10 #include <cstdint>
11 #include <functional>
12 #include <memory>
13 #include <string>
14 #include <vector>
15 
18 
19 namespace open3d {
20 
21 namespace geometry {
22 class Image;
23 }
24 
25 namespace visualization {
26 
27 namespace rendering {
28 class Renderer;
29 class View;
30 class Scene;
31 } // namespace rendering
32 
33 namespace gui {
34 
35 struct Theme;
36 class Window;
37 class WindowSystem;
38 
39 class Application {
40 public:
41  static Application &GetInstance();
42 
43  virtual ~Application();
44 
48  void Initialize();
52  void Initialize(int argc, const char *argv[]);
54  void Initialize(const char *resource_path);
55 
57  static constexpr FontId DEFAULT_FONT_ID = 0;
60  FontId AddFont(const FontDescription &fd);
63  void SetFont(FontId id, const FontDescription &fd);
64 
66  void Run();
68  void Quit();
69 
77  void RunInThread(std::function<void()> f);
83  void PostToMainThread(Window *window, std::function<void()> f);
84 
85  std::shared_ptr<Menu> GetMenubar() const;
86  void SetMenubar(std::shared_ptr<Menu> menubar);
87 
89  void AddWindow(std::shared_ptr<Window> window);
93  void RemoveWindow(Window *window);
94 
103  void ShowMessageBox(const char *title, const char *message);
104 
105  WindowSystem &GetWindowSystem() const;
106 
107  // (std::string not good in interfaces for ABI reasons)
108  const char *GetResourcePath() const;
109 
114  const Theme &GetTheme() const;
115 
118  double Now() const;
119 
121  void OnMenuItemSelected(Menu::ItemId itemId);
122 
127  void OnTerminate();
128 
129  class EnvUnlocker {
130  public:
132  virtual ~EnvUnlocker() {}
133  virtual void unlock() {}
134  virtual void relock() {}
135  };
146  bool RunOneTick(EnvUnlocker &unlocker, bool cleanup_if_no_windows = true);
147 
151  void SetWindowSystem(std::shared_ptr<WindowSystem> ws);
152 
157  bool UsingNativeWindows() const;
158 
161  void VerifyIsInitialized();
162 
163  const std::vector<FontDescription> &GetFontDescriptions() const;
164 
168  std::shared_ptr<geometry::Image> RenderToImage(
169  rendering::Renderer &renderer,
170  rendering::View *view,
171  rendering::Scene *scene,
172  int width,
173  int height);
174 
175  // Same as RenderToImage(), but returns the depth values in a float image.
176  std::shared_ptr<geometry::Image> RenderToDepthImage(
177  rendering::Renderer &renderer,
178  rendering::View *view,
179  rendering::Scene *scene,
180  int width,
181  int height,
182  bool z_in_view_space = false);
183 
184 private:
185  Application();
186 
187  enum class RunStatus { CONTINUE, DONE };
188  RunStatus ProcessQueuedEvents(EnvUnlocker &unlocker);
189 
190 private:
191  struct Impl;
192  std::unique_ptr<Impl> impl_;
193 };
194 
195 } // namespace gui
196 } // namespace visualization
197 } // namespace open3d
virtual void unlock()
Definition: Application.h:133
virtual ~EnvUnlocker()
Definition: Application.h:132
virtual void relock()
Definition: Application.h:134
Definition: Application.h:39
void VerifyIsInitialized()
Definition: Application.cpp:315
FontId AddFont(const FontDescription &fd)
Definition: Application.cpp:350
std::shared_ptr< Menu > GetMenubar() const
Definition: Application.cpp:427
bool UsingNativeWindows() const
Definition: Application.cpp:332
double Now() const
Definition: Application.cpp:420
void SetWindowSystem(std::shared_ptr< WindowSystem > ws)
Definition: Application.cpp:342
void PostToMainThread(Window *window, std::function< void()> f)
Definition: Application.cpp:664
const Theme & GetTheme() const
Definition: Application.cpp:673
void OnTerminate()
Definition: Application.cpp:480
WindowSystem & GetWindowSystem() const
Definition: Application.cpp:338
virtual ~Application()
Definition: Application.cpp:258
void ShowMessageBox(const char *title, const char *message)
Definition: Application.cpp:177
void RunInThread(std::function< void()> f)
Definition: Application.cpp:658
void Run()
Does not return until the UI is completely finished.
Definition: Application.cpp:523
void SetMenubar(std::shared_ptr< Menu > menubar)
Definition: Application.cpp:431
bool RunOneTick(EnvUnlocker &unlocker, bool cleanup_if_no_windows=true)
Definition: Application.cpp:529
void AddWindow(std::shared_ptr< Window > window)
Must be called on the same thread that calls Run()
Definition: Application.cpp:450
std::shared_ptr< geometry::Image > RenderToDepthImage(rendering::Renderer &renderer, rendering::View *view, rendering::Scene *scene, int width, int height, bool z_in_view_space=false)
Definition: Application.cpp:699
std::shared_ptr< geometry::Image > RenderToImage(rendering::Renderer &renderer, rendering::View *view, rendering::Scene *scene, int width, int height)
Definition: Application.cpp:675
void SetFont(FontId id, const FontDescription &fd)
Definition: Application.cpp:357
void RemoveWindow(Window *window)
Definition: Application.cpp:456
static constexpr FontId DEFAULT_FONT_ID
Identifier for font used by default for all UI elements.
Definition: Application.h:57
void OnMenuItemSelected(Menu::ItemId itemId)
Delivers the itemId to the active window. Used internally.
Definition: Application.cpp:506
const char * GetResourcePath() const
Definition: Application.cpp:669
void Initialize()
Definition: Application.cpp:260
static Application & GetInstance()
Definition: Application.cpp:172
const std::vector< FontDescription > & GetFontDescriptions() const
Definition: Application.cpp:416
void Quit()
Closes all the windows, which exits as a result.
Definition: Application.cpp:474
int ItemId
Definition: MenuBase.h:28
Definition: Window.h:30
Definition: WindowSystem.h:27
int width
Definition: FilePCD.cpp:52
int height
Definition: FilePCD.cpp:53
unsigned int FontId
Definition: Gui.h:68
Definition: PinholeCameraIntrinsic.cpp:16
Definition: Theme.h:20