Skip to content

Commit

Permalink
Show a notification when attempting to slice during SLA support point…
Browse files Browse the repository at this point in the history
…s 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)
  • Loading branch information
lukasmatena committed Feb 22, 2021
1 parent 90961ab commit 27b908f
Show file tree
Hide file tree
Showing 4 changed files with 36 additions and 7 deletions.
2 changes: 1 addition & 1 deletion src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
15 changes: 15 additions & 0 deletions src/slic3r/GUI/Gizmos/GLGizmosManager.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -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"
Expand Down Expand Up @@ -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
2 changes: 2 additions & 0 deletions src/slic3r/GUI/Gizmos/GLGizmosManager.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -210,6 +210,8 @@ class GLGizmosManager : public Slic3r::ObjectBase
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;
Expand Down
24 changes: 18 additions & 6 deletions src/slic3r/GUI/Plater.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -790,6 +790,9 @@ Sidebar::Sidebar(Plater *parent)
p->btn_export_gcode->Bind(wxEVT_BUTTON, [this](wxCommandEvent&) { p->plater->export_gcode(false); });
p->btn_reslice->Bind(wxEVT_BUTTON, [this](wxCommandEvent&)
{
if (p->plater->canvas3D()->get_gizmos_manager().is_in_editing_mode(true))
return;

const bool export_gcode_after_slicing = wxGetKeyState(WXK_SHIFT);
if (export_gcode_after_slicing)
p->plater->export_gcode(true);
Expand Down Expand Up @@ -4214,19 +4217,19 @@ bool Plater::priv::can_fix_through_netfabb() const

bool Plater::priv::can_increase_instances() const
{
if (m_ui_jobs.is_any_running()) {
return false;
}
if (m_ui_jobs.is_any_running()
|| q->canvas3D()->get_gizmos_manager().is_in_editing_mode())
return false;

int obj_idx = get_selected_object_idx();
return (0 <= obj_idx) && (obj_idx < (int)model.objects.size());
}

bool Plater::priv::can_decrease_instances() const
{
if (m_ui_jobs.is_any_running()) {
return false;
}
if (m_ui_jobs.is_any_running()
|| q->canvas3D()->get_gizmos_manager().is_in_editing_mode())
return false;

int obj_idx = get_selected_object_idx();
return (0 <= obj_idx) && (obj_idx < (int)model.objects.size()) && (model.objects[obj_idx]->instances.size() > 1);
Expand Down Expand Up @@ -5116,6 +5119,10 @@ void Plater::export_gcode(bool prefer_removable)
if (p->model.objects.empty())
return;

if (canvas3D()->get_gizmos_manager().is_in_editing_mode(true))
return;


if (p->process_completed_with_error)
return;

Expand Down Expand Up @@ -5391,6 +5398,11 @@ void Plater::reslice()
if (p->process_completed_with_error)
return;

// In case SLA gizmo is in editing mode, refuse to continue
// and notify user that he should leave it first.
if (canvas3D()->get_gizmos_manager().is_in_editing_mode(true))
return;

// Stop arrange and (or) optimize rotation tasks.
this->stop_jobs();

Expand Down

0 comments on commit 27b908f

Please sign in to comment.