ENH: Improve CrossHatch transation layers
jira: 6701 Change name from Flippingline to CrossHatch. Reduce noise, improve speed by 6.5%. Improve transation layers by gradually increasing rotation angle and overshoot the transation layer while direction changed. Change-Id: I17fcc45b409074d121bf5bb5702e15553d925b51
This commit is contained in:
parent
1bd02c6aa6
commit
6540855ff7
Before Width: | Height: | Size: 18 KiB After Width: | Height: | Size: 18 KiB |
|
@ -84,8 +84,8 @@ set(lisbslic3r_sources
|
|||
Fill/FillConcentric.hpp
|
||||
Fill/FillConcentricInternal.cpp
|
||||
Fill/FillConcentricInternal.hpp
|
||||
Fill/FillFlippingLine.cpp
|
||||
Fill/FillFlippingLine.hpp
|
||||
Fill/FillCrossHatch.cpp
|
||||
Fill/FillCrossHatch.hpp
|
||||
Fill/FillHoneycomb.cpp
|
||||
Fill/FillHoneycomb.hpp
|
||||
Fill/FillGyroid.cpp
|
||||
|
|
|
@ -23,7 +23,7 @@
|
|||
#include "FillLightning.hpp"
|
||||
// BBS: new infill pattern header
|
||||
#include "FillConcentricInternal.hpp"
|
||||
#include "FillFlippingLine.hpp"
|
||||
#include "FillCrossHatch.hpp"
|
||||
|
||||
// #define INFILL_DEBUG_OUTPUT
|
||||
|
||||
|
@ -38,7 +38,7 @@ Fill* Fill::new_from_type(const InfillPattern type)
|
|||
case ipGyroid: return new FillGyroid();
|
||||
case ipRectilinear: return new FillRectilinear();
|
||||
case ipAlignedRectilinear: return new FillAlignedRectilinear();
|
||||
case ipFlippingLine: return new FillFlippingLine();
|
||||
case ipCrossHatch: return new FillCrossHatch();
|
||||
case ipMonotonic: return new FillMonotonic();
|
||||
case ipLine: return new FillLine();
|
||||
case ipGrid: return new FillGrid();
|
||||
|
|
|
@ -2,14 +2,14 @@
|
|||
#include "../ShortestPath.hpp"
|
||||
#include "../Surface.hpp"
|
||||
|
||||
#include "FillFlippingLine.hpp"
|
||||
#include "FillCrossHatch.hpp"
|
||||
|
||||
namespace Slic3r {
|
||||
|
||||
// FlipLines Infill: Enhances 3D Printing Speed & Reduces Noise
|
||||
// FlipLines, as its name hints, alternates line direction by 90 degrees every few layers to improve adhesion.
|
||||
// CrossHatch Infill: Enhances 3D Printing Speed & Reduces Noise
|
||||
// CrossHatch, as its name hints, alternates line direction by 90 degrees every few layers to improve adhesion.
|
||||
// It introduces transform layers between direction shifts for better line cohesion, which fixes the weakness of line infill.
|
||||
// The transform technique is inspired by David Eccles, improved 3D honeycomb but also a more flexible implementation.
|
||||
// The transform technique is inspired by David Eccles, improved 3D honeycomb but we made a more flexible implementation.
|
||||
// This method notably increases printing speed, meeting the demands of modern high-speed 3D printers, and reduces noise for most layers.
|
||||
// By Bambu Lab
|
||||
|
||||
|
@ -22,15 +22,6 @@ namespace Slic3r {
|
|||
* \ /
|
||||
* o---o
|
||||
* p1 p2 p3 p4
|
||||
*
|
||||
* // X1 = progress * (1/8) * period
|
||||
* // X2 = ( (1/2 - progress) * (1/8) ) * period
|
||||
* // X3 = X1 + (1/2) * period
|
||||
* // X4 = ( (1 - progress) * (1/8) ) * period
|
||||
* // Y1 = X1
|
||||
* // Y2 = X1
|
||||
* // Y3 = -X1
|
||||
* // Y4 = -X1
|
||||
*/
|
||||
|
||||
static Pointfs generate_one_cycle(double progress, coordf_t period)
|
||||
|
@ -38,10 +29,10 @@ static Pointfs generate_one_cycle(double progress, coordf_t period)
|
|||
Pointfs out;
|
||||
double offset = progress * 1. / 8. * period;
|
||||
out.reserve(4);
|
||||
out.push_back(Vec2d(offset, offset));
|
||||
out.push_back(Vec2d(0.5 * period - offset, offset));
|
||||
out.push_back(Vec2d(0.5 * period + offset, -offset));
|
||||
out.push_back(Vec2d(1. * period - offset, -offset));
|
||||
out.push_back(Vec2d(0.25 * period - offset, offset));
|
||||
out.push_back(Vec2d(0.25 * period + offset, offset));
|
||||
out.push_back(Vec2d(0.75 * period - offset, -offset));
|
||||
out.push_back(Vec2d(0.75 * period + offset, -offset));
|
||||
return out;
|
||||
}
|
||||
|
||||
|
@ -154,8 +145,9 @@ static Polylines generate_repeat_pattern(int direction, coordf_t grid_size, coor
|
|||
static Polylines generate_infill_layers(coordf_t z_height, double repeat_ratio, coordf_t grid_size, coordf_t width, coordf_t height)
|
||||
{
|
||||
Polylines result;
|
||||
coordf_t trans_layer_size = grid_size * 0.3; // upper.
|
||||
coordf_t trans_layer_size = grid_size * 0.4; // upper.
|
||||
coordf_t repeat_layer_size = grid_size * repeat_ratio; // lower.
|
||||
z_height += repeat_layer_size / 2; // offset to improve first few layer strength
|
||||
coordf_t period = trans_layer_size + repeat_layer_size;
|
||||
coordf_t remains = z_height - std::floor(z_height / period) * period;
|
||||
coordf_t trans_z = remains - repeat_layer_size; // put repeat layer first.
|
||||
|
@ -174,15 +166,15 @@ static Polylines generate_infill_layers(coordf_t z_height, double repeat_ratio,
|
|||
|
||||
// split the progress to forward and backward, with a opposite direction.
|
||||
if (progress < 0.5)
|
||||
result = generate_transform_pattern(progress * 2, direction, grid_size, width, height);
|
||||
result = generate_transform_pattern((progress + 0.1) * 2, direction, grid_size, width, height); // increase overlapping.
|
||||
else
|
||||
result = generate_transform_pattern((1 - progress) * 2, -1 * direction, grid_size, width, height);
|
||||
result = generate_transform_pattern((1.1 - progress) * 2, -1 * direction, grid_size, width, height);
|
||||
}
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
void FillFlippingLine ::_fill_surface_single(
|
||||
void FillCrossHatch ::_fill_surface_single(
|
||||
const FillParams ¶ms, unsigned int thickness_layers, const std::pair<float, Point> &direction, ExPolygon expolygon, Polylines &polylines_out)
|
||||
{
|
||||
// rotate angle
|
|
@ -1,5 +1,5 @@
|
|||
#ifndef slic3r_FillFlippingLines_hpp_
|
||||
#define slic3r_FillFlippingLines_hpp_
|
||||
#ifndef slic3r_FillCrossHatch_hpp_
|
||||
#define slic3r_FillCrossHatch_hpp_
|
||||
|
||||
#include <map>
|
||||
|
||||
|
@ -9,11 +9,11 @@
|
|||
|
||||
namespace Slic3r {
|
||||
|
||||
class FillFlippingLine : public Fill
|
||||
class FillCrossHatch : public Fill
|
||||
{
|
||||
public:
|
||||
Fill *clone() const override { return new FillFlippingLine(*this); };
|
||||
~FillFlippingLine() override {}
|
||||
Fill *clone() const override { return new FillCrossHatch(*this); };
|
||||
~FillCrossHatch() override {}
|
||||
|
||||
protected:
|
||||
void _fill_surface_single(
|
||||
|
@ -26,4 +26,4 @@ protected:
|
|||
|
||||
} // namespace Slic3r
|
||||
|
||||
#endif // slic3r_FillFlippingLines_hpp_
|
||||
#endif // slic3r_FillCrossHatch_hpp_
|
|
@ -135,7 +135,7 @@ static t_config_enum_values s_keys_map_InfillPattern {
|
|||
{ "octagramspiral", ipOctagramSpiral },
|
||||
{ "supportcubic", ipSupportCubic },
|
||||
{ "lightning", ipLightning },
|
||||
{ "flippingline", ipFlippingLine}
|
||||
{ "crosshatch", ipCrossHatch}
|
||||
};
|
||||
CONFIG_OPTION_ENUM_DEFINE_STATIC_MAPS(InfillPattern)
|
||||
|
||||
|
@ -1603,7 +1603,7 @@ void PrintConfigDef::init_fff_params()
|
|||
def->enum_values.push_back("octagramspiral");
|
||||
def->enum_values.push_back("supportcubic");
|
||||
def->enum_values.push_back("lightning");
|
||||
def->enum_values.push_back("flippingline");
|
||||
def->enum_values.push_back("crosshatch");
|
||||
def->enum_labels.push_back(L("Concentric"));
|
||||
def->enum_labels.push_back(L("Rectilinear"));
|
||||
def->enum_labels.push_back(L("Grid"));
|
||||
|
@ -1621,7 +1621,7 @@ void PrintConfigDef::init_fff_params()
|
|||
def->enum_labels.push_back(L("Octagram Spiral"));
|
||||
def->enum_labels.push_back(L("Support Cubic"));
|
||||
def->enum_labels.push_back(L("Lightning"));
|
||||
def->enum_labels.push_back(L("Flipping Line"));
|
||||
def->enum_labels.push_back(L("Cross Hatch"));
|
||||
def->set_default_value(new ConfigOptionEnum<InfillPattern>(ipCubic));
|
||||
|
||||
def = this->add("top_surface_acceleration", coFloat);
|
||||
|
|
|
@ -54,8 +54,8 @@ enum AuthorizationType {
|
|||
enum InfillPattern : int {
|
||||
ipConcentric, ipRectilinear, ipGrid, ipLine, ipCubic, ipTriangles, ipStars, ipGyroid, ipHoneycomb, ipAdaptiveCubic, ipMonotonic, ipMonotonicLine, ipAlignedRectilinear, ip3DHoneycomb,
|
||||
ipHilbertCurve, ipArchimedeanChords, ipOctagramSpiral, ipSupportCubic, ipSupportBase, ipConcentricInternal,
|
||||
ipLightning, ipFlippingLine,
|
||||
ipCount,
|
||||
ipLightning, ipCrossHatch,
|
||||
ipCount,
|
||||
};
|
||||
|
||||
enum class IroningType {
|
||||
|
|
|
@ -2217,7 +2217,7 @@ void PrintObject::bridge_over_infill()
|
|||
// Check it the infill that require a fixed infill angle.
|
||||
switch (dominant_pattern) {
|
||||
case ip3DHoneycomb:
|
||||
case ipFlippingLine:
|
||||
case ipCrossHatch:
|
||||
return (infill_direction + 45.0) * 2.0 * M_PI / 360.;
|
||||
default: break;
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue