add throw if canceled calls into support spot generating algorithm
This commit is contained in:
parent
a57680ea67
commit
727e7cc4f1
@ -13,7 +13,7 @@
|
|||||||
namespace Slic3r
|
namespace Slic3r
|
||||||
{
|
{
|
||||||
|
|
||||||
void PrintTryCancel::operator()()
|
void PrintTryCancel::operator()() const
|
||||||
{
|
{
|
||||||
m_print->throw_if_canceled();
|
m_print->throw_if_canceled();
|
||||||
}
|
}
|
||||||
|
@ -340,7 +340,7 @@ class PrintTryCancel
|
|||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
// calls print.throw_if_canceled().
|
// calls print.throw_if_canceled().
|
||||||
void operator()();
|
void operator()() const;
|
||||||
private:
|
private:
|
||||||
friend PrintBase;
|
friend PrintBase;
|
||||||
PrintTryCancel() = delete;
|
PrintTryCancel() = delete;
|
||||||
|
@ -7,6 +7,7 @@
|
|||||||
#include "I18N.hpp"
|
#include "I18N.hpp"
|
||||||
#include "Layer.hpp"
|
#include "Layer.hpp"
|
||||||
#include "MutablePolygon.hpp"
|
#include "MutablePolygon.hpp"
|
||||||
|
#include "PrintBase.hpp"
|
||||||
#include "SupportMaterial.hpp"
|
#include "SupportMaterial.hpp"
|
||||||
#include "TreeSupport.hpp"
|
#include "TreeSupport.hpp"
|
||||||
#include "Surface.hpp"
|
#include "Surface.hpp"
|
||||||
@ -420,8 +421,9 @@ void PrintObject::generate_support_spots()
|
|||||||
BOOST_LOG_TRIVIAL(debug) << "Searching support spots - start";
|
BOOST_LOG_TRIVIAL(debug) << "Searching support spots - start";
|
||||||
m_print->set_status(75, L("Searching support spots"));
|
m_print->set_status(75, L("Searching support spots"));
|
||||||
if (!this->shared_regions()->generated_support_points.has_value()) {
|
if (!this->shared_regions()->generated_support_points.has_value()) {
|
||||||
|
PrintTryCancel cancel_func = m_print->make_try_cancel();
|
||||||
SupportSpotsGenerator::Params params{this->print()->m_config.filament_type.values};
|
SupportSpotsGenerator::Params params{this->print()->m_config.filament_type.values};
|
||||||
SupportSpotsGenerator::SupportPoints supp_points = SupportSpotsGenerator::full_search(this, params);
|
SupportSpotsGenerator::SupportPoints supp_points = SupportSpotsGenerator::full_search(this, cancel_func, params);
|
||||||
this->m_shared_regions->generated_support_points = {this->trafo_centered(), supp_points};
|
this->m_shared_regions->generated_support_points = {this->trafo_centered(), supp_points};
|
||||||
m_print->throw_if_canceled();
|
m_print->throw_if_canceled();
|
||||||
}
|
}
|
||||||
@ -463,7 +465,6 @@ void PrintObject::estimate_curled_extrusions()
|
|||||||
SupportSpotsGenerator::Params params{this->print()->m_config.filament_type.values};
|
SupportSpotsGenerator::Params params{this->print()->m_config.filament_type.values};
|
||||||
SupportSpotsGenerator::estimate_supports_malformations(this->support_layers(), support_flow_width, params);
|
SupportSpotsGenerator::estimate_supports_malformations(this->support_layers(), support_flow_width, params);
|
||||||
SupportSpotsGenerator::estimate_malformations(this->layers(), params);
|
SupportSpotsGenerator::estimate_malformations(this->layers(), params);
|
||||||
|
|
||||||
m_print->throw_if_canceled();
|
m_print->throw_if_canceled();
|
||||||
BOOST_LOG_TRIVIAL(debug) << "Estimating areas with curled extrusions - end";
|
BOOST_LOG_TRIVIAL(debug) << "Estimating areas with curled extrusions - end";
|
||||||
}
|
}
|
||||||
@ -787,10 +788,10 @@ bool PrintObject::invalidate_step(PrintObjectStep step)
|
|||||||
} else if (step == posPrepareInfill) {
|
} else if (step == posPrepareInfill) {
|
||||||
invalidated |= this->invalidate_steps({ posInfill, posIroning });
|
invalidated |= this->invalidate_steps({ posInfill, posIroning });
|
||||||
} else if (step == posInfill) {
|
} else if (step == posInfill) {
|
||||||
invalidated |= this->invalidate_steps({ posIroning });
|
invalidated |= this->invalidate_steps({ posIroning, posSupportSpotsSearch });
|
||||||
invalidated |= m_print->invalidate_steps({ psSkirtBrim });
|
invalidated |= m_print->invalidate_steps({ psSkirtBrim });
|
||||||
} else if (step == posSlice) {
|
} else if (step == posSlice) {
|
||||||
invalidated |= this->invalidate_steps({ posPerimeters, posPrepareInfill, posInfill, posIroning, posSupportMaterial, posEstimateCurledExtrusions });
|
invalidated |= this->invalidate_steps({ posPerimeters, posPrepareInfill, posInfill, posIroning, posSupportSpotsSearch, posSupportMaterial, posEstimateCurledExtrusions });
|
||||||
invalidated |= m_print->invalidate_steps({ psSkirtBrim });
|
invalidated |= m_print->invalidate_steps({ psSkirtBrim });
|
||||||
m_slicing_params.valid = false;
|
m_slicing_params.valid = false;
|
||||||
} else if (step == posSupportMaterial) {
|
} else if (step == posSupportMaterial) {
|
||||||
|
@ -8,6 +8,7 @@
|
|||||||
#include "Point.hpp"
|
#include "Point.hpp"
|
||||||
#include "Polygon.hpp"
|
#include "Polygon.hpp"
|
||||||
#include "Print.hpp"
|
#include "Print.hpp"
|
||||||
|
#include "PrintBase.hpp"
|
||||||
#include "Tesselate.hpp"
|
#include "Tesselate.hpp"
|
||||||
#include "libslic3r.h"
|
#include "libslic3r.h"
|
||||||
#include "tbb/parallel_for.h"
|
#include "tbb/parallel_for.h"
|
||||||
@ -32,8 +33,8 @@
|
|||||||
#include "libslic3r/ClipperUtils.hpp"
|
#include "libslic3r/ClipperUtils.hpp"
|
||||||
#include "Geometry/ConvexHull.hpp"
|
#include "Geometry/ConvexHull.hpp"
|
||||||
|
|
||||||
// #define DETAILED_DEBUG_LOGS
|
#define DETAILED_DEBUG_LOGS
|
||||||
// #define DEBUG_FILES
|
#define DEBUG_FILES
|
||||||
|
|
||||||
#ifdef DEBUG_FILES
|
#ifdef DEBUG_FILES
|
||||||
#include <boost/nowide/cstdio.hpp>
|
#include <boost/nowide/cstdio.hpp>
|
||||||
@ -661,7 +662,7 @@ public:
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
SupportPoints check_stability(const PrintObject *po, const Params ¶ms)
|
SupportPoints check_stability(const PrintObject *po, const PrintTryCancel& cancel_func, const Params ¶ms)
|
||||||
{
|
{
|
||||||
SupportPoints supp_points{};
|
SupportPoints supp_points{};
|
||||||
SupportGridFilter supports_presence_grid(po, params.min_distance_between_support_points);
|
SupportGridFilter supports_presence_grid(po, params.min_distance_between_support_points);
|
||||||
@ -674,6 +675,7 @@ SupportPoints check_stability(const PrintObject *po, const Params ¶ms)
|
|||||||
std::unordered_map<size_t, SliceConnection> next_slice_idx_to_weakest_connection;
|
std::unordered_map<size_t, SliceConnection> next_slice_idx_to_weakest_connection;
|
||||||
|
|
||||||
for (size_t layer_idx = 0; layer_idx < po->layer_count(); ++layer_idx) {
|
for (size_t layer_idx = 0; layer_idx < po->layer_count(); ++layer_idx) {
|
||||||
|
cancel_func();
|
||||||
const Layer *layer = po->get_layer(layer_idx);
|
const Layer *layer = po->get_layer(layer_idx);
|
||||||
float bottom_z = layer->bottom_z();
|
float bottom_z = layer->bottom_z();
|
||||||
auto create_support_point_position = [bottom_z](const Vec2f &layer_pos) { return Vec3f{layer_pos.x(), layer_pos.y(), bottom_z}; };
|
auto create_support_point_position = [bottom_z](const Vec2f &layer_pos) { return Vec3f{layer_pos.x(), layer_pos.y(), bottom_z}; };
|
||||||
@ -873,9 +875,9 @@ void debug_export(SupportPoints support_points, std::string file_name)
|
|||||||
// std::vector<size_t> quick_search(const PrintObject *po, const Params ¶ms) {
|
// std::vector<size_t> quick_search(const PrintObject *po, const Params ¶ms) {
|
||||||
// return {};
|
// return {};
|
||||||
// }
|
// }
|
||||||
SupportPoints full_search(const PrintObject *po, const Params ¶ms)
|
SupportPoints full_search(const PrintObject *po, const PrintTryCancel& cancel_func, const Params ¶ms)
|
||||||
{
|
{
|
||||||
SupportPoints supp_points = check_stability(po, params);
|
SupportPoints supp_points = check_stability(po, cancel_func, params);
|
||||||
#ifdef DEBUG_FILES
|
#ifdef DEBUG_FILES
|
||||||
debug_export(supp_points, "issues");
|
debug_export(supp_points, "issues");
|
||||||
#endif
|
#endif
|
||||||
|
@ -3,6 +3,7 @@
|
|||||||
|
|
||||||
#include "Layer.hpp"
|
#include "Layer.hpp"
|
||||||
#include "Line.hpp"
|
#include "Line.hpp"
|
||||||
|
#include "PrintBase.hpp"
|
||||||
#include <boost/log/trivial.hpp>
|
#include <boost/log/trivial.hpp>
|
||||||
#include <vector>
|
#include <vector>
|
||||||
|
|
||||||
@ -22,6 +23,8 @@ struct Params {
|
|||||||
filament_type = std::string("PLA");
|
filament_type = std::string("PLA");
|
||||||
} else {
|
} else {
|
||||||
filament_type = filament_types[0];
|
filament_type = filament_types[0];
|
||||||
|
BOOST_LOG_TRIVIAL(debug)
|
||||||
|
<< "SupportSpotsGenerator: applying filament type: " << filament_type;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -76,7 +79,7 @@ struct Malformations {
|
|||||||
};
|
};
|
||||||
|
|
||||||
// std::vector<size_t> quick_search(const PrintObject *po, const Params ¶ms);
|
// std::vector<size_t> quick_search(const PrintObject *po, const Params ¶ms);
|
||||||
SupportPoints full_search(const PrintObject *po, const Params ¶ms);
|
SupportPoints full_search(const PrintObject *po, const PrintTryCancel& cancel_func, const Params ¶ms);
|
||||||
|
|
||||||
void estimate_supports_malformations(std::vector<SupportLayer*> &layers, float supports_flow_width, const Params ¶ms);
|
void estimate_supports_malformations(std::vector<SupportLayer*> &layers, float supports_flow_width, const Params ¶ms);
|
||||||
void estimate_malformations(std::vector<Layer*> &layers, const Params ¶ms);
|
void estimate_malformations(std::vector<Layer*> &layers, const Params ¶ms);
|
||||||
|
Loading…
Reference in New Issue
Block a user