Merge branch 'master' of https://github.com/prusa3d/Slic3r into et_copy_and_paste

This commit is contained in:
Enrico Turri 2019-04-10 14:03:57 +02:00
commit 1b6bf30e76
4 changed files with 27 additions and 35 deletions

View file

@ -2204,6 +2204,9 @@ void GLCanvas3D::on_idle(wxIdleEvent& evt)
void GLCanvas3D::on_char(wxKeyEvent& evt) void GLCanvas3D::on_char(wxKeyEvent& evt)
{ {
if (!m_initialized)
return;
// see include/wx/defs.h enum wxKeyCode // see include/wx/defs.h enum wxKeyCode
int keyCode = evt.GetKeyCode(); int keyCode = evt.GetKeyCode();
int ctrlMask = wxMOD_CONTROL; int ctrlMask = wxMOD_CONTROL;

View file

@ -47,11 +47,9 @@ void GLGizmoSlaSupports::set_sla_support_data(ModelObject* model_object, const S
{ {
if (selection.is_empty()) { if (selection.is_empty()) {
m_model_object = nullptr; m_model_object = nullptr;
m_old_model_object = nullptr;
return; return;
} }
m_old_model_object = m_model_object;
m_model_object = model_object; m_model_object = model_object;
m_active_instance = selection.get_instance_idx(); m_active_instance = selection.get_instance_idx();
@ -62,9 +60,6 @@ void GLGizmoSlaSupports::set_sla_support_data(ModelObject* model_object, const S
editing_mode_reload_cache(); editing_mode_reload_cache();
} }
if (m_model_object != m_old_model_object)
m_editing_mode = false;
if (m_editing_mode_cache.empty() && m_model_object->sla_points_status != sla::PointsStatus::UserModified) if (m_editing_mode_cache.empty() && m_model_object->sla_points_status != sla::PointsStatus::UserModified)
get_data_from_backend(); get_data_from_backend();
@ -241,10 +236,7 @@ void GLGizmoSlaSupports::render_points(const Selection& selection, bool picking)
bool GLGizmoSlaSupports::is_mesh_update_necessary() const bool GLGizmoSlaSupports::is_mesh_update_necessary() const
{ {
return ((m_state == On) && (m_model_object != nullptr) && !m_model_object->instances.empty()) return ((m_state == On) && (m_model_object != nullptr) && !m_model_object->instances.empty())
&& ((m_model_object != m_old_model_object) || m_V.size()==0); && ((m_model_object->id() != m_current_mesh_model_id) || m_V.size()==0);
//if (m_state != On || !m_model_object || m_model_object->instances.empty() || ! m_instance_matrix.isApprox(m_source_data.matrix))
// return false;
} }
void GLGizmoSlaSupports::update_mesh() void GLGizmoSlaSupports::update_mesh()
@ -267,6 +259,8 @@ void GLGizmoSlaSupports::update_mesh()
F(i, 1) = 3*i+1; F(i, 1) = 3*i+1;
F(i, 2) = 3*i+2; F(i, 2) = 3*i+2;
} }
m_current_mesh_model_id = m_model_object->id();
m_editing_mode = false;
m_AABB = igl::AABB<Eigen::MatrixXf,3>(); m_AABB = igl::AABB<Eigen::MatrixXf,3>();
m_AABB.init(m_V, m_F); m_AABB.init(m_V, m_F);
@ -740,10 +734,6 @@ std::string GLGizmoSlaSupports::on_get_name() const
void GLGizmoSlaSupports::on_set_state() void GLGizmoSlaSupports::on_set_state()
{ {
// Following is called through CallAfter, because otherwise there was a problem
// on OSX with the wxMessageDialog being shown several times when clicked into.
wxGetApp().CallAfter([this]() {
if (m_state == On && m_old_state != On) { // the gizmo was just turned on if (m_state == On && m_old_state != On) { // the gizmo was just turned on
if (is_mesh_update_necessary()) if (is_mesh_update_necessary())
@ -762,23 +752,26 @@ void GLGizmoSlaSupports::on_set_state()
m_new_point_head_diameter = static_cast<const ConfigOptionFloat*>(cfg.option("support_head_front_diameter"))->value; 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 if (m_state == Off && m_old_state != Off) { // the gizmo was just turned Off
if (m_model_object) { wxGetApp().CallAfter([this]() {
if (m_unsaved_changes) { // Following is called through CallAfter, because otherwise there was a problem
wxMessageDialog dlg(GUI::wxGetApp().mainframe, _(L("Do you want to save your manually edited support points ?\n")), // on OSX with the wxMessageDialog being shown several times when clicked into.
_(L("Save changes?")), wxICON_QUESTION | wxYES | wxNO); if (m_model_object) {
if (dlg.ShowModal() == wxID_YES) if (m_unsaved_changes) {
editing_mode_apply_changes(); wxMessageDialog dlg(GUI::wxGetApp().mainframe, _(L("Do you want to save your manually edited support points ?\n")),
else _(L("Save changes?")), wxICON_QUESTION | wxYES | wxNO);
editing_mode_discard_changes(); if (dlg.ShowModal() == wxID_YES)
editing_mode_apply_changes();
else
editing_mode_discard_changes();
}
} }
}
m_parent.toggle_model_objects_visibility(true); m_parent.toggle_model_objects_visibility(true);
m_editing_mode = false; // so it is not active next time the gizmo opens m_editing_mode = false; // so it is not active next time the gizmo opens
m_editing_mode_cache.clear(); m_editing_mode_cache.clear();
});
} }
m_old_state = m_state; m_old_state = m_state;
});
} }

View file

@ -21,7 +21,7 @@ class GLGizmoSlaSupports : public GLGizmoBase
{ {
private: private:
ModelObject* m_model_object = nullptr; ModelObject* m_model_object = nullptr;
ModelObject* m_old_model_object = nullptr; ModelID m_current_mesh_model_id = 0;
int m_active_instance = -1; int m_active_instance = -1;
std::pair<Vec3f, Vec3f> unproject_on_mesh(const Vec2d& mouse_pos); std::pair<Vec3f, Vec3f> unproject_on_mesh(const Vec2d& mouse_pos);

View file

@ -2598,25 +2598,21 @@ void Plater::priv::on_slicing_update(SlicingStatusEvent &evt)
this->statusbar()->set_progress(evt.status.percent); this->statusbar()->set_progress(evt.status.percent);
this->statusbar()->set_status_text(_(L(evt.status.text)) + wxString::FromUTF8("")); this->statusbar()->set_status_text(_(L(evt.status.text)) + wxString::FromUTF8(""));
} }
if (evt.status.flags & PrintBase::SlicingStatus::RELOAD_SCENE) { if (evt.status.flags & (PrintBase::SlicingStatus::RELOAD_SCENE || PrintBase::SlicingStatus::RELOAD_SLA_SUPPORT_POINTS)) {
switch (this->printer_technology) { switch (this->printer_technology) {
case ptFFF: case ptFFF:
this->update_fff_scene(); this->update_fff_scene();
break; break;
case ptSLA: case ptSLA:
// If RELOAD_SLA_SUPPORT_POINTS, then the SLA gizmo is updated (reload_scene calls update_gizmos_data)
if (view3D->is_dragging()) if (view3D->is_dragging())
delayed_scene_refresh = true; delayed_scene_refresh = true;
else else
this->update_sla_scene(); this->update_sla_scene();
break; break;
} }
} } else if (evt.status.flags & PrintBase::SlicingStatus::RELOAD_SLA_PREVIEW) {
if (evt.status.flags & PrintBase::SlicingStatus::RELOAD_SLA_SUPPORT_POINTS) { // Update the SLA preview. Only called if not RELOAD_SLA_SUPPORT_POINTS, as the block above will refresh the preview anyways.
// Update SLA gizmo (reload_scene calls update_gizmos_data)
q->canvas3D()->reload_scene(true);
}
if (evt.status.flags & PrintBase::SlicingStatus::RELOAD_SLA_PREVIEW) {
// Update the SLA preview
this->preview->reload_print(); this->preview->reload_print();
} }
} }