Skip to content

Commit

Permalink
Merge remote-tracking branch 'remotes/local/dev' into superslicer_var…
Browse files Browse the repository at this point in the history
…iant
  • Loading branch information
supermerill committed Jan 25, 2025
2 parents 51cb992 + 02b419a commit 0557b12
Show file tree
Hide file tree
Showing 42 changed files with 1,021 additions and 430 deletions.
2 changes: 1 addition & 1 deletion BuildMacOS.sh
Original file line number Diff line number Diff line change
Expand Up @@ -302,7 +302,7 @@ then
if [[ -z "$BUILD_XCODE" ]]
then
echo -e "\n[6/9] Building Slicer ...\n"
make -j$NCORES
make -j$NCORES Slic3r
echo -e "\n ... done"
fi

Expand Down
4 changes: 4 additions & 0 deletions resources/ui_layout/default/print.ui
Original file line number Diff line number Diff line change
Expand Up @@ -551,6 +551,10 @@ group:Wipe tower
setting:priming_position
end_line
group:Advanced
line:Bed Temperature
setting:label$First layer:print_first_layer_bed_temperature
setting:label$Other layers:print_bed_temperature
end_line
setting:interface_shells
line:Segmented regions
setting:label$Maximum width:mmu_segmented_region_max_width
Expand Down
35 changes: 21 additions & 14 deletions src/libslic3r/Color.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -362,24 +362,31 @@ bool decode_color(const std::string& color_in, ColorRGBA& color_out)
return true;
}

