Experiment: Added a rectilinear monotonic infill without perimeter
connection lines for top / bottom infill patterns. Co-authored-by: lane.wei <lane.wei@bambulab.com>
This commit is contained in:
parent
b14be3ae56
commit
7a9f75ed96
6 changed files with 42 additions and 18 deletions
|
@ -109,6 +109,11 @@ struct SurfaceFill {
|
|||
SurfaceFillParams params;
|
||||
};
|
||||
|
||||
static inline bool fill_type_monotonic(InfillPattern pattern)
|
||||
{
|
||||
return pattern == ipMonotonic || pattern == ipMonotonicLines;
|
||||
}
|
||||
|
||||
std::vector<SurfaceFill> group_fills(const Layer &layer)
|
||||
{
|
||||
std::vector<SurfaceFill> surface_fills;
|
||||
|
@ -137,7 +142,7 @@ std::vector<SurfaceFill> group_fills(const Layer &layer)
|
|||
//FIXME for non-thick bridges, shall we allow a bottom surface pattern?
|
||||
params.pattern = (surface.is_external() && ! is_bridge) ?
|
||||
(surface.is_top() ? region_config.top_fill_pattern.value : region_config.bottom_fill_pattern.value) :
|
||||
region_config.top_fill_pattern == ipMonotonic ? ipMonotonic : ipRectilinear;
|
||||
fill_type_monotonic(region_config.top_fill_pattern) ? ipMonotonic : ipRectilinear;
|
||||
} else if (params.density <= 0)
|
||||
continue;
|
||||
|
||||
|
@ -278,7 +283,7 @@ std::vector<SurfaceFill> group_fills(const Layer &layer)
|
|||
if (internal_solid_fill == nullptr) {
|
||||
// Produce another solid fill.
|
||||
params.extruder = layerm.region().extruder(frSolidInfill);
|
||||
params.pattern = layerm.region().config().top_fill_pattern == ipMonotonic ? ipMonotonic : ipRectilinear;
|
||||
params.pattern = fill_type_monotonic(layerm.region().config().top_fill_pattern) ? ipMonotonic : ipRectilinear;
|
||||
params.density = 100.f;
|
||||
params.extrusion_role = erInternalInfill;
|
||||
params.angle = float(Geometry::deg2rad(layerm.region().config().fill_angle.value));
|
||||
|
|
|
@ -35,6 +35,7 @@ Fill* Fill::new_from_type(const InfillPattern type)
|
|||
case ipRectilinear: return new FillRectilinear();
|
||||
case ipAlignedRectilinear: return new FillAlignedRectilinear();
|
||||
case ipMonotonic: return new FillMonotonic();
|
||||
case ipMonotonicLines: return new FillMonotonicLines();
|
||||
case ipLine: return new FillLine();
|
||||
case ipGrid: return new FillGrid();
|
||||
case ipTriangles: return new FillTriangles();
|
||||
|
|
|
@ -2970,7 +2970,18 @@ Polylines FillMonotonic::fill_surface(const Surface *surface, const FillParams &
|
|||
params2.monotonic = true;
|
||||
Polylines polylines_out;
|
||||
if (! fill_surface_by_lines(surface, params2, 0.f, 0.f, polylines_out))
|
||||
BOOST_LOG_TRIVIAL(error) << "FillMonotonous::fill_surface() failed to fill a region.";
|
||||
BOOST_LOG_TRIVIAL(error) << "FillMonotonic::fill_surface() failed to fill a region.";
|
||||
return polylines_out;
|
||||
}
|
||||
|
||||
Polylines FillMonotonicLines::fill_surface(const Surface *surface, const FillParams ¶ms)
|
||||
{
|
||||
FillParams params2 = params;
|
||||
params2.monotonic = true;
|
||||
params2.anchor_length_max = 0.0f;
|
||||
Polylines polylines_out;
|
||||
if (! fill_surface_by_lines(surface, params2, 0.f, 0.f, polylines_out))
|
||||
BOOST_LOG_TRIVIAL(error) << "FillMonotonicLines::fill_surface() failed to fill a region.";
|
||||
return polylines_out;
|
||||
}
|
||||
|
||||
|
|
|
@ -49,6 +49,15 @@ public:
|
|||
bool no_sort() const override { return true; }
|
||||
};
|
||||
|
||||
class FillMonotonicLines : public FillRectilinear
|
||||
{
|
||||
public:
|
||||
Fill* clone() const override { return new FillMonotonicLines(*this); }
|
||||
~FillMonotonicLines() override = default;
|
||||
Polylines fill_surface(const Surface *surface, const FillParams ¶ms) override;
|
||||
bool no_sort() const override { return true; }
|
||||
};
|
||||
|
||||
class FillGrid : public FillRectilinear
|
||||
{
|
||||
public:
|
||||
|
|
|
@ -93,6 +93,7 @@ CONFIG_OPTION_ENUM_DEFINE_STATIC_MAPS(FuzzySkinType)
|
|||
static const t_config_enum_values s_keys_map_InfillPattern {
|
||||
{ "rectilinear", ipRectilinear },
|
||||
{ "monotonic", ipMonotonic },
|
||||
{ "monotoniclines", ipMonotonicLines },
|
||||
{ "alignedrectilinear", ipAlignedRectilinear },
|
||||
{ "grid", ipGrid },
|
||||
{ "triangles", ipTriangles },
|
||||
|
@ -716,20 +717,17 @@ void PrintConfigDef::init_fff_params()
|
|||
def->tooltip = L("Fill pattern for top infill. This only affects the top visible layer, and not its adjacent solid shells.");
|
||||
def->cli = "top-fill-pattern|external-fill-pattern|solid-fill-pattern";
|
||||
def->enum_keys_map = &ConfigOptionEnum<InfillPattern>::get_enum_values();
|
||||
def->enum_values.push_back("rectilinear");
|
||||
def->enum_values.push_back("monotonic");
|
||||
def->enum_values.push_back("alignedrectilinear");
|
||||
def->enum_values.push_back("concentric");
|
||||
def->enum_values.push_back("hilbertcurve");
|
||||
def->enum_values.push_back("archimedeanchords");
|
||||
def->enum_values.push_back("octagramspiral");
|
||||
def->enum_labels.push_back(L("Rectilinear"));
|
||||
def->enum_labels.push_back(L("Monotonic"));
|
||||
def->enum_labels.push_back(L("Aligned Rectilinear"));
|
||||
def->enum_labels.push_back(L("Concentric"));
|
||||
def->enum_labels.push_back(L("Hilbert Curve"));
|
||||
def->enum_labels.push_back(L("Archimedean Chords"));
|
||||
def->enum_labels.push_back(L("Octagram Spiral"));
|
||||
def->set_enum_values({
|
||||
{ "rectilinear", L("Rectilinear") },
|
||||
{ "monotonic", L("Monotonic") },
|
||||
{ "monotoniclines", L("Monotonic Lines") },
|
||||
{ "alignedrectilinear", L("Aligned Rectilinear") },
|
||||
{ "concentric", L("Concentric") },
|
||||
{ "hilbertcurve", L("Hilbert Curve") },
|
||||
{ "archimedeanchords", L("Archimedean Chords") },
|
||||
{ "octagramspiral", L("Octagram Spiral") }
|
||||
});
|
||||
|
||||
// solid_fill_pattern is an obsolete equivalent to top_fill_pattern/bottom_fill_pattern.
|
||||
def->aliases = { "solid_fill_pattern", "external_fill_pattern" };
|
||||
def->set_default_value(new ConfigOptionEnum<InfillPattern>(ipMonotonic));
|
||||
|
|
|
@ -56,7 +56,7 @@ enum class FuzzySkinType {
|
|||
};
|
||||
|
||||
enum InfillPattern : int {
|
||||
ipRectilinear, ipMonotonic, ipAlignedRectilinear, ipGrid, ipTriangles, ipStars, ipCubic, ipLine, ipConcentric, ipHoneycomb, ip3DHoneycomb,
|
||||
ipRectilinear, ipMonotonic, ipMonotonicLines, ipAlignedRectilinear, ipGrid, ipTriangles, ipStars, ipCubic, ipLine, ipConcentric, ipHoneycomb, ip3DHoneycomb,
|
||||
ipGyroid, ipHilbertCurve, ipArchimedeanChords, ipOctagramSpiral, ipAdaptiveCubic, ipSupportCubic, ipSupportBase,
|
||||
ipLightning,
|
||||
ipCount,
|
||||
|
|
Loading…
Add table
Reference in a new issue