Skip to content

Commit c468d03

Browse files
authored
Merge branch 'main' into CURA-12352_different-minimum-layer-time-for-layers-that-contain-overhangs
2 parents a98e7d0 + a7e6fa0 commit c468d03

File tree

3 files changed

+37
-22
lines changed

3 files changed

+37
-22
lines changed

include/PathOrderOptimizer.h

Lines changed: 13 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -738,29 +738,26 @@ class PathOrderOptimizer
738738

739739
BestElementFinder::WeighedCriterion main_criterion;
740740

741-
if (path.force_start_index_.has_value()) // Actually handles EZSeamType::USER_SPECIFIED
741+
if (path.force_start_index_.has_value()) // Handles EZSeamType::USER_SPECIFIED with "seam_on_vertex" disabled
742742
{
743743
// Use a much smaller distance divider because we want points around the forced points to be filtered out very easily
744744
constexpr double distance_divider = 1.0;
745745
constexpr auto distance_type = DistanceScoringCriterion::DistanceType::Euclidian;
746746
main_criterion.criterion = std::make_shared<DistanceScoringCriterion>(points, points.at(path.force_start_index_.value()), distance_type, distance_divider);
747747
}
748-
else
748+
else if (path.seam_config_.type_ == EZSeamType::SHORTEST || path.seam_config_.type_ == EZSeamType::USER_SPECIFIED)
749749
{
750-
if (path.seam_config_.type_ == EZSeamType::SHORTEST)
751-
{
752-
main_criterion.criterion = std::make_shared<DistanceScoringCriterion>(points, target_pos);
753-
}
754-
else if (
755-
path.seam_config_.type_ == EZSeamType::SHARPEST_CORNER
756-
&& (path.seam_config_.corner_pref_ != EZSeamCornerPrefType::Z_SEAM_CORNER_PREF_NONE && path.seam_config_.corner_pref_ != EZSeamCornerPrefType::PLUGIN))
757-
{
758-
main_criterion.criterion = std::make_shared<CornerScoringCriterion>(points, path.seam_config_.corner_pref_);
759-
}
760-
else if (path.seam_config_.type_ == EZSeamType::RANDOM)
761-
{
762-
main_criterion.criterion = std::make_shared<RandomScoringCriterion>();
763-
}
750+
main_criterion.criterion = std::make_shared<DistanceScoringCriterion>(points, target_pos);
751+
}
752+
else if (
753+
path.seam_config_.type_ == EZSeamType::SHARPEST_CORNER
754+
&& (path.seam_config_.corner_pref_ != EZSeamCornerPrefType::Z_SEAM_CORNER_PREF_NONE && path.seam_config_.corner_pref_ != EZSeamCornerPrefType::PLUGIN))
755+
{
756+
main_criterion.criterion = std::make_shared<CornerScoringCriterion>(points, path.seam_config_.corner_pref_);
757+
}
758+
else if (path.seam_config_.type_ == EZSeamType::RANDOM)
759+
{
760+
main_criterion.criterion = std::make_shared<RandomScoringCriterion>();
764761
}
765762

766763
if (main_criterion.criterion)

src/FffGcodeWriter.cpp

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1172,6 +1172,7 @@ FffGcodeWriter::ProcessLayerResult FffGcodeWriter::processLayer(const SliceDataS
11721172

11731173
const Scene& scene = Application::getInstance().current_slice_->scene;
11741174

1175+
coord_t comb_offset_from_outlines = 0;
11751176
coord_t avoid_distance = 0; // minimal avoid distance is zero
11761177
const std::vector<bool> extruder_is_used = storage.getExtrudersUsed();
11771178
for (size_t extruder_nr = 0; extruder_nr < scene.extruders.size(); extruder_nr++)
@@ -1184,6 +1185,8 @@ FffGcodeWriter::ProcessLayerResult FffGcodeWriter::processLayer(const SliceDataS
11841185
{
11851186
avoid_distance = std::max(avoid_distance, extruder.settings_.get<coord_t>("travel_avoid_distance"));
11861187
}
1188+
1189+
comb_offset_from_outlines = std::max(comb_offset_from_outlines, extruder.settings_.get<coord_t>("retraction_combing_avoid_distance"));
11871190
}
11881191
}
11891192

