Show a notification when attempting to slice during SLA support points editing

This should also fix #5736 and a similar crash when deleting an object during manual editing (which was introduced between 2.2.0 and 2.3.0)
This commit is contained in:
Lukas Matena 2021-02-22 13:35:00 +01:00
parent 1904b7b904
commit 3fd36f08e0
4 changed files with 36 additions and 7 deletions

View file

@ -903,7 +903,7 @@ void GLGizmoSlaSupports::on_set_state()
m_new_point_head_diameter = static_cast<const ConfigOptionFloat*>(cfg.option("support_head_front_diameter"))->value;
}
if (m_state == Off && m_old_state != Off) { // the gizmo was just turned Off
bool will_ask = m_editing_mode && unsaved_changes();
bool will_ask = m_editing_mode && unsaved_changes() && on_is_activable();
if (will_ask) {
wxGetApp().CallAfter([this]() {
// Following is called through CallAfter, because otherwise there was a problem

View file

@ -7,6 +7,7 @@
#include "slic3r/GUI/GUI_ObjectManipulation.hpp"
#include "slic3r/GUI/Plater.hpp"
#include "slic3r/Utils/UndoRedo.hpp"
#include "slic3r/GUI/NotificationManager.hpp"
#include "slic3r/GUI/Gizmos/GLGizmoMove.hpp"
#include "slic3r/GUI/Gizmos/GLGizmoScale.hpp"
@ -1139,5 +1140,19 @@ bool GLGizmosManager::grabber_contains_mouse() const
return (curr != nullptr) ? (curr->get_hover_id() != -1) : false;
}
bool GLGizmosManager::is_in_editing_mode(bool error_notification) const
{
if (m_current != SlaSupports || ! dynamic_cast<GLGizmoSlaSupports*>(get_current())->is_in_editing_mode())
return false;
if (error_notification)
wxGetApp().plater()->get_notification_manager()->push_slicing_error_notification(
_u8L("You are currently editing SLA support points. Please, apply or discard "
"your changes first."));
return true;
}
} // namespace GUI
} // namespace Slic3r

View file

@ -210,6 +210,8 @@ public:
ClippingPlane get_clipping_plane() const;
bool wants_reslice_supports_on_undo() const;
bool is_in_editing_mode(bool error_notification = false) const;
void render_current_gizmo() const;
void render_current_gizmo_for_picking_pass() const;
void render_painter_gizmo() const;