From 5a1f6e48ce3b08dc855f793708ef3a966d4f02c1 Mon Sep 17 00:00:00 2001 From: omigamedev Date: Wed, 24 Apr 2019 09:57:27 +0200 Subject: [PATCH] add export depth menu --- data/layout.xml | 3 +++ src/app.h | 1 + src/app_dialogs.cpp | 23 +++++++++++++++++++++++ src/app_layout.cpp | 9 ++++++++- src/canvas.cpp | 24 ++++++++++++++++++++++++ src/canvas.h | 4 +++- 6 files changed, 62 insertions(+), 2 deletions(-) diff --git a/data/layout.xml b/data/layout.xml index 11b34d2..7db434d 100644 --- a/data/layout.xml +++ b/data/layout.xml @@ -1420,6 +1420,9 @@ Here's a list of what's available in this release. + + + diff --git a/src/app.h b/src/app.h index c064695..f10fea5 100644 --- a/src/app.h +++ b/src/app.h @@ -184,6 +184,7 @@ public: void dialog_browse(); void dialog_export(std::string ext); void dialog_export_layers(); + void dialog_export_depth(); void dialog_export_cubes(); void dialog_layer_rename(); void dialog_resize(); diff --git a/src/app_dialogs.cpp b/src/app_dialogs.cpp index 81bfc48..15e6173 100644 --- a/src/app_dialogs.cpp +++ b/src/app_dialogs.cpp @@ -460,6 +460,29 @@ void App::dialog_export_layers() } } +void App::dialog_export_depth() +{ + if (!check_license()) + { + message_box("License", "This function is disabled in demo mode."); + return; + } + + if (canvas) + { + // TODO: use picker + canvas->m_canvas->export_layers(doc_name, [this] { +#if defined(__IOS__) + message_box("Export 3D View + Depth", "Image and depth exported to Files/PanoPainter"); +#elif defined(__OSX__) + message_box("Export 3D View + Depth", "Image and depth exported to Pictures/PanoPainter folder"); +#elif defined(_WIN32) + message_box("Export 3D View + Depth", "Image and depth exported to " + work_path); +#endif + }); + } +} + void App::dialog_resize() { auto dialog = std::make_shared(); diff --git a/src/app_layout.cpp b/src/app_layout.cpp index 15bbb8f..b5d25af 100644 --- a/src/app_layout.cpp +++ b/src/app_layout.cpp @@ -625,7 +625,14 @@ void App::init_menu_file() popup->mouse_release(); popup->destroy(); }; - }; + subpopup->find("file-submenu-export-depth")->on_click = [this, subpopup, popup](Node*) { + dialog_export_depth(); + subpopup->mouse_release(); + subpopup->destroy(); + popup->mouse_release(); + popup->destroy(); + }; + }; if (auto b = popup->find("file-share")) b->on_click = [this, popup](Node*) { share_file(doc_path); diff --git a/src/canvas.cpp b/src/canvas.cpp index fed5a33..466cea0 100644 --- a/src/canvas.cpp +++ b/src/canvas.cpp @@ -1544,6 +1544,30 @@ void Canvas::inject_xmp(std::string jpg_path) } +void Canvas::export_depth(std::string file_name, std::function on_complete) +{ + if (App::I.check_license()) + { + std::thread t([=] { + BT_SetTerminate(); + export_depth_thread(file_name); + if (on_complete) + on_complete(); + }); + t.detach(); + } +} + +void Canvas::export_depth_thread(std::string file_name) +{ + App::I.async_start(); + gl_state gl; + gl.save(); + + gl.restore(); + App::I.async_end(); +} + void Canvas::export_layers(std::string file_name, std::function on_complete) { if (App::I.check_license()) diff --git a/src/canvas.h b/src/canvas.h index 0ab6057..f117c22 100644 --- a/src/canvas.h +++ b/src/canvas.h @@ -263,7 +263,9 @@ public: void export_equirectangular_thread(std::string file_path); void export_layers(std::string file_name, std::function on_complete = nullptr); void export_layers_thread(std::string file_name); - void export_cubes(); + void export_depth(std::string file_name, std::function on_complete = nullptr); + void export_depth_thread(std::string file_name); + void export_cubes(); void project_save(std::function on_complete = nullptr); void project_save(std::string file_path, std::function on_complete = nullptr); bool project_save_thread(std::string file_path);