Open3D (C++ API)  0.18.0+601516a
Application.h
Go to the documentation of this file.
1 // ----------------------------------------------------------------------------
2 // - Open3D: www.open3d.org -
3 // ----------------------------------------------------------------------------
4 // Copyright (c) 2018-2024 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:317
FontId AddFont(const FontDescription &fd)
Definition: Application.cpp:352
std::shared_ptr< Menu > GetMenubar() const
Definition: Application.cpp:429
bool UsingNativeWindows() const
Definition: Application.cpp:334
double Now() const
Definition: Application.cpp:422
void SetWindowSystem(std::shared_ptr< WindowSystem > ws)
Definition: Application.cpp:344
void PostToMainThread(Window *window, std::function< void()> f)
Definition: Application.cpp:666
const Theme & GetTheme() const
Definition: Application.cpp:675
void OnTerminate()
Definition: Application.cpp:482
WindowSystem & GetWindowSystem() const
Definition: Application.cpp:340
virtual ~Application()
Definition: Application.cpp:260
void ShowMessageBox(const char *title, const char *message)
Definition: Application.cpp:179
void RunInThread(std::function< void()> f)
Definition: Application.cpp:660
void Run()
Does not return until the UI is completely finished.
Definition: Application.cpp:525
void SetMenubar(std::shared_ptr< Menu > menubar)
Definition: Application.cpp:433
bool RunOneTick(EnvUnlocker &unlocker, bool cleanup_if_no_windows=true)
Definition: Application.cpp:531
void AddWindow(std::shared_ptr< Window > window)
Must be called on the same thread that calls Run()
Definition: Application.cpp:452
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:701
std::shared_ptr< geometry::Image > RenderToImage(rendering::Renderer &renderer, rendering::View *view, rendering::Scene *scene, int width, int height)
Definition: Application.cpp:677
void SetFont(FontId id, const FontDescription &fd)
Definition: Application.cpp:359
void RemoveWindow(Window *window)
Definition: Application.cpp:458
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:508
const char * GetResourcePath() const
Definition: Application.cpp:671
void Initialize()
Definition: Application.cpp:262
static Application & GetInstance()
Definition: Application.cpp:174
const std::vector< FontDescription > & GetFontDescriptions() const
Definition: Application.cpp:418
void Quit()
Closes all the windows, which exits as a result.
Definition: Application.cpp:476
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