Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/prusa3d/PrusaSlicer.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorEnrico Turri <enricoturri@seznam.cz>2019-07-09 11:18:57 +0300
committerEnrico Turri <enricoturri@seznam.cz>2019-07-09 11:18:57 +0300
commitd4914441f3dc5038c1599fb92561502d260d05ab (patch)
treeb9f5a9181c2884f4e9d57d8094c37ee7e087d3c4 /src
parent7b6229289d144d1f24feb53cda31973a64e34ff8 (diff)
Modified logic to add snapshots to undo/redo stack using GLCanvas::do_xxxxxx() methods
Diffstat (limited to 'src')
-rw-r--r--src/slic3r/GUI/GLCanvas3D.cpp41
-rw-r--r--src/slic3r/GUI/GLCanvas3D.hpp11
-rw-r--r--src/slic3r/GUI/GUI_ObjectManipulation.cpp14
-rw-r--r--src/slic3r/GUI/Gizmos/GLGizmosManager.cpp12
-rw-r--r--src/slic3r/GUI/Selection.cpp6
5 files changed, 50 insertions, 34 deletions
diff --git a/src/slic3r/GUI/GLCanvas3D.cpp b/src/slic3r/GUI/GLCanvas3D.cpp
index 1d5cec04a..7a2e5345d 100644
--- a/src/slic3r/GUI/GLCanvas3D.cpp
+++ b/src/slic3r/GUI/GLCanvas3D.cpp
@@ -1799,7 +1799,7 @@ std::vector<int> GLCanvas3D::load_object(const Model& model, int obj_idx)
void GLCanvas3D::mirror_selection(Axis axis)
{
m_selection.mirror(axis);
- do_mirror();
+ do_mirror("Mirror Object");
wxGetApp().obj_manipul()->set_dirty();
}
@@ -2947,8 +2947,7 @@ void GLCanvas3D::on_mouse(wxMouseEvent& evt)
else if ((m_mouse.drag.move_volume_idx != -1) && m_mouse.dragging)
{
m_regenerate_volumes = false;
- wxGetApp().plater()->take_snapshot(_(L("Move Object")));
- do_move();
+ do_move("Move Object");
wxGetApp().obj_manipul()->set_dirty();
// Let the plater know that the dragging finished, so a delayed refresh
// of the scene with the background processing data should be performed.
@@ -3107,11 +3106,14 @@ void GLCanvas3D::set_tooltip(const std::string& tooltip) const
}
-void GLCanvas3D::do_move()
+void GLCanvas3D::do_move(const std::string& snapshot_type)
{
if (m_model == nullptr)
return;
+ if (!snapshot_type.empty())
+ wxGetApp().plater()->take_snapshot(_(L(snapshot_type)));
+
std::set<std::pair<int, int>> done; // keeps track of modified instances
bool object_moved = false;
Vec3d wipe_tower_origin = Vec3d::Zero();
@@ -3162,13 +3164,18 @@ void GLCanvas3D::do_move()
if (wipe_tower_origin != Vec3d::Zero())
post_event(Vec3dEvent(EVT_GLCANVAS_WIPETOWER_MOVED, std::move(wipe_tower_origin)));
+
+ m_dirty = true;
}
-void GLCanvas3D::do_rotate()
+void GLCanvas3D::do_rotate(const std::string& snapshot_type)
{
if (m_model == nullptr)
return;
+ if (!snapshot_type.empty())
+ wxGetApp().plater()->take_snapshot(_(L(snapshot_type)));
+
std::set<std::pair<int, int>> done; // keeps track of modified instances
Selection::EMode selection_mode = m_selection.get_mode();
@@ -3217,13 +3224,18 @@ void GLCanvas3D::do_rotate()
if (!done.empty())
post_event(SimpleEvent(EVT_GLCANVAS_INSTANCE_ROTATED));
+
+ m_dirty = true;
}
-void GLCanvas3D::do_scale()
+void GLCanvas3D::do_scale(const std::string& snapshot_type)
{
if (m_model == nullptr)
return;
+ if (!snapshot_type.empty())
+ wxGetApp().plater()->take_snapshot(_(L(snapshot_type)));
+
std::set<std::pair<int, int>> done; // keeps track of modified instances
Selection::EMode selection_mode = m_selection.get_mode();
@@ -3269,18 +3281,27 @@ void GLCanvas3D::do_scale()
if (!done.empty())
post_event(SimpleEvent(EVT_GLCANVAS_INSTANCE_ROTATED));
+
+ m_dirty = true;
}
-void GLCanvas3D::do_flatten()
+void GLCanvas3D::do_flatten(const Vec3d& normal, const std::string& snapshot_type)
{
- do_rotate();
+ if (!snapshot_type.empty())
+ wxGetApp().plater()->take_snapshot(_(L(snapshot_type)));
+
+ m_selection.flattening_rotate(normal);
+ do_rotate(""); // avoid taking another snapshot
}
-void GLCanvas3D::do_mirror()
+void GLCanvas3D::do_mirror(const std::string& snapshot_type)
{
if (m_model == nullptr)
return;
+ if (!snapshot_type.empty())
+ wxGetApp().plater()->take_snapshot(_(L(snapshot_type)));
+
std::set<std::pair<int, int>> done; // keeps track of modified instances
Selection::EMode selection_mode = m_selection.get_mode();
@@ -3319,6 +3340,8 @@ void GLCanvas3D::do_mirror()
}
post_event(SimpleEvent(EVT_GLCANVAS_SCHEDULE_BACKGROUND_PROCESS));
+
+ m_dirty = true;
}
void GLCanvas3D::set_camera_zoom(double zoom)
diff --git a/src/slic3r/GUI/GLCanvas3D.hpp b/src/slic3r/GUI/GLCanvas3D.hpp
index 47b1c5ec2..c1b6dce14 100644
--- a/src/slic3r/GUI/GLCanvas3D.hpp
+++ b/src/slic3r/GUI/GLCanvas3D.hpp
@@ -599,11 +599,12 @@ public:
void set_tooltip(const std::string& tooltip) const;
- void do_move();
- void do_rotate();
- void do_scale();
- void do_flatten();
- void do_mirror();
+ // the following methods add a snapshot to the undo/redo stack, unless the given string is empty
+ void do_move(const std::string& snapshot_type);
+ void do_rotate(const std::string& snapshot_type);
+ void do_scale(const std::string& snapshot_type);
+ void do_flatten(const Vec3d& normal, const std::string& snapshot_type);
+ void do_mirror(const std::string& snapshot_type);
void set_camera_zoom(double zoom);
diff --git a/src/slic3r/GUI/GUI_ObjectManipulation.cpp b/src/slic3r/GUI/GUI_ObjectManipulation.cpp
index ec5272a44..787c92451 100644
--- a/src/slic3r/GUI/GUI_ObjectManipulation.cpp
+++ b/src/slic3r/GUI/GUI_ObjectManipulation.cpp
@@ -220,8 +220,7 @@ ObjectManipulation::ObjectManipulation(wxWindow* parent) :
selection.synchronize_unselected_instances(Selection::SYNC_ROTATION_GENERAL);
selection.synchronize_unselected_volumes();
// Copy mirroring values from GLVolumes into Model (ModelInstance / ModelVolume), trigger background processing.
- canvas->do_mirror();
- canvas->set_as_dirty();
+ canvas->do_mirror("Set Mirror");
UpdateAndShow(true);
});
return sizer;
@@ -302,8 +301,7 @@ ObjectManipulation::ObjectManipulation(wxWindow* parent) :
selection.synchronize_unselected_instances(Selection::SYNC_ROTATION_GENERAL);
selection.synchronize_unselected_volumes();
// Copy rotation values from GLVolumes into Model (ModelInstance / ModelVolume), trigger background processing.
- wxGetApp().plater()->take_snapshot(_(L("Set Rotation")));
- canvas->do_rotate();
+ canvas->do_rotate("Set Rotation");
UpdateAndShow(true);
});
@@ -656,8 +654,7 @@ void ObjectManipulation::change_position_value(int axis, double value)
Selection& selection = canvas->get_selection();
selection.start_dragging();
selection.translate(position - m_cache.position, selection.requires_local_axes());
- wxGetApp().plater()->take_snapshot(_(L("Set Position")));
- canvas->do_move();
+ canvas->do_move("Set Position");
m_cache.position = position;
m_cache.position_rounded(axis) = DBL_MAX;
@@ -688,8 +685,7 @@ void ObjectManipulation::change_rotation_value(int axis, double value)
selection.rotate(
(M_PI / 180.0) * (transformation_type.absolute() ? rotation : rotation - m_cache.rotation),
transformation_type);
- wxGetApp().plater()->take_snapshot(_(L("Set Orientation")));
- canvas->do_rotate();
+ canvas->do_rotate("Set Orientation");
m_cache.rotation = rotation;
m_cache.rotation_rounded(axis) = DBL_MAX;
@@ -754,7 +750,7 @@ void ObjectManipulation::do_scale(int axis, const Vec3d &scale) const
selection.start_dragging();
selection.scale(scaling_factor * 0.01, transformation_type);
- wxGetApp().plater()->canvas3D()->do_scale();
+ wxGetApp().plater()->canvas3D()->do_scale("Set Scale");
}
void ObjectManipulation::on_change(t_config_option_key opt_key, const boost::any& value)
diff --git a/src/slic3r/GUI/Gizmos/GLGizmosManager.cpp b/src/slic3r/GUI/Gizmos/GLGizmosManager.cpp
index 438cd1a10..23f3cc6c3 100644
--- a/src/slic3r/GUI/Gizmos/GLGizmosManager.cpp
+++ b/src/slic3r/GUI/Gizmos/GLGizmosManager.cpp
@@ -600,9 +600,7 @@ bool GLGizmosManager::on_mouse(wxMouseEvent& evt, GLCanvas3D& canvas)
if (m_current == Flatten)
{
// Rotate the object so the normal points downward:
- wxGetApp().plater()->take_snapshot(_(L("Place on Face")));
- selection.flattening_rotate(get_flattening_normal());
- canvas.do_flatten();
+ canvas.do_flatten(get_flattening_normal(), "Place on Face");
wxGetApp().obj_manipul()->set_dirty();
}
@@ -674,20 +672,18 @@ bool GLGizmosManager::on_mouse(wxMouseEvent& evt, GLCanvas3D& canvas)
{
case Move:
{
- wxGetApp().plater()->take_snapshot(_(L("Move Object")));
canvas.disable_regenerate_volumes();
- canvas.do_move();
+ canvas.do_move("Gizmo-Move Object");
break;
}
case Scale:
{
- canvas.do_scale();
+ canvas.do_scale("Gizmo-Scale Object");
break;
}
case Rotate:
{
- wxGetApp().plater()->take_snapshot(_(L("Rotate Object")));
- canvas.do_rotate();
+ canvas.do_rotate("Gizmo-Rotate Object");
break;
}
default:
diff --git a/src/slic3r/GUI/Selection.cpp b/src/slic3r/GUI/Selection.cpp
index a71005cf2..997146546 100644
--- a/src/slic3r/GUI/Selection.cpp
+++ b/src/slic3r/GUI/Selection.cpp
@@ -806,7 +806,7 @@ void Selection::scale_to_fit_print_volume(const DynamicPrintConfig& config)
double s = std::min(sx, std::min(sy, sz));
if (s != 1.0)
{
- wxGetApp().plater()->take_snapshot(_(L("Scale To Fit")));
+ wxGetApp().plater()->take_snapshot(_(L("Scale To Fit")));
TransformationType type;
type.set_world();
@@ -816,12 +816,12 @@ void Selection::scale_to_fit_print_volume(const DynamicPrintConfig& config)
// apply scale
start_dragging();
scale(s * Vec3d::Ones(), type);
- wxGetApp().plater()->canvas3D()->do_scale();
+ wxGetApp().plater()->canvas3D()->do_scale(""); // avoid storing another snapshot
// center selection on print bed
start_dragging();
translate(print_volume.center() - get_bounding_box().center());
- wxGetApp().plater()->canvas3D()->do_move();
+ wxGetApp().plater()->canvas3D()->do_move(""); // avoid storing another snapshot
wxGetApp().obj_manipul()->set_dirty();
}