mirror of
https://git.mirrors.martin98.com/https://github.com/prusa3d/PrusaSlicer.git
synced 2025-07-30 20:12:00 +08:00
SPE-1937: Fixed rendering of sequential clearance contours when dragging an object while the collision detection is running
This commit is contained in:
parent
cfcb4f7925
commit
319454c259
@ -981,7 +981,7 @@ void GLCanvas3D::SequentialPrintClearance::render()
|
||||
glsafe(::glEnable(GL_BLEND));
|
||||
glsafe(::glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA));
|
||||
|
||||
if (!m_evaluating)
|
||||
if (!m_evaluating && !m_dragging)
|
||||
m_fill.render();
|
||||
|
||||
#if ENABLE_GL_CORE_PROFILE
|
||||
@ -3733,6 +3733,7 @@ void GLCanvas3D::on_mouse(wxMouseEvent& evt)
|
||||
if (!evt.CmdDown())
|
||||
m_mouse.drag.start_position_3D = m_mouse.scene_position;
|
||||
m_sequential_print_clearance_first_displacement = true;
|
||||
m_sequential_print_clearance.start_dragging();
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -3857,6 +3858,7 @@ void GLCanvas3D::on_mouse(wxMouseEvent& evt)
|
||||
else if (m_mouse.drag.move_volume_idx != -1 && m_mouse.dragging) {
|
||||
do_move(L("Move Object"));
|
||||
wxGetApp().obj_manipul()->set_dirty();
|
||||
m_sequential_print_clearance.stop_dragging();
|
||||
// Let the plater know that the dragging finished, so a delayed refresh
|
||||
// of the scene with the background processing data should be performed.
|
||||
post_event(SimpleEvent(EVT_GLCANVAS_MOUSE_DRAGGING_FINISHED));
|
||||
|
@ -619,6 +619,7 @@ private:
|
||||
// list of transforms used to render the contours
|
||||
std::vector<std::pair<size_t, Transform3d>> m_instances;
|
||||
bool m_evaluating{ false };
|
||||
bool m_dragging{ false };
|
||||
|
||||
std::vector<std::pair<Pointf3s, Transform3d>> m_hulls_2d_cache;
|
||||
|
||||
@ -628,6 +629,10 @@ private:
|
||||
void render();
|
||||
bool empty() const { return m_contours.empty(); }
|
||||
|
||||
void start_dragging() { m_dragging = true; }
|
||||
bool is_dragging() const { return m_dragging; }
|
||||
void stop_dragging() { m_dragging = false; }
|
||||
|
||||
friend class GLCanvas3D;
|
||||
};
|
||||
|
||||
@ -966,11 +971,18 @@ public:
|
||||
|
||||
void reset_sequential_print_clearance() {
|
||||
m_sequential_print_clearance.m_evaluating = false;
|
||||
m_sequential_print_clearance.set_contours(ContoursList(), false);
|
||||
if (m_sequential_print_clearance.is_dragging())
|
||||
m_sequential_print_clearance_first_displacement = true;
|
||||
else
|
||||
m_sequential_print_clearance.set_contours(ContoursList(), false);
|
||||
set_as_dirty();
|
||||
request_extra_frame();
|
||||
}
|
||||
|
||||
void set_sequential_print_clearance_contours(const ContoursList& contours, bool generate_fill) {
|
||||
m_sequential_print_clearance.set_contours(contours, generate_fill);
|
||||
set_as_dirty();
|
||||
request_extra_frame();
|
||||
}
|
||||
|
||||
bool is_sequential_print_clearance_empty() const {
|
||||
@ -982,7 +994,11 @@ public:
|
||||
}
|
||||
|
||||
void update_sequential_clearance(bool force_contours_generation);
|
||||
void set_sequential_clearance_as_evaluating() { m_sequential_print_clearance.m_evaluating = true; }
|
||||
void set_sequential_clearance_as_evaluating() {
|
||||
m_sequential_print_clearance.m_evaluating = true;
|
||||
set_as_dirty();
|
||||
request_extra_frame();
|
||||
}
|
||||
|
||||
const Print* fff_print() const;
|
||||
const SLAPrint* sla_print() const;
|
||||
|
@ -3349,8 +3349,6 @@ unsigned int Plater::priv::update_background_process(bool force_validation, bool
|
||||
GLCanvas3D::ContoursList contours;
|
||||
contours.contours = background_process.fff_print()->get_sequential_print_clearance_contours();
|
||||
canvas->set_sequential_print_clearance_contours(contours, true);
|
||||
canvas->set_as_dirty();
|
||||
canvas->request_extra_frame();
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -3365,8 +3363,6 @@ unsigned int Plater::priv::update_background_process(bool force_validation, bool
|
||||
GLCanvas3D::ContoursList contours;
|
||||
contours.contours = background_process.fff_print()->get_sequential_print_clearance_contours();
|
||||
canvas->set_sequential_print_clearance_contours(contours, true);
|
||||
canvas->set_as_dirty();
|
||||
canvas->request_extra_frame();
|
||||
}
|
||||
}
|
||||
std::vector<std::string> warnings;
|
||||
|
@ -1550,10 +1550,7 @@ void Selection::erase()
|
||||
ensure_not_below_bed();
|
||||
}
|
||||
|
||||
GLCanvas3D* canvas = wxGetApp().plater()->canvas3D();
|
||||
canvas->set_sequential_clearance_as_evaluating();
|
||||
canvas->set_as_dirty();
|
||||
canvas->request_extra_frame();
|
||||
wxGetApp().plater()->canvas3D()->set_sequential_clearance_as_evaluating();
|
||||
}
|
||||
|
||||
void Selection::render(float scale_factor)
|
||||
|
Loading…
x
Reference in New Issue
Block a user