From b12e4689e8030bf89e0759e69ce8257649316157 Mon Sep 17 00:00:00 2001 From: bubnikv Date: Wed, 21 Jun 2017 14:10:22 +0200 Subject: [PATCH] Fix of changing the order of volumes of a multi-volume part: The 3D preview scene was not updated properly. --- lib/Slic3r/GUI/Plater/ObjectPartsPanel.pm | 2 ++ xs/xsp/GUI_3DScene.xsp | 18 ++++++++++++++++++ 2 files changed, 20 insertions(+) diff --git a/lib/Slic3r/GUI/Plater/ObjectPartsPanel.pm b/lib/Slic3r/GUI/Plater/ObjectPartsPanel.pm index 42836fb3c..a3aaae400 100644 --- a/lib/Slic3r/GUI/Plater/ObjectPartsPanel.pm +++ b/lib/Slic3r/GUI/Plater/ObjectPartsPanel.pm @@ -421,6 +421,7 @@ sub on_btn_move_up { if ($itemData && $itemData->{type} eq 'volume') { my $volume_id = $itemData->{volume_id}; if ($self->{model_object}->move_volume_up($volume_id)) { + $self->{canvas}->volumes->move_volume_up($volume_id); $self->{parts_changed} = 1; $self->reload_tree($volume_id - 1); } @@ -433,6 +434,7 @@ sub on_btn_move_down { if ($itemData && $itemData->{type} eq 'volume') { my $volume_id = $itemData->{volume_id}; if ($self->{model_object}->move_volume_down($volume_id)) { + $self->{canvas}->volumes->move_volume_down($volume_id); $self->{parts_changed} = 1; $self->reload_tree($volume_id + 1); } diff --git a/xs/xsp/GUI_3DScene.xsp b/xs/xsp/GUI_3DScene.xsp index 29fa30115..2a963b16a 100644 --- a/xs/xsp/GUI_3DScene.xsp +++ b/xs/xsp/GUI_3DScene.xsp @@ -90,6 +90,24 @@ void render_legacy() const; void finalize_geometry(bool use_VBOs); void release_geometry(); + + bool move_volume_up(int idx) + %code%{ + if (idx > 0 && idx < int(THIS->volumes.size())) { + std::swap(THIS->volumes[idx-1], THIS->volumes[idx]); + RETVAL = true; + } else + RETVAL = false; + %}; + bool move_volume_down(int idx) + %code%{ + if (idx >= 0 && idx + 1 < int(THIS->volumes.size())) { + std::swap(THIS->volumes[idx+1], THIS->volumes[idx]); + RETVAL = true; + } else + RETVAL = false; + %}; + %{ SV*