@@ -1199,7 +1202,6 @@ FffGcodeWriter::ProcessLayerResult FffGcodeWriter::processLayer(const SliceDataS
11991202
}
12001203
max_inner_wall_width = std::max(max_inner_wall_width, mesh_inner_wall_width);
12011204
}
1202-
const coord_t comb_offset_from_outlines = max_inner_wall_width * 2;
12031205

12041206
const size_t first_extruder = findUsedExtruderIndex(storage, layer_nr, false);
12051207

src/LayerPlan.cpp

Lines changed: 21 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -196,10 +196,10 @@ Shape LayerPlan::computeCombBoundary(const CombBoundary boundary_type)
196196
switch (boundary_type)
197197
{
198198
case CombBoundary::MINIMUM:
199-
offset = -mesh.settings.get<coord_t>("machine_nozzle_size") / 2 - mesh.settings.get<coord_t>("wall_line_width_0") / 2 - extra_offset;
199+
offset = -(mesh.settings.get<coord_t>("machine_nozzle_size") / 2 + mesh.settings.get<coord_t>("wall_line_width_0") / 2 + extra_offset);
200200
break;
201201
case CombBoundary::PREFERRED:
202-
offset = -mesh.settings.get<coord_t>("machine_nozzle_size") * 3 / 2 - mesh.settings.get<coord_t>("wall_line_width_0") / 2 - extra_offset;
202+
offset = -(mesh.settings.get<coord_t>("retraction_combing_avoid_distance") + mesh.settings.get<coord_t>("wall_line_width_0") / 2 + extra_offset);
203203
break;
204204
default:
205205
offset = 0;
@@ -2676,8 +2676,24 @@ void LayerPlan::writeGCode(GCodeExport& gcode)
26762676
{
26772677
ExtruderPlan& extruder_plan = extruder_plans_[extruder_plan_idx];
26782678

2679-
const RetractionAndWipeConfig* retraction_config
2680-
= current_mesh ? &current_mesh->retraction_wipe_config : &storage_.retraction_wipe_config_per_extruder[extruder_plan.extruder_nr_];
2679+
auto get_retraction_config = [&extruder_nr, this](std::shared_ptr<const SliceMeshStorage>& mesh) -> std::optional<const RetractionAndWipeConfig*>
2680+
{
2681+
if (mesh)
2682+
{
2683+
if (extruder_nr == mesh->settings.get<size_t>("extruder_nr")) [[likely]]
2684+
{
2685+
return &mesh->retraction_wipe_config;
2686+
}
2687+
2688+
// We are printing a part of a mesh with a different extruder, use this extruder settings instead (mesh-specific settings will be ignored)
2689+
return &storage_.retraction_wipe_config_per_extruder[extruder_nr];
2690+
}
2691+
2692+
// We have no mesh yet, a more global config should be used
2693+
return std::nullopt;
2694+
};
2695+
2696+
const RetractionAndWipeConfig* retraction_config = get_retraction_config(current_mesh).value_or(&storage_.retraction_wipe_config_per_extruder[extruder_plan.extruder_nr_]);
26812697
coord_t z_hop_height = retraction_config->retraction_config.zHop;
26822698

26832699
if (extruder_nr != extruder_plan.extruder_nr_)
@@ -2861,7 +2877,7 @@ void LayerPlan::writeGCode(GCodeExport& gcode)
28612877

28622878
if (path.retract)
28632879
{
2864-
retraction_config = path.mesh ? &path.mesh->retraction_wipe_config : retraction_config;
2880+
retraction_config = get_retraction_config(path.mesh).value_or(retraction_config);
28652881
gcode.writeRetraction(retraction_config->retraction_config);
28662882
if (path.retract_for_nozzle_switch)
28672883
{

0 commit comments

Comments
 (0)