diff --git a/xs/src/slic3r/GUI/3DScene.cpp b/xs/src/slic3r/GUI/3DScene.cpp index 6b6f44a8c4..f755fdb033 100644 --- a/xs/src/slic3r/GUI/3DScene.cpp +++ b/xs/src/slic3r/GUI/3DScene.cpp @@ -2168,6 +2168,11 @@ int _3DScene::get_first_volume_id(wxGLCanvas* canvas, int obj_idx) return s_canvas_mgr.get_first_volume_id(canvas, obj_idx); } +int _3DScene::get_in_object_volume_id(wxGLCanvas* canvas, int scene_vol_idx) +{ + return s_canvas_mgr.get_in_object_volume_id(canvas, scene_vol_idx); +} + void _3DScene::reload_scene(wxGLCanvas* canvas, bool force) { s_canvas_mgr.reload_scene(canvas, force); diff --git a/xs/src/slic3r/GUI/3DScene.hpp b/xs/src/slic3r/GUI/3DScene.hpp index 6db58aa160..470383cacc 100644 --- a/xs/src/slic3r/GUI/3DScene.hpp +++ b/xs/src/slic3r/GUI/3DScene.hpp @@ -577,6 +577,7 @@ public: static std::vector load_object(wxGLCanvas* canvas, const Model* model, int obj_idx); static int get_first_volume_id(wxGLCanvas* canvas, int obj_idx); + static int get_in_object_volume_id(wxGLCanvas* canvas, int scene_vol_idx); static void reload_scene(wxGLCanvas* canvas, bool force); diff --git a/xs/src/slic3r/GUI/GLCanvas3D.cpp b/xs/src/slic3r/GUI/GLCanvas3D.cpp index 1e81965a15..023ddcd563 100644 --- a/xs/src/slic3r/GUI/GLCanvas3D.cpp +++ b/xs/src/slic3r/GUI/GLCanvas3D.cpp @@ -2499,6 +2499,11 @@ int GLCanvas3D::get_first_volume_id(int obj_idx) const return -1; } +int GLCanvas3D::get_in_object_volume_id(int scene_vol_idx) const +{ + return ((0 <= scene_vol_idx) && (scene_vol_idx < (int)m_volumes.volumes.size())) ? m_volumes.volumes[scene_vol_idx]->volume_idx() : -1; +} + void GLCanvas3D::reload_scene(bool force) { if ((m_canvas == nullptr) || (m_config == nullptr) || (m_model == nullptr)) diff --git a/xs/src/slic3r/GUI/GLCanvas3D.hpp b/xs/src/slic3r/GUI/GLCanvas3D.hpp index c4b46c44db..528f73fc1e 100644 --- a/xs/src/slic3r/GUI/GLCanvas3D.hpp +++ b/xs/src/slic3r/GUI/GLCanvas3D.hpp @@ -603,6 +603,7 @@ public: std::vector load_object(const Model& model, int obj_idx); int get_first_volume_id(int obj_idx) const; + int get_in_object_volume_id(int scene_vol_idx) const; void reload_scene(bool force); diff --git a/xs/src/slic3r/GUI/GLCanvas3DManager.cpp b/xs/src/slic3r/GUI/GLCanvas3DManager.cpp index 3445d4b652..495f494250 100644 --- a/xs/src/slic3r/GUI/GLCanvas3DManager.cpp +++ b/xs/src/slic3r/GUI/GLCanvas3DManager.cpp @@ -548,6 +548,12 @@ int GLCanvas3DManager::get_first_volume_id(wxGLCanvas* canvas, int obj_idx) cons return (it != m_canvases.end()) ? it->second->get_first_volume_id(obj_idx) : -1; } +int GLCanvas3DManager::get_in_object_volume_id(wxGLCanvas* canvas, int scene_vol_idx) const +{ + CanvasesMap::const_iterator it = _get_canvas(canvas); + return (it != m_canvases.end()) ? it->second->get_in_object_volume_id(scene_vol_idx) : -1; +} + void GLCanvas3DManager::reload_scene(wxGLCanvas* canvas, bool force) { CanvasesMap::iterator it = _get_canvas(canvas); diff --git a/xs/src/slic3r/GUI/GLCanvas3DManager.hpp b/xs/src/slic3r/GUI/GLCanvas3DManager.hpp index b808c022e9..4922b61714 100644 --- a/xs/src/slic3r/GUI/GLCanvas3DManager.hpp +++ b/xs/src/slic3r/GUI/GLCanvas3DManager.hpp @@ -138,6 +138,7 @@ public: std::vector load_object(wxGLCanvas* canvas, const Model* model, int obj_idx); int get_first_volume_id(wxGLCanvas* canvas, int obj_idx) const; + int get_in_object_volume_id(wxGLCanvas* canvas, int scene_vol_idx) const; void reload_scene(wxGLCanvas* canvas, bool force); diff --git a/xs/xsp/GUI_3DScene.xsp b/xs/xsp/GUI_3DScene.xsp index 4c3c5501e1..c3e4ba3b7c 100644 --- a/xs/xsp/GUI_3DScene.xsp +++ b/xs/xsp/GUI_3DScene.xsp @@ -767,6 +767,15 @@ get_first_volume_id(canvas, obj_idx) OUTPUT: RETVAL +int +get_in_object_volume_id(canvas, scene_vol_idx) + SV *canvas; + int scene_vol_idx; + CODE: + RETVAL = _3DScene::get_in_object_volume_id((wxGLCanvas*)wxPli_sv_2_object(aTHX_ canvas, "Wx::GLCanvas"), scene_vol_idx); + OUTPUT: + RETVAL + std::vector load_model(canvas, model, obj_idx) SV *canvas;