separate monotonicWGapfill and rectilinearWgapfill

This commit is contained in:
supermerill 2020-12-02 01:22:05 +01:00
parent 8ac75cfc5e
commit 5b8b5bc2d1
5 changed files with 24 additions and 8 deletions

View File

@ -33,8 +33,9 @@ Fill* Fill::new_from_type(const InfillPattern type)
case ip3DHoneycomb: return new Fill3DHoneycomb();
case ipGyroid: return new FillGyroid();
case ipRectilinear: return new FillRectilinear();
case ipMonotonic: return new FillMonotonic();
case ipRectilinearWGapFill: return new FillRectilinearWGapFill();
case ipMonotonic: return new FillMonotonic();
case ipMonotonicWGapFill: return new FillMonotonicWGapFill();
case ipScatteredRectilinear:return new FillScatteredRectilinear();
case ipLine: return new FillLine();
case ipGrid: return new FillGrid();

View File

@ -3328,7 +3328,7 @@ FillRectilinearWGapFill::fill_surface_extrusion(const Surface *surface, const Fi
Polylines polylines_rectilinear;
Surface rectilinear_surface{ *surface };
FillParams params_monotonic = params;
params_monotonic.monotonic = true;
params_monotonic.monotonic = is_monotonic();
for (const ExPolygon &rectilinear_area : rectilinear_areas) {
rectilinear_surface.expolygon = rectilinear_area, 0 - 0.5 * params.flow.scaled_spacing();
if (!fill_surface_by_lines(&rectilinear_surface, params_monotonic, 0.f, 0.f, polylines_rectilinear)) {
@ -3368,7 +3368,7 @@ FillRectilinearWGapFill::fill_surface_extrusion(const Surface *surface, const Fi
ExtrusionEntityCollection *eec = new ExtrusionEntityCollection();
/// pass the no_sort attribute to the extrusion path
//don't force monotonic if not top or bottom
if (surface->surface_type & (stPosTop | stPosBottom) != 0)
if (is_monotonic())
eec->no_sort = true;
else
eec->no_sort = this->no_sort();

View File

@ -126,11 +126,22 @@ public:
class FillRectilinearWGapFill : public FillRectilinear
{
public:
Fill* clone() const override { return new FillRectilinearWGapFill(*this); };
~FillRectilinearWGapFill() override = default;
void fill_surface_extrusion(const Surface* surface, const FillParams& params, ExtrusionEntitiesPtr& out) const override;
static void split_polygon_gap_fill(const Surface& surface, const FillParams& params, ExPolygons& rectilinear, ExPolygons& gapfill);
protected:
virtual bool is_monotonic() const { return false; }
};
class FillMonotonicWGapFill : public FillRectilinearWGapFill
{
public:
Fill* clone() const override { return new FillMonotonicWGapFill(*this); };
~FillMonotonicWGapFill() override = default;
protected:
virtual bool is_monotonic() const override { return true; }
};

View File

@ -697,7 +697,7 @@ void PrintConfigDef::init_fff_params()
def->cli = "top-fill-pattern|external-fill-pattern=s";
def->enum_keys_map = &ConfigOptionEnum<InfillPattern>::get_enum_values();
def->enum_values.push_back("rectilinear");
def->enum_values.push_back("rectilineargapfill");
def->enum_values.push_back("monotonicgapfillgapfill");
def->enum_values.push_back("monotonic");
def->enum_values.push_back("concentric");
def->enum_values.push_back("concentricgapfill");
@ -728,7 +728,7 @@ void PrintConfigDef::init_fff_params()
def->cli = "bottom-fill-pattern|external-fill-pattern=s";
def->enum_keys_map = &ConfigOptionEnum<InfillPattern>::get_enum_values();
def->enum_values.push_back("rectilinear");
def->enum_values.push_back("rectilineargapfill");
def->enum_values.push_back("monotonicgapfill");
def->enum_values.push_back("monotonic");
def->enum_values.push_back("concentric");
def->enum_values.push_back("concentricgapfill");

View File

@ -83,8 +83,11 @@ enum InfillPattern : uint8_t{
ipGyroid, ipHilbertCurve, ipArchimedeanChords, ipOctagramSpiral,
ipAdaptiveCubic, ipSupportCubic,
ipSmooth, ipSmoothHilbert, ipSmoothTriple,
ipRectiWithPerimeter, ipConcentricGapFill, ipScatteredRectilinear, ipSawtooth, ipRectilinearWGapFill,
ipRectiWithPerimeter, ipConcentricGapFill, ipScatteredRectilinear,
ipSawtooth,
ipRectilinearWGapFill,
ipMonotonic,
ipMonotonicWGapFill,
ipCount
};
@ -229,7 +232,7 @@ template<> inline const t_config_enum_values& ConfigOptionEnum<InfillPattern>::g
static t_config_enum_values keys_map;
if (keys_map.empty()) {
keys_map["rectilinear"] = ipRectilinear;
keys_map["monotonic"] = ipMonotonic;
keys_map["monotonic"] = ipMonotonic;
keys_map["grid"] = ipGrid;
keys_map["triangles"] = ipTriangles;
keys_map["stars"] = ipStars;
@ -249,6 +252,7 @@ template<> inline const t_config_enum_values& ConfigOptionEnum<InfillPattern>::g
keys_map["rectiwithperimeter"] = ipRectiWithPerimeter;
keys_map["scatteredrectilinear"]= ipScatteredRectilinear;
keys_map["rectilineargapfill"] = ipRectilinearWGapFill;
keys_map["monotonicgapfill"] = ipMonotonicWGapFill;
keys_map["sawtooth"] = ipSawtooth;
keys_map["adaptivecubic"] = ipAdaptiveCubic;
keys_map["supportcubic"] = ipSupportCubic;