mirror of
https://github.com/QIDITECH/QIDISlicer.git
synced 2026-01-30 23:48:44 +03:00
Merge branch 'master' of https://github.com/QIDITECH/QIDISlicer
This commit is contained in:
@@ -1745,7 +1745,7 @@ void PerimeterGenerator::process_classic(
|
|||||||
//w16
|
//w16
|
||||||
const ExPolygons *upper_slices,
|
const ExPolygons *upper_slices,
|
||||||
// Cache:
|
// Cache:
|
||||||
Polygons &lower_slices_polygons_cache,
|
Polygons &lower_layer_polygons_cache,
|
||||||
Polygons &upper_layer_polygons_cache,
|
Polygons &upper_layer_polygons_cache,
|
||||||
// Output:
|
// Output:
|
||||||
// Loops with the external thin walls
|
// Loops with the external thin walls
|
||||||
@@ -1780,12 +1780,12 @@ void PerimeterGenerator::process_classic(
|
|||||||
bool has_gap_fill = params.config.gap_fill_enabled.value && params.config.gap_fill_speed.value > 0;
|
bool has_gap_fill = params.config.gap_fill_enabled.value && params.config.gap_fill_speed.value > 0;
|
||||||
|
|
||||||
// prepare grown lower layer slices for overhang detection
|
// prepare grown lower layer slices for overhang detection
|
||||||
if (params.config.overhangs && lower_slices != nullptr && lower_slices_polygons_cache.empty()) {
|
if (params.config.overhangs && lower_slices != nullptr && lower_layer_polygons_cache.empty()) {
|
||||||
// We consider overhang any part where the entire nozzle diameter is not supported by the
|
// We consider overhang any part where the entire nozzle diameter is not supported by the
|
||||||
// lower layer, so we take lower slices and offset them by half the nozzle diameter used
|
// lower layer, so we take lower slices and offset them by half the nozzle diameter used
|
||||||
// in the current layer
|
// in the current layer
|
||||||
double nozzle_diameter = params.print_config.nozzle_diameter.get_at(params.config.perimeter_extruder-1);
|
double nozzle_diameter = params.print_config.nozzle_diameter.get_at(params.config.perimeter_extruder-1);
|
||||||
lower_slices_polygons_cache = offset(*lower_slices, float(scale_(+nozzle_diameter/2)));
|
lower_layer_polygons_cache = offset(*lower_slices, float(scale_(+nozzle_diameter / 2)));
|
||||||
}
|
}
|
||||||
|
|
||||||
// we need to process each island separately because we might have different
|
// we need to process each island separately because we might have different
|
||||||
@@ -1797,6 +1797,12 @@ void PerimeterGenerator::process_classic(
|
|||||||
//w16
|
//w16
|
||||||
ExPolygons fill_clip;
|
ExPolygons fill_clip;
|
||||||
ExPolygons top_fills;
|
ExPolygons top_fills;
|
||||||
|
//w16
|
||||||
|
|
||||||
|
if (params.config.overhangs && upper_slices != nullptr && upper_layer_polygons_cache.empty()) {
|
||||||
|
double upper_nozzle_diameter = params.print_config.nozzle_diameter.get_at(params.config.perimeter_extruder - 1);
|
||||||
|
upper_layer_polygons_cache = offset(*upper_slices, float(scale_(+upper_nozzle_diameter / 2)));
|
||||||
|
}
|
||||||
if (loop_number > 0 && params.object_config.top_one_wall_type != TopOneWallType::Disable && upper_slices == nullptr)
|
if (loop_number > 0 && params.object_config.top_one_wall_type != TopOneWallType::Disable && upper_slices == nullptr)
|
||||||
loop_number = 0;
|
loop_number = 0;
|
||||||
if (loop_number >= 0) {
|
if (loop_number >= 0) {
|
||||||
@@ -1913,10 +1919,9 @@ void PerimeterGenerator::process_classic(
|
|||||||
last_box);
|
last_box);
|
||||||
upper_polygons_series_clipped = offset(upper_polygons_series_clipped, min_width_top_surface);
|
upper_polygons_series_clipped = offset(upper_polygons_series_clipped, min_width_top_surface);
|
||||||
fill_clip = offset_ex(last, -double(ext_perimeter_spacing));
|
fill_clip = offset_ex(last, -double(ext_perimeter_spacing));
|
||||||
ExPolygons grown_lower_slices;
|
|
||||||
ExPolygons bridge_checker;
|
ExPolygons bridge_checker;
|
||||||
if (lower_slices != nullptr) {
|
if (lower_slices != nullptr) {
|
||||||
Polygons lower_polygons_series_clipped = ClipperUtils::clip_clipper_polygons_with_subject_bbox(lower_slices_polygons_cache,
|
Polygons lower_polygons_series_clipped = ClipperUtils::clip_clipper_polygons_with_subject_bbox(lower_layer_polygons_cache,
|
||||||
last_box);
|
last_box);
|
||||||
|
|
||||||
double bridge_offset = std::max(double(ext_perimeter_spacing), (double(perimeter_width)));
|
double bridge_offset = std::max(double(ext_perimeter_spacing), (double(perimeter_width)));
|
||||||
@@ -2002,7 +2007,7 @@ void PerimeterGenerator::process_classic(
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
// at this point, all loops should be in contours[0]
|
// at this point, all loops should be in contours[0]
|
||||||
ExtrusionEntityCollection entities = traverse_loops_classic(params, lower_slices_polygons_cache, contours.front(), thin_walls);
|
ExtrusionEntityCollection entities = traverse_loops_classic(params, lower_layer_polygons_cache, contours.front(), thin_walls);
|
||||||
// if brim will be printed, reverse the order of perimeters so that
|
// if brim will be printed, reverse the order of perimeters so that
|
||||||
// we continue inwards after having finished the brim
|
// we continue inwards after having finished the brim
|
||||||
// TODO: add test for perimeter order
|
// TODO: add test for perimeter order
|
||||||
@@ -2077,7 +2082,7 @@ void PerimeterGenerator::process_classic(
|
|||||||
params.config.perimeters > 0 && params.layer_id > params.object_config.raft_layers) {
|
params.config.perimeters > 0 && params.layer_id > params.object_config.raft_layers) {
|
||||||
// Generate extra perimeters on overhang areas, and cut them to these parts only, to save print time and material
|
// Generate extra perimeters on overhang areas, and cut them to these parts only, to save print time and material
|
||||||
auto [extra_perimeters, filled_area] = generate_extra_perimeters_over_overhangs(infill_areas,
|
auto [extra_perimeters, filled_area] = generate_extra_perimeters_over_overhangs(infill_areas,
|
||||||
lower_slices_polygons_cache,
|
lower_layer_polygons_cache,
|
||||||
loop_number + 1,
|
loop_number + 1,
|
||||||
params.overhang_flow, params.scaled_resolution,
|
params.overhang_flow, params.scaled_resolution,
|
||||||
params.object_config, params.print_config);
|
params.object_config, params.print_config);
|
||||||
|
|||||||
@@ -73,8 +73,8 @@ void process_classic(
|
|||||||
//w16
|
//w16
|
||||||
const ExPolygons *upper_slices,
|
const ExPolygons *upper_slices,
|
||||||
// Cache:
|
// Cache:
|
||||||
Polygons &lower_slices_polygons_cache,
|
Polygons &lower_layer_polygons_cache,
|
||||||
Polygons &upper_slices_polygons_cache,
|
Polygons &upper_layer_polygons_cache,
|
||||||
// Output:
|
// Output:
|
||||||
// Loops with the external thin walls
|
// Loops with the external thin walls
|
||||||
ExtrusionEntityCollection &out_loops,
|
ExtrusionEntityCollection &out_loops,
|
||||||
|
|||||||
Reference in New Issue
Block a user