mirror of
https://github.com/OrcaSlicer/OrcaSlicer.git
synced 2026-09-11 02:57:39 +00:00
Fix brim first layer speed (#14616)
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
This commit is contained in:
@@ -6613,8 +6613,9 @@ std::string GCode::_extrude(const ExtrusionPath &path, std::string description,
|
|||||||
//BBS: for solid infill of first layer, speed can be higher as long as
|
//BBS: for solid infill of first layer, speed can be higher as long as
|
||||||
//wall lines have be attached
|
//wall lines have be attached
|
||||||
if (path.role() != erBottomSurface) {
|
if (path.role() != erBottomSurface) {
|
||||||
speed = is_perimeter(path.role()) ? NOZZLE_CONFIG(initial_layer_speed) :
|
const bool use_first_layer_speed = is_perimeter(path.role()) || path.role() == erBrim;
|
||||||
NOZZLE_CONFIG(initial_layer_infill_speed);
|
speed = use_first_layer_speed ? NOZZLE_CONFIG(initial_layer_speed) :
|
||||||
|
NOZZLE_CONFIG(initial_layer_infill_speed);
|
||||||
}
|
}
|
||||||
} else if (m_config.slow_down_layers > 1 && m_config.raft_layers == 0) {
|
} else if (m_config.slow_down_layers > 1 && m_config.raft_layers == 0) {
|
||||||
|
|
||||||
|
|||||||
@@ -191,6 +191,24 @@ SCENARIO("Brim has the configured number of loops", "[SkirtBrim]") {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static double first_extrusion_feedrate_for_feature(const std::string &gcode, const std::string_view feature)
|
||||||
|
{
|
||||||
|
double feedrate = 0.0;
|
||||||
|
bool feature_active = false;
|
||||||
|
GCodeReader parser;
|
||||||
|
parser.parse_buffer(gcode, [&feedrate, &feature_active, feature] (GCodeReader &self, const GCodeReader::GCodeLine &line) {
|
||||||
|
const std::string_view comment = line.comment();
|
||||||
|
if (comment.find("FEATURE:") != std::string_view::npos || comment.find("TYPE:") != std::string_view::npos)
|
||||||
|
feature_active = comment.find(feature) != std::string_view::npos;
|
||||||
|
|
||||||
|
if (feature_active && line.extruding(self) && line.dist_XY(self) > 0) {
|
||||||
|
feedrate = line.new_F(self);
|
||||||
|
self.quit_parsing();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
return feedrate;
|
||||||
|
}
|
||||||
|
|
||||||
TEST_CASE("Skirt height is honored", "[SkirtBrim]") {
|
TEST_CASE("Skirt height is honored", "[SkirtBrim]") {
|
||||||
DynamicPrintConfig config = DynamicPrintConfig::full_print_config();
|
DynamicPrintConfig config = DynamicPrintConfig::full_print_config();
|
||||||
config.set_deserialize_strict({
|
config.set_deserialize_strict({
|
||||||
@@ -210,6 +228,31 @@ TEST_CASE("Skirt height is honored", "[SkirtBrim]") {
|
|||||||
REQUIRE(layers_with_role(gcode, "skirt").size() == (size_t) config.opt_int("skirt_height"));
|
REQUIRE(layers_with_role(gcode, "skirt").size() == (size_t) config.opt_int("skirt_height"));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
TEST_CASE("Brim uses first layer speed", "[SkirtBrim]") {
|
||||||
|
DynamicPrintConfig config = Slic3r::DynamicPrintConfig::full_print_config();
|
||||||
|
config.set_deserialize_strict({
|
||||||
|
{ "brim_type", "outer_only" },
|
||||||
|
{ "brim_width", 5 },
|
||||||
|
{ "gcode_comments", true },
|
||||||
|
{ "initial_layer_speed", 10 },
|
||||||
|
{ "initial_layer_infill_speed", 20 },
|
||||||
|
{ "machine_start_gcode", "" },
|
||||||
|
{ "skirt_loops", 0 },
|
||||||
|
{ "slow_down_for_layer_cooling", false },
|
||||||
|
{ "z_hop", 0 }
|
||||||
|
});
|
||||||
|
|
||||||
|
const std::string gcode = Slic3r::Test::slice({TestMesh::cube_20x20x20}, config);
|
||||||
|
|
||||||
|
const double brim_feedrate = first_extrusion_feedrate_for_feature(gcode, "Brim");
|
||||||
|
REQUIRE(brim_feedrate > 0.0);
|
||||||
|
REQUIRE_THAT(brim_feedrate, Catch::Matchers::WithinAbs(600.0, 1e-3));
|
||||||
|
|
||||||
|
const double bottom_surface_feedrate = first_extrusion_feedrate_for_feature(gcode, "Bottom surface");
|
||||||
|
REQUIRE(bottom_surface_feedrate > 0.0);
|
||||||
|
REQUIRE_THAT(bottom_surface_feedrate, Catch::Matchers::WithinAbs(1200.0, 1e-3));
|
||||||
|
}
|
||||||
|
|
||||||
SCENARIO("Skirt and brim generation", "[SkirtBrim]") {
|
SCENARIO("Skirt and brim generation", "[SkirtBrim]") {
|
||||||
GIVEN("A default configuration") {
|
GIVEN("A default configuration") {
|
||||||
DynamicPrintConfig config = DynamicPrintConfig::full_print_config();
|
DynamicPrintConfig config = DynamicPrintConfig::full_print_config();
|
||||||
|
|||||||
Reference in New Issue
Block a user