Skip to content

Commit 441febc

Browse files
Merge 96f4a7b into 0ed96db
2 parents 0ed96db + 96f4a7b commit 441febc

File tree

4 files changed

+46
-12
lines changed

4 files changed

+46
-12
lines changed

src/test/libslic3r/test_skirt_brim.cpp

Lines changed: 38 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -71,12 +71,12 @@ SCENARIO("Original Slic3r Skirt/Brim tests", "[!mayfail]") {
7171
Slic3r::Model model;
7272
auto gcode {std::stringstream("")};
7373
gcode.clear();
74+
const double used_layer_height = 0.01;
7475
GIVEN("A default configuration") {
7576
auto config {Config::new_from_defaults()};
7677
config->set("support_material_speed", 99);
77-
config->set("first_layer_height", 0.3);
78+
config->set("first_layer_height", used_layer_height);
7879
config->set("gcode_comments", true);
79-
8080
// avoid altering speeds unexpectedly
8181
config->set("cooling", false);
8282
config->set("first_layer_speed", "100%");
@@ -88,21 +88,55 @@ SCENARIO("Original Slic3r Skirt/Brim tests", "[!mayfail]") {
8888
config->set("perimeters", 0);
8989
config->set("skirts", 0);
9090
config->set("brim_width", 5);
91+
config->set("interior_brim_width", 0);
92+
config->set("brim_connections_width", 0);
93+
config->set("first_layer_extrusion_width", 0.10);
94+
config->set("extrusion_width", 0.10);
95+
config->set("nozzle_diameter", "0.05");
96+
THEN("Configuration is sane.") {
97+
REQUIRE(config->get<ConfigOptionFloatOrPercent>("first_layer_extrusion_width").get_abs_value(used_layer_height) > 0.05);
98+
REQUIRE(used_layer_height < 0.05);
99+
}
91100
THEN("Brim is generated") {
92101
auto print {Slic3r::Test::init_print({TestMesh::cube_20x20x20}, model, config)};
93102
Slic3r::Test::gcode(gcode, print);
94103
bool brim_generated = false;
95104
auto support_speed = config->get<ConfigOptionFloat>("support_material_speed") * MM_PER_MIN;
96-
parser.parse_stream(gcode, [&brim_generated, support_speed] (Slic3r::GCodeReader& self, const Slic3r::GCodeReader::GCodeLine& line)
105+
parser.parse_stream(gcode, [&brim_generated, support_speed, used_layer_height] (Slic3r::GCodeReader& self, const Slic3r::GCodeReader::GCodeLine& line)
97106
{
98-
if (self.Z == Approx(0.3) || line.new_Z() == Approx(0.3)) {
107+
if (self.Z == Approx(used_layer_height) || line.new_Z() == Approx(used_layer_height)) {
99108
if (line.extruding() && self.F == Approx(support_speed)) {
100109
brim_generated = true;
101110
}
102111
}
103112
});
104113
REQUIRE(brim_generated);
105114
}
115+
THEN("Brim width is 5mm around the object.") {
116+
auto print {Slic3r::Test::init_print({TestMesh::cube_20x20x20}, model, config, false, Slic3r::Pointf(0, 0))};
117+
Slic3r::Test::gcode(gcode, print);
118+
double max_x = 0, min_x = 0, max_y = 0, min_y = 0;
119+
auto support_speed = config->get<ConfigOptionFloat>("support_material_speed") * MM_PER_MIN;
120+
auto line_width = config->get<ConfigOptionFloatOrPercent>("first_layer_extrusion_width").get_abs_value(used_layer_height);
121+
auto brim = config->get<ConfigOptionFloat>("brim_width");
122+
parser.parse_stream(gcode, [&max_x, &max_y, &min_x, &min_y, line_width, support_speed, used_layer_height] (Slic3r::GCodeReader& self, const Slic3r::GCodeReader::GCodeLine& line)
123+
{
124+
if (self.Z == Approx(used_layer_height) || line.new_Z() == Approx(used_layer_height)) {
125+
if (line.extruding() && self.F == Approx(support_speed)) {
126+
max_x = std::max(double(self.X), max_x);
127+
min_x = std::min(double(self.X), min_x);
128+
max_y = std::max(double(self.Y), max_y);
129+
min_y = std::min(double(self.Y), min_y);
130+
}
131+
}
132+
});
133+
// match the centerline of our extrusion min/max, should be very close to +/-15mm
134+
REQUIRE(max_x == Approx(15.0-(line_width / 2.0)).epsilon(line_width * 0.01));
135+
REQUIRE(max_y == Approx(15.0-(line_width / 2.0)).epsilon(line_width * 0.01));
136+
REQUIRE(min_x == Approx(-15.0+(line_width / 2.0)).epsilon(line_width * 0.01));
137+
REQUIRE(min_y == Approx(-15.0+(line_width / 2.0)).epsilon(line_width * 0.01));
138+
}
139+
106140
}
107141

108142
WHEN("Skirt area is smaller than the brim") {

src/test/test_data.cpp

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -201,7 +201,7 @@ TriangleMesh mesh(TestMesh m) {
201201
}
202202

203203

204-
shared_Print init_print(std::initializer_list<TestMesh> meshes, Slic3r::Model& model, config_ptr _config, bool comments) {
204+
shared_Print init_print(std::initializer_list<TestMesh> meshes, Slic3r::Model& model, config_ptr _config, bool comments, Slic3r::Pointf center) {
205205
auto config {Slic3r::Config::new_from_defaults()};
206206
config->apply(_config);
207207

@@ -224,7 +224,7 @@ shared_Print init_print(std::initializer_list<TestMesh> meshes, Slic3r::Model& m
224224
}
225225

226226
model.arrange_objects(print->config.min_object_distance());
227-
model.center_instances_around_point(Slic3r::Pointf(100,100));
227+
model.center_instances_around_point(center);
228228
for (auto* mo : model.objects) {
229229
print->auto_assign_extruders(mo);
230230
print->add_model_object(mo);
@@ -234,7 +234,7 @@ shared_Print init_print(std::initializer_list<TestMesh> meshes, Slic3r::Model& m
234234

235235
return print;
236236
}
237-
shared_Print init_print(std::initializer_list<TriangleMesh> meshes, Slic3r::Model& model, config_ptr _config, bool comments) {
237+
shared_Print init_print(std::initializer_list<TriangleMesh> meshes, Slic3r::Model& model, config_ptr _config, bool comments, Slic3r::Pointf center) {
238238
auto config {Slic3r::Config::new_from_defaults()};
239239
config->apply(_config);
240240

@@ -257,7 +257,7 @@ shared_Print init_print(std::initializer_list<TriangleMesh> meshes, Slic3r::Mode
257257
}
258258

259259
model.arrange_objects(print->config.min_object_distance());
260-
model.center_instances_around_point(Slic3r::Pointf(100,100));
260+
model.center_instances_around_point(center);
261261
for (auto* mo : model.objects) {
262262
print->auto_assign_extruders(mo);
263263
print->add_model_object(mo);

src/test/test_data.hpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -65,8 +65,8 @@ bool _equiv(const T& a, const T& b, double epsilon) { return abs(a - b) < epsilo
6565

6666
Slic3r::Model model(const std::string& model_name, TriangleMesh&& _mesh);
6767

68-
shared_Print init_print(std::initializer_list<TestMesh> meshes, Slic3r::Model& model, config_ptr _config = Slic3r::Config::new_from_defaults(), bool comments = false);
69-
shared_Print init_print(std::initializer_list<TriangleMesh> meshes, Slic3r::Model& model, config_ptr _config = Slic3r::Config::new_from_defaults(), bool comments = false);
68+
shared_Print init_print(std::initializer_list<TestMesh> meshes, Slic3r::Model& model, config_ptr _config = Slic3r::Config::new_from_defaults(), bool comments = false, Slic3r::Pointf center = Slic3r::Pointf(100,100));
69+
shared_Print init_print(std::initializer_list<TriangleMesh> meshes, Slic3r::Model& model, config_ptr _config = Slic3r::Config::new_from_defaults(), bool comments = false, Slic3r::Pointf center = Slic3r::Pointf(100,100));
7070

7171
void gcode(std::stringstream& gcode, shared_Print print);
7272

xs/src/libslic3r/Print.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1118,7 +1118,7 @@ Print::_make_brim()
11181118

11191119
Polygons loops;
11201120
const int num_loops = floor(this->config.brim_width / flow.width + 0.5);
1121-
for (int i = num_loops; i >= 1; --i) {
1121+
for (int i = num_loops+1; i >= 1; --i) {
11221122
// JT_SQUARE ensures no vertex is outside the given offset distance
11231123
// -0.5 because islands are not represented by their centerlines
11241124
// (first offset more, then step back - reverse order than the one used for
@@ -1127,7 +1127,7 @@ Print::_make_brim()
11271127
islands,
11281128
flow.scaled_width() + flow.scaled_spacing() * (i - 1.5 + 0.5),
11291129
flow.scaled_spacing() * -0.525, // WORKAROUND for brim placement, original 0.5 leaves too much of a gap.
1130-
100000,
1130+
CLIPPER_OFFSET_SCALE,
11311131
ClipperLib::jtSquare
11321132
));
11331133
}

0 commit comments

Comments
 (0)