mirror of
https://git.mirrors.martin98.com/https://github.com/slic3r/Slic3r.git
synced 2025-07-21 16:44:27 +08:00
separate monotonicWGapfill and rectilinearWgapfill
This commit is contained in:
parent
8ac75cfc5e
commit
5b8b5bc2d1
@ -33,8 +33,9 @@ Fill* Fill::new_from_type(const InfillPattern type)
|
|||||||
case ip3DHoneycomb: return new Fill3DHoneycomb();
|
case ip3DHoneycomb: return new Fill3DHoneycomb();
|
||||||
case ipGyroid: return new FillGyroid();
|
case ipGyroid: return new FillGyroid();
|
||||||
case ipRectilinear: return new FillRectilinear();
|
case ipRectilinear: return new FillRectilinear();
|
||||||
case ipMonotonic: return new FillMonotonic();
|
|
||||||
case ipRectilinearWGapFill: return new FillRectilinearWGapFill();
|
case ipRectilinearWGapFill: return new FillRectilinearWGapFill();
|
||||||
|
case ipMonotonic: return new FillMonotonic();
|
||||||
|
case ipMonotonicWGapFill: return new FillMonotonicWGapFill();
|
||||||
case ipScatteredRectilinear:return new FillScatteredRectilinear();
|
case ipScatteredRectilinear:return new FillScatteredRectilinear();
|
||||||
case ipLine: return new FillLine();
|
case ipLine: return new FillLine();
|
||||||
case ipGrid: return new FillGrid();
|
case ipGrid: return new FillGrid();
|
||||||
|
@ -3328,7 +3328,7 @@ FillRectilinearWGapFill::fill_surface_extrusion(const Surface *surface, const Fi
|
|||||||
Polylines polylines_rectilinear;
|
Polylines polylines_rectilinear;
|
||||||
Surface rectilinear_surface{ *surface };
|
Surface rectilinear_surface{ *surface };
|
||||||
FillParams params_monotonic = params;
|
FillParams params_monotonic = params;
|
||||||
params_monotonic.monotonic = true;
|
params_monotonic.monotonic = is_monotonic();
|
||||||
for (const ExPolygon &rectilinear_area : rectilinear_areas) {
|
for (const ExPolygon &rectilinear_area : rectilinear_areas) {
|
||||||
rectilinear_surface.expolygon = rectilinear_area, 0 - 0.5 * params.flow.scaled_spacing();
|
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)) {
|
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();
|
ExtrusionEntityCollection *eec = new ExtrusionEntityCollection();
|
||||||
/// pass the no_sort attribute to the extrusion path
|
/// pass the no_sort attribute to the extrusion path
|
||||||
//don't force monotonic if not top or bottom
|
//don't force monotonic if not top or bottom
|
||||||
if (surface->surface_type & (stPosTop | stPosBottom) != 0)
|
if (is_monotonic())
|
||||||
eec->no_sort = true;
|
eec->no_sort = true;
|
||||||
else
|
else
|
||||||
eec->no_sort = this->no_sort();
|
eec->no_sort = this->no_sort();
|
||||||
|
@ -126,11 +126,22 @@ public:
|
|||||||
class FillRectilinearWGapFill : public FillRectilinear
|
class FillRectilinearWGapFill : public FillRectilinear
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
|
|
||||||
Fill* clone() const override { return new FillRectilinearWGapFill(*this); };
|
Fill* clone() const override { return new FillRectilinearWGapFill(*this); };
|
||||||
~FillRectilinearWGapFill() override = default;
|
~FillRectilinearWGapFill() override = default;
|
||||||
void fill_surface_extrusion(const Surface* surface, const FillParams& params, ExtrusionEntitiesPtr& out) const override;
|
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);
|
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; }
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
@ -697,7 +697,7 @@ void PrintConfigDef::init_fff_params()
|
|||||||
def->cli = "top-fill-pattern|external-fill-pattern=s";
|
def->cli = "top-fill-pattern|external-fill-pattern=s";
|
||||||
def->enum_keys_map = &ConfigOptionEnum<InfillPattern>::get_enum_values();
|
def->enum_keys_map = &ConfigOptionEnum<InfillPattern>::get_enum_values();
|
||||||
def->enum_values.push_back("rectilinear");
|
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("monotonic");
|
||||||
def->enum_values.push_back("concentric");
|
def->enum_values.push_back("concentric");
|
||||||
def->enum_values.push_back("concentricgapfill");
|
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->cli = "bottom-fill-pattern|external-fill-pattern=s";
|
||||||
def->enum_keys_map = &ConfigOptionEnum<InfillPattern>::get_enum_values();
|
def->enum_keys_map = &ConfigOptionEnum<InfillPattern>::get_enum_values();
|
||||||
def->enum_values.push_back("rectilinear");
|
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("monotonic");
|
||||||
def->enum_values.push_back("concentric");
|
def->enum_values.push_back("concentric");
|
||||||
def->enum_values.push_back("concentricgapfill");
|
def->enum_values.push_back("concentricgapfill");
|
||||||
|
@ -83,8 +83,11 @@ enum InfillPattern : uint8_t{
|
|||||||
ipGyroid, ipHilbertCurve, ipArchimedeanChords, ipOctagramSpiral,
|
ipGyroid, ipHilbertCurve, ipArchimedeanChords, ipOctagramSpiral,
|
||||||
ipAdaptiveCubic, ipSupportCubic,
|
ipAdaptiveCubic, ipSupportCubic,
|
||||||
ipSmooth, ipSmoothHilbert, ipSmoothTriple,
|
ipSmooth, ipSmoothHilbert, ipSmoothTriple,
|
||||||
ipRectiWithPerimeter, ipConcentricGapFill, ipScatteredRectilinear, ipSawtooth, ipRectilinearWGapFill,
|
ipRectiWithPerimeter, ipConcentricGapFill, ipScatteredRectilinear,
|
||||||
|
ipSawtooth,
|
||||||
|
ipRectilinearWGapFill,
|
||||||
ipMonotonic,
|
ipMonotonic,
|
||||||
|
ipMonotonicWGapFill,
|
||||||
ipCount
|
ipCount
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -229,7 +232,7 @@ template<> inline const t_config_enum_values& ConfigOptionEnum<InfillPattern>::g
|
|||||||
static t_config_enum_values keys_map;
|
static t_config_enum_values keys_map;
|
||||||
if (keys_map.empty()) {
|
if (keys_map.empty()) {
|
||||||
keys_map["rectilinear"] = ipRectilinear;
|
keys_map["rectilinear"] = ipRectilinear;
|
||||||
keys_map["monotonic"] = ipMonotonic;
|
keys_map["monotonic"] = ipMonotonic;
|
||||||
keys_map["grid"] = ipGrid;
|
keys_map["grid"] = ipGrid;
|
||||||
keys_map["triangles"] = ipTriangles;
|
keys_map["triangles"] = ipTriangles;
|
||||||
keys_map["stars"] = ipStars;
|
keys_map["stars"] = ipStars;
|
||||||
@ -249,6 +252,7 @@ template<> inline const t_config_enum_values& ConfigOptionEnum<InfillPattern>::g
|
|||||||
keys_map["rectiwithperimeter"] = ipRectiWithPerimeter;
|
keys_map["rectiwithperimeter"] = ipRectiWithPerimeter;
|
||||||
keys_map["scatteredrectilinear"]= ipScatteredRectilinear;
|
keys_map["scatteredrectilinear"]= ipScatteredRectilinear;
|
||||||
keys_map["rectilineargapfill"] = ipRectilinearWGapFill;
|
keys_map["rectilineargapfill"] = ipRectilinearWGapFill;
|
||||||
|
keys_map["monotonicgapfill"] = ipMonotonicWGapFill;
|
||||||
keys_map["sawtooth"] = ipSawtooth;
|
keys_map["sawtooth"] = ipSawtooth;
|
||||||
keys_map["adaptivecubic"] = ipAdaptiveCubic;
|
keys_map["adaptivecubic"] = ipAdaptiveCubic;
|
||||||
keys_map["supportcubic"] = ipSupportCubic;
|
keys_map["supportcubic"] = ipSupportCubic;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user