Added cache for sequential printing clearance contours into class Print to avoid calculate them twice when needed.

This commit is contained in:
enricoturri1966 2023-02-16 10:18:40 +01:00
parent 088fb22182
commit 056d703573
3 changed files with 12 additions and 8 deletions

View File

@ -471,11 +471,13 @@ std::string Print::validate(std::string* warning) const
return L("The supplied settings will cause an empty print."); return L("The supplied settings will cause an empty print.");
if (m_config.complete_objects) { if (m_config.complete_objects) {
if (! sequential_print_horizontal_clearance_valid(*this)) if (!sequential_print_horizontal_clearance_valid(*this, const_cast<Polygons*>(&m_sequential_print_clearance_polygons)))
return L("Some objects are too close; your extruder will collide with them."); return L("Some objects are too close; your extruder will collide with them.");
if (!sequential_print_vertical_clearance_valid(*this)) if (!sequential_print_vertical_clearance_valid(*this))
return L("Some objects are too tall and cannot be printed without extruder collisions."); return L("Some objects are too tall and cannot be printed without extruder collisions.");
} }
else
const_cast<Polygons*>(&m_sequential_print_clearance_polygons)->clear();
if (m_config.avoid_crossing_perimeters && m_config.avoid_crossing_curled_overhangs) { if (m_config.avoid_crossing_perimeters && m_config.avoid_crossing_curled_overhangs) {
return L("Avoid crossing perimeters option and avoid crossing curled overhangs option cannot be both enabled together."); return L("Avoid crossing perimeters option and avoid crossing curled overhangs option cannot be both enabled together.");

View File

@ -597,6 +597,7 @@ public:
const PrintRegion& get_print_region(size_t idx) const { return *m_print_regions[idx]; } const PrintRegion& get_print_region(size_t idx) const { return *m_print_regions[idx]; }
const ToolOrdering& get_tool_ordering() const { return m_wipe_tower_data.tool_ordering; } const ToolOrdering& get_tool_ordering() const { return m_wipe_tower_data.tool_ordering; }
const Polygons& get_sequential_print_clearance_polygons() const { return m_sequential_print_clearance_polygons; }
static bool sequential_print_horizontal_clearance_valid(const Print& print, Polygons* polygons = nullptr); static bool sequential_print_horizontal_clearance_valid(const Print& print, Polygons* polygons = nullptr);
protected: protected:
@ -646,6 +647,9 @@ private:
// Estimated print time, filament consumed. // Estimated print time, filament consumed.
PrintStatistics m_print_statistics; PrintStatistics m_print_statistics;
// Cache to store sequential print clearance polygons
Polygons m_sequential_print_clearance_polygons;
// To allow GCode to set the Print's GCodeExport step status. // To allow GCode to set the Print's GCodeExport step status.
friend class GCode; friend class GCode;
// Allow PrintObject to access m_mutex and m_cancel_callback. // Allow PrintObject to access m_mutex and m_cancel_callback.

View File

@ -3320,11 +3320,9 @@ unsigned int Plater::priv::update_background_process(bool force_validation, bool
return_state |= UPDATE_BACKGROUND_PROCESS_INVALID; return_state |= UPDATE_BACKGROUND_PROCESS_INVALID;
if (printer_technology == ptFFF) { if (printer_technology == ptFFF) {
const Print* print = background_process.fff_print(); const Print* print = background_process.fff_print();
Polygons polygons; const Polygons polygons = print->get_sequential_print_clearance_polygons();
if (print->config().complete_objects) view3D->get_canvas3d()->set_sequential_print_clearance_visible(!polygons.empty());
Print::sequential_print_horizontal_clearance_valid(*print, &polygons); view3D->get_canvas3d()->set_sequential_print_clearance_render_fill(!polygons.empty());
view3D->get_canvas3d()->set_sequential_print_clearance_visible(true);
view3D->get_canvas3d()->set_sequential_print_clearance_render_fill(true);
view3D->get_canvas3d()->set_sequential_print_clearance_polygons(polygons); view3D->get_canvas3d()->set_sequential_print_clearance_polygons(polygons);
} }
} }