mirror of
https://git.mirrors.martin98.com/https://github.com/prusa3d/PrusaSlicer.git
synced 2025-08-02 04:50:37 +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(::glEnable(GL_BLEND));
|
||||||
glsafe(::glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA));
|
glsafe(::glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA));
|
||||||
|
|
||||||
if (!m_evaluating)
|
if (!m_evaluating && !m_dragging)
|
||||||
m_fill.render();
|
m_fill.render();
|
||||||
|
|
||||||
#if ENABLE_GL_CORE_PROFILE
|
#if ENABLE_GL_CORE_PROFILE
|
||||||
@ -3733,6 +3733,7 @@ void GLCanvas3D::on_mouse(wxMouseEvent& evt)
|
|||||||
if (!evt.CmdDown())
|
if (!evt.CmdDown())
|
||||||
m_mouse.drag.start_position_3D = m_mouse.scene_position;
|
m_mouse.drag.start_position_3D = m_mouse.scene_position;
|
||||||
m_sequential_print_clearance_first_displacement = true;
|
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) {
|
else if (m_mouse.drag.move_volume_idx != -1 && m_mouse.dragging) {
|
||||||
do_move(L("Move Object"));
|
do_move(L("Move Object"));
|
||||||
wxGetApp().obj_manipul()->set_dirty();
|
wxGetApp().obj_manipul()->set_dirty();
|
||||||
|
m_sequential_print_clearance.stop_dragging();
|
||||||
// Let the plater know that the dragging finished, so a delayed refresh
|
// Let the plater know that the dragging finished, so a delayed refresh
|
||||||
// of the scene with the background processing data should be performed.
|
// of the scene with the background processing data should be performed.
|
||||||
post_event(SimpleEvent(EVT_GLCANVAS_MOUSE_DRAGGING_FINISHED));
|
post_event(SimpleEvent(EVT_GLCANVAS_MOUSE_DRAGGING_FINISHED));
|
||||||
|
@ -619,6 +619,7 @@ private:
|
|||||||
// list of transforms used to render the contours
|
// list of transforms used to render the contours
|
||||||
std::vector<std::pair<size_t, Transform3d>> m_instances;
|
std::vector<std::pair<size_t, Transform3d>> m_instances;
|
||||||
bool m_evaluating{ false };
|
bool m_evaluating{ false };
|
||||||
|
bool m_dragging{ false };
|
||||||
|
|
||||||
std::vector<std::pair<Pointf3s, Transform3d>> m_hulls_2d_cache;
|
std::vector<std::pair<Pointf3s, Transform3d>> m_hulls_2d_cache;
|
||||||
|
|
||||||
@ -628,6 +629,10 @@ private:
|
|||||||
void render();
|
void render();
|
||||||
bool empty() const { return m_contours.empty(); }
|
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;
|
friend class GLCanvas3D;
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -966,11 +971,18 @@ public:
|
|||||||
|
|
||||||
void reset_sequential_print_clearance() {
|
void reset_sequential_print_clearance() {
|
||||||
m_sequential_print_clearance.m_evaluating = false;
|
m_sequential_print_clearance.m_evaluating = false;
|
||||||
|
if (m_sequential_print_clearance.is_dragging())
|
||||||
|
m_sequential_print_clearance_first_displacement = true;
|
||||||
|
else
|
||||||
m_sequential_print_clearance.set_contours(ContoursList(), false);
|
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) {
|
void set_sequential_print_clearance_contours(const ContoursList& contours, bool generate_fill) {
|
||||||
m_sequential_print_clearance.set_contours(contours, generate_fill);
|
m_sequential_print_clearance.set_contours(contours, generate_fill);
|
||||||
|
set_as_dirty();
|
||||||
|
request_extra_frame();
|
||||||
}
|
}
|
||||||
|
|
||||||
bool is_sequential_print_clearance_empty() const {
|
bool is_sequential_print_clearance_empty() const {
|
||||||
@ -982,7 +994,11 @@ public:
|
|||||||
}
|
}
|
||||||
|
|
||||||
void update_sequential_clearance(bool force_contours_generation);
|
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 Print* fff_print() const;
|
||||||
const SLAPrint* sla_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;
|
GLCanvas3D::ContoursList contours;
|
||||||
contours.contours = background_process.fff_print()->get_sequential_print_clearance_contours();
|
contours.contours = background_process.fff_print()->get_sequential_print_clearance_contours();
|
||||||
canvas->set_sequential_print_clearance_contours(contours, true);
|
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;
|
GLCanvas3D::ContoursList contours;
|
||||||
contours.contours = background_process.fff_print()->get_sequential_print_clearance_contours();
|
contours.contours = background_process.fff_print()->get_sequential_print_clearance_contours();
|
||||||
canvas->set_sequential_print_clearance_contours(contours, true);
|
canvas->set_sequential_print_clearance_contours(contours, true);
|
||||||
canvas->set_as_dirty();
|
|
||||||
canvas->request_extra_frame();
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
std::vector<std::string> warnings;
|
std::vector<std::string> warnings;
|
||||||
|
@ -1550,10 +1550,7 @@ void Selection::erase()
|
|||||||
ensure_not_below_bed();
|
ensure_not_below_bed();
|
||||||
}
|
}
|
||||||
|
|
||||||
GLCanvas3D* canvas = wxGetApp().plater()->canvas3D();
|
wxGetApp().plater()->canvas3D()->set_sequential_clearance_as_evaluating();
|
||||||
canvas->set_sequential_clearance_as_evaluating();
|
|
||||||
canvas->set_as_dirty();
|
|
||||||
canvas->request_extra_frame();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void Selection::render(float scale_factor)
|
void Selection::render(float scale_factor)
|
||||||
|
Loading…
x
Reference in New Issue
Block a user