use first_layer_size_compasation for the lslices, so the brims are printed against the real lines.

This commit is contained in:
supermerill 2020-06-21 21:57:28 +02:00
parent 011f9fbe5f
commit 94a4772549
2 changed files with 42 additions and 8 deletions

View File

@ -2435,13 +2435,14 @@ end:
// Merge all regions' slices to get islands, chain them by a shortest path. // Merge all regions' slices to get islands, chain them by a shortest path.
layer->make_slices(); layer->make_slices();
//FIXME: can't make it work in multi-region object, it seems useful to avoid bridge on top of first layer compensation //FIXME: can't make it work in multi-region object, it seems useful to avoid bridge on top of first layer compensation
if (layer->regions().size() == 1 && layer_id == 0 && first_layer_compensation < 0 && m_config.raft_layers == 0) { //so it's disable, if you want an offset, use the offset field.
// The Elephant foot has been compensated, therefore the 1st layer's lslices are shrank with the Elephant foot compensation value. //if (layer->regions().size() == 1 && layer_id == 0 && first_layer_compensation < 0 && m_config.raft_layers == 0) {
// Store the uncompensated value there. // // The Elephant foot has been compensated, therefore the 1st layer's lslices are shrank with the Elephant foot compensation value.
assert(! m_layers.empty()); // // Store the uncompensated value there.
assert(m_layers.front()->id() == 0); // assert(! m_layers.empty());
m_layers.front()->lslices = offset_ex(std::move(m_layers.front()->lslices), -first_layer_compensation); // assert(m_layers.front()->id() == 0);
} // m_layers.front()->lslices = offset_ex(std::move(m_layers.front()->lslices), -first_layer_compensation);
//}
} }
}); });
} }

View File

@ -144,7 +144,7 @@ SCENARIO("Print: Brim generation") {
REQUIRE(print.brim().items_count() == 3); REQUIRE(print.brim().items_count() == 3);
} }
} }
WHEN("Brim is set to 6mm") { WHEN("Brim is set to 6mm") {
config.set_key_value("brim_width", new ConfigOptionFloat(6)); config.set_key_value("brim_width", new ConfigOptionFloat(6));
Print print{}; Print print{};
Slic3r::Test::init_print(print, { m }, model, &config); Slic3r::Test::init_print(print, { m }, model, &config);
@ -153,6 +153,39 @@ SCENARIO("Print: Brim generation") {
REQUIRE(print.brim().items_count() == 6); REQUIRE(print.brim().items_count() == 6);
} }
} }
WHEN("Brim is set to 6mm with 1mm offset") {
config.set_key_value("brim_width", new ConfigOptionFloat(6));
config.set_key_value("brim_offset", new ConfigOptionFloat(1));
Print print{};
Slic3r::Test::init_print(print, { m }, model, &config);
print.process();
THEN("Brim Extrusion collection has 5 loops in it") {
REQUIRE(print.brim().items_count() == 5);
}
}
WHEN("Brim without first layer compensation") {
config.set_key_value("brim_width", new ConfigOptionFloat(2));
config.set_key_value("brim_offset", new ConfigOptionFloat(0));
Print print{};
Slic3r::Test::init_print(print, { m }, model, &config);
print.process();
THEN("First Brim Extrusion has a length of ~88") {
REQUIRE(unscaled(print.brim().entities.front()->length()) > 22*4);
REQUIRE(unscaled(print.brim().entities.front()->length()) < 22*4+1);
}
}
WHEN("Brim with 1mm first layer compensation") {
config.set_key_value("brim_width", new ConfigOptionFloat(2));
config.set_key_value("brim_offset", new ConfigOptionFloat(0));
config.set_key_value("first_layer_size_compensation", new ConfigOptionFloat(-1));
Print print{};
Slic3r::Test::init_print(print, { m }, model, &config);
print.process();
THEN("First Brim Extrusion has a length of ~80") {
REQUIRE(unscaled(print.brim().entities.front()->length()) > 20 * 4);
REQUIRE(unscaled(print.brim().entities.front()->length()) < 20 * 4 + 1);
}
}
WHEN("Brim is set to 6mm, extrusion width 0.5mm") { WHEN("Brim is set to 6mm, extrusion width 0.5mm") {
config.set_key_value("brim_width", new ConfigOptionFloat(6)); config.set_key_value("brim_width", new ConfigOptionFloat(6));
config.set_key_value("first_layer_extrusion_width", new ConfigOptionFloatOrPercent(0.5, false)); config.set_key_value("first_layer_extrusion_width", new ConfigOptionFloatOrPercent(0.5, false));