bool decode_colors(const std::vector<std::string>& colors_in, std::vector<ColorRGB>& colors_out)
{
colors_out = std::vector<ColorRGB>(colors_in.size(), ColorRGB::BLACK());
for (size_t i = 0; i < colors_in.size(); ++i) {
if (!decode_color(colors_in[i], colors_out[i]))
return false;
}
return true;
bool decode_colors(const std::vector<std::string> &colors_in, std::vector<ColorRGB> &colors_out) {
bool all_success = true;
colors_out.resize(colors_in.size(), ColorRGB::BLACK());
for (size_t i = 0; i < colors_in.size(); ++i) {
if (!decode_color(colors_in[i], colors_out[i])) {
// continue, please.
// return false;
all_success = false;
}
}
return all_success;
}

bool decode_colors(const std::vector<std::string>& colors_in, std::vector<ColorRGBA>& colors_out)
{
colors_out = std::vector<ColorRGBA>(colors_in.size(), ColorRGBA::BLACK());
for (size_t i = 0; i < colors_in.size(); ++i) {
if (!decode_color(colors_in[i], colors_out[i]))
return false;
}
return true;
bool all_success = true;
colors_out.resize(colors_in.size(), ColorRGBA::BLACK());
for (size_t i = 0; i < colors_in.size(); ++i) {
if (!decode_color(colors_in[i], colors_out[i])) {
// continue, please.
// return false;
all_success = false;
}
}
return all_success;
}

static const std::array<ColorRGBA, 12> COLOR_ROTATION = {{
Expand Down
10 changes: 9 additions & 1 deletion src/libslic3r/Config.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -567,7 +567,7 @@ class ConfigOption {
return this;
}
// Like FCO_EXTRUDER_ARRAY that is a copy of the def, this is the copy of the def to replicate is_nullable()
bool can_be_disabled() const { return (flags & FCO_CAN_DISABLED) != 0; }
bool can_be_disabled() const { return (flags & FCO_CAN_DISABLED) != 0; }
// should only be set by configdef when a new item is requested. It also set it as disabled if you set the arg to true.
ConfigOption* set_can_be_disabled(bool force_disabled = false) { this->flags |= FCO_CAN_DISABLED; if(force_disabled) set_enabled(false); return this; }

Expand Down Expand Up @@ -3219,6 +3219,14 @@ class DynamicConfig : public virtual ConfigBase
// Be careful, as this method does not test the existence of opt_key in this->def().
bool set_key_value(const std::string &opt_key, ConfigOption *opt)
{
// ensure set_can_be_disabled is set
if (def()) {
const ConfigOptionDef* opt_def = def()->get(opt_key);
if (opt_def && opt_def->can_enable && !opt->can_be_disabled()) {
opt->set_can_be_disabled();
}
}
// replace or insert
assert(opt != nullptr);
auto it = this->options.find(opt_key);
if (it == this->options.end()) {
Expand Down
14 changes: 9 additions & 5 deletions src/libslic3r/ExtrusionEntity.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -59,10 +59,14 @@ class ExtrusionVisitorConst {
class ExtrusionEntity
{
protected:
static inline std::atomic_int64_t id_generator;
uint64_t m_id; // for travel map
// even if no_sort, allow to reverse() us (and our entities if they allow it, but they should)
bool m_can_reverse;
ExtrusionEntity(bool can_reverse) : m_can_reverse(can_reverse) {}
ExtrusionEntity(bool can_reverse) : m_can_reverse(can_reverse) , m_id(++id_generator) {}
ExtrusionEntity(uint64_t id, bool can_reverse) : m_can_reverse(can_reverse), m_id(id) {}
public:
uint64_t get_id() const { return m_id; }
virtual ExtrusionRole role() const = 0;
virtual bool is_collection() const { return false; }
virtual bool is_loop() const { return false; }
Expand Down Expand Up @@ -183,8 +187,8 @@ class ExtrusionPath : public ExtrusionEntity

//ExtrusionPath(ExtrusionRole role) : ExtrusionEntity(true), m_attributes{role} {}
ExtrusionPath(const ExtrusionAttributes &attributes, bool can_reverse = true) : ExtrusionEntity(can_reverse), m_attributes(attributes) {}
ExtrusionPath(const ExtrusionPath &rhs) : ExtrusionEntity(rhs.m_can_reverse), polyline(rhs.polyline), m_attributes(rhs.m_attributes) {}
ExtrusionPath(ExtrusionPath &&rhs) : ExtrusionEntity(rhs.m_can_reverse), polyline(std::move(rhs.polyline)), m_attributes(rhs.m_attributes) {}
ExtrusionPath(const ExtrusionPath &rhs) : ExtrusionEntity(rhs.m_id, rhs.m_can_reverse), polyline(rhs.polyline), m_attributes(rhs.m_attributes) {}
ExtrusionPath(ExtrusionPath &&rhs) : ExtrusionEntity(rhs.m_id, rhs.m_can_reverse), polyline(std::move(rhs.polyline)), m_attributes(rhs.m_attributes) {}
ExtrusionPath(const ArcPolyline &polyline, const ExtrusionAttributes &attribs, bool can_reverse = true) : ExtrusionEntity(can_reverse), polyline(polyline), m_attributes(attribs) {}
ExtrusionPath(ArcPolyline &&polyline, const ExtrusionAttributes &attribs, bool can_reverse = true) : ExtrusionEntity(can_reverse), polyline(std::move(polyline)), m_attributes(attribs) {}

Expand Down Expand Up @@ -333,8 +337,8 @@ class ExtrusionMultiEntity : public ExtrusionEntity {
std::vector<THING> paths;

ExtrusionMultiEntity(): ExtrusionEntity(false) {};
ExtrusionMultiEntity(const ExtrusionMultiEntity &rhs) : paths(rhs.paths), ExtrusionEntity(rhs.m_can_reverse) {}
ExtrusionMultiEntity(ExtrusionMultiEntity &&rhs) : paths(std::move(rhs.paths)), ExtrusionEntity(rhs.m_can_reverse) {}
ExtrusionMultiEntity(const ExtrusionMultiEntity &rhs) : paths(rhs.paths), ExtrusionEntity(rhs.m_id, rhs.m_can_reverse) {}
ExtrusionMultiEntity(ExtrusionMultiEntity &&rhs) : paths(std::move(rhs.paths)), ExtrusionEntity(rhs.m_id, rhs.m_can_reverse) {}
ExtrusionMultiEntity(const std::vector<THING> &paths) : paths(paths), ExtrusionEntity(false) {};
ExtrusionMultiEntity(const THING &path): ExtrusionEntity(false) { this->paths.push_back(path); }

Expand Down
2 changes: 2 additions & 0 deletions src/libslic3r/ExtrusionEntityCollection.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -38,6 +38,7 @@ ExtrusionEntityCollection& ExtrusionEntityCollection::operator= (const Extrusion
{
this->m_no_sort = other.m_no_sort;
this->m_can_reverse = other.m_can_reverse;
this->m_id = other.m_id;
clear();
this->append(other.m_entities);
return *this;
Expand All @@ -48,6 +49,7 @@ void ExtrusionEntityCollection::swap(ExtrusionEntityCollection &c)
std::swap(this->m_entities, c.m_entities);
std::swap(this->m_no_sort, c.m_no_sort);
std::swap(this->m_can_reverse, c.m_can_reverse);
std::swap(this->m_id, c.m_id);
}

void ExtrusionEntityCollection::clear()
Expand Down
5 changes: 3 additions & 2 deletions src/libslic3r/ExtrusionEntityCollection.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -49,15 +49,16 @@ class ExtrusionEntityCollection : public ExtrusionEntity
ExtrusionEntitiesPtr& set_entities() { return m_entities; }
ExtrusionEntityCollection() : m_no_sort(false), ExtrusionEntity(true) {}
ExtrusionEntityCollection(bool can_sort, bool can_reverse) : m_no_sort(!can_sort), ExtrusionEntity(can_reverse) {}
ExtrusionEntityCollection(const ExtrusionEntityCollection &other) : m_no_sort(other.m_no_sort), ExtrusionEntity(other.m_can_reverse) { this->append(other.entities()); }
ExtrusionEntityCollection(ExtrusionEntityCollection &&other) : m_entities(std::move(other.m_entities)), m_no_sort(other.m_no_sort), ExtrusionEntity(other.m_can_reverse) {}
ExtrusionEntityCollection(const ExtrusionEntityCollection &other) : m_no_sort(other.m_no_sort), ExtrusionEntity(other.m_id, other.m_can_reverse) { this->append(other.entities()); }
ExtrusionEntityCollection(ExtrusionEntityCollection &&other) : m_entities(std::move(other.m_entities)), m_no_sort(other.m_no_sort), ExtrusionEntity(other.m_id, other.m_can_reverse) {}
explicit ExtrusionEntityCollection(const ExtrusionPaths &paths);
ExtrusionEntityCollection& operator=(const ExtrusionEntityCollection &other);
ExtrusionEntityCollection& operator=(ExtrusionEntityCollection &&other) {
this->clear();
this->m_entities = std::move(other.m_entities);
this->m_no_sort = other.m_no_sort;
this->m_can_reverse = other.m_can_reverse;
this->m_id = other.m_id;
return *this;
}
~ExtrusionEntityCollection() override { clear(); }
Expand Down
2 changes: 1 addition & 1 deletion src/libslic3r/Fill/FillBase.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -95,7 +95,7 @@ Polylines Fill::fill_surface(const Surface *surface, const FillParams &params) c
Polylines polylines_out;
for (ExPolygon &expoly : expp) {
_fill_surface_single(params, surface->thickness_layers, _infill_direction(surface), std::move(expoly), polylines_out);
assert_valid(polylines_out);
ensure_valid(polylines_out, std::max(SCALED_EPSILON, params.fill_resolution / 4));
}
assert(get_spacing() >= 0);
return polylines_out;
Expand Down
Loading

0 comments on commit 0557b12

Please sign in to comment.