@@ -58,10 +58,17 @@ void SkirtBrimAppender::process(PrintPlan* print_plan)
58
58
const std::map<ExtruderNumber, ExtruderConfig> extruders_configs = generateExtrudersConfigs (used_extruders, adhesion_type);
59
59
const size_t height = calculateMaxHeight (extruders_configs, adhesion_type);
60
60
61
- std::map<ExtruderNumber, Shape> starting_outlines = generateStartingOutlines (print_plan, skirt_brim_extruder_nr, height, adhesion_type, used_extruders);
62
- std::map<ExtruderNumber, Shape> allowed_areas_per_extruder = generateAllowedAreas (starting_outlines, adhesion_type, used_extruders, skirt_brim_extruder_nr, extruders_configs);
61
+ const std::map<ExtruderNumber, Shape> starting_outlines = generateStartingOutlines (print_plan, skirt_brim_extruder_nr, height, adhesion_type, used_extruders);
62
+ const std::map<ExtruderNumber, Shape> allowed_areas_per_extruder = generateAllowedAreas (starting_outlines, adhesion_type, used_extruders, skirt_brim_extruder_nr, extruders_configs);
63
63
64
- generateSkirtBrim (adhesion_type, used_extruders, first_extruder_plans, starting_outlines, allowed_areas_per_extruder, extruders_configs, print_plan);
64
+ for (LayerIndex actual_height = 0 ; actual_height < height; ++actual_height)
65
+ {
66
+ LayerPlanPtr layer_plan = print_plan->findLayerPlan (actual_height);
67
+ if (layer_plan)
68
+ {
69
+ generateSkirtBrim (adhesion_type, used_extruders, first_extruder_plans, starting_outlines, allowed_areas_per_extruder, extruders_configs, layer_plan);
70
+ }
71
+ }
65
72
}
66
73
67
74
std::tuple<std::vector<ConstExtruderPlanPtr>, ExtrudersSet> SkirtBrimAppender::generateUsedExtruders (const PrintPlan* print_plan)
@@ -107,11 +114,12 @@ std::map<ExtruderNumber, SkirtBrimAppender::ExtruderConfig> SkirtBrimAppender::g
107
114
const Settings& settings = Application::getInstance ().current_slice_ ->scene .getExtruder (extruder_nr).settings_ ;
108
115
109
116
const auto & location = settings.get <BrimLocation>(" brim_location" );
117
+ // FIXME: Use initial_layer_line_width_factor only on first layer, and also handle the initial-layer speed and flow
110
118
extruder_config.line_width_ = settings.get <coord_t >(" skirt_brim_line_width" ) * settings.get <Ratio>(" initial_layer_line_width_factor" );
111
119
extruder_config.skirt_brim_minimal_length_ = settings.get <coord_t >(" skirt_brim_minimal_length" );
112
120
extruder_config.outside_polys_ = adhesion_type == EPlatformAdhesion::SKIRT || (location & BrimLocation::OUTSIDE);
113
121
extruder_config.inside_polys_ = adhesion_type == EPlatformAdhesion::BRIM && (location & BrimLocation::INSIDE);
114
- extruder_config.line_count_ = settings.get <int >(adhesion_type == EPlatformAdhesion::BRIM ? " brim_line_count" : " skirt_line_count" );
122
+ extruder_config.line_count_ = settings.get <size_t >(adhesion_type == EPlatformAdhesion::BRIM ? " brim_line_count" : " skirt_line_count" );
115
123
extruder_config.gap_ = settings.get <coord_t >(adhesion_type == EPlatformAdhesion::BRIM ? " brim_gap" : " skirt_gap" );
116
124
extruder_config.brim_inside_margin_ = settings.get <coord_t >(" brim_inside_margin" );
117
125
extruder_config.skirt_height_ = settings.get <size_t >(" skirt_height" );
@@ -326,9 +334,9 @@ void SkirtBrimAppender::generateSkirtBrim(
326
334
const ExtrudersSet &used_extruders,
327
335
const std::vector<ConstExtruderPlanPtr> first_extruder_plans,
328
336
const std::map<ExtruderNumber, Shape>& starting_outlines,
329
- std::map<ExtruderNumber, Shape>& allowed_areas_per_extruder,
337
+ std::map<ExtruderNumber, Shape> allowed_areas_per_extruder,
330
338
const std::map<ExtruderNumber, ExtruderConfig>& extruders_configs,
331
- PrintPlan* print_plan )
339
+ const LayerPlanPtr& layer_plan )
332
340
{
333
341
struct ExtruderOffsetData
334
342
{
@@ -345,12 +353,15 @@ void SkirtBrimAppender::generateSkirtBrim(
345
353
for (const ExtruderNumber extruder_nr : used_extruders)
346
354
{
347
355
const ExtruderConfig &extruder_config = extruders_configs.at (extruder_nr);
348
- const coord_t first_offset = extruder_config.gap_ + (extruder_config.line_width_ / 2 );
349
- extruder_offset_datas.push_back (ExtruderOffsetData{
350
- .extruder_nr = extruder_nr,
351
- .next_offset = first_offset,
352
- .extrusion = std::make_shared<FeatureExtrusion>(PrintFeatureType::SkirtBrim, extruder_config.line_width_ )
353
- });
356
+ if (extruder_config.skirt_height_ > layer_plan->getLayerIndex ())
357
+ {
358
+ const coord_t first_offset = extruder_config.gap_ + (extruder_config.line_width_ / 2 );
359
+ extruder_offset_datas.push_back (ExtruderOffsetData{
360
+ .extruder_nr = extruder_nr,
361
+ .next_offset = first_offset,
362
+ .extrusion = std::make_shared<FeatureExtrusion>(PrintFeatureType::SkirtBrim, extruder_config.line_width_ )
363
+ });
364
+ }
354
365
}
355
366
356
367
// Create a cache containing the extruders processing ordering, we are going to need it extensively
@@ -388,7 +399,7 @@ void SkirtBrimAppender::generateSkirtBrim(
388
399
covered_areas.at (extruder_nr),
389
400
allowed_areas_per_extruder,
390
401
extruders_configs,
391
- print_plan-> getOperationsAs <LayerPlan>(). front () );
402
+ layer_plan );
392
403
393
404
for (const ContinuousExtruderMoveSequencePtr& offset_extrusion : offset_extrusions)
394
405
{
@@ -398,7 +409,9 @@ void SkirtBrimAppender::generateSkirtBrim(
398
409
399
410
extruder_offset_data.next_offset = extruder_config.line_width_ / 2 ;
400
411
401
- if (offset_extrusions.empty () || (extruder_offset_data.processed_offsets >= extruder_config.line_count_ && extruder_offset_data.extruded_length >= extruder_config.skirt_brim_minimal_length_ ))
412
+ if (offset_extrusions.empty () ||
413
+ layer_plan->getLayerIndex () > 0 ||
414
+ (extruder_offset_data.processed_offsets >= extruder_config.line_count_ && extruder_offset_data.extruded_length >= extruder_config.skirt_brim_minimal_length_ ))
402
415
{
403
416
extruder_offset_data.done = true ;
404
417
}
@@ -407,7 +420,7 @@ void SkirtBrimAppender::generateSkirtBrim(
407
420
for (auto & extrusion : extruder_offset_datas)
408
421
{
409
422
const auto &feature = extrusion.extrusion ;
410
- print_plan-> getOperationsAs <LayerPlan>(). front () ->getOperationsAs <ExtruderPlan>().front ()->appendFeatureExtrusion (feature);
423
+ layer_plan ->getOperationsAs <ExtruderPlan>().front ()->appendFeatureExtrusion (feature);
411
424
}
412
425
}
413
426
0 commit comments