mirror of
https://git.mirrors.martin98.com/https://github.com/prusa3d/PrusaSlicer.git
synced 2025-08-18 04:35:58 +08:00
Fixed extrusion width calculation.
This commit is contained in:
parent
8616758354
commit
7e52650430
@ -282,21 +282,22 @@ static ExtrusionEntityCollection traverse_loops(const PerimeterGenerator &perime
|
|||||||
void PerimeterGenerator::process_arachne()
|
void PerimeterGenerator::process_arachne()
|
||||||
{
|
{
|
||||||
// other perimeters
|
// other perimeters
|
||||||
m_mm3_per_mm = this->perimeter_flow.mm3_per_mm();
|
m_mm3_per_mm = this->perimeter_flow.mm3_per_mm();
|
||||||
coord_t perimeter_width = this->perimeter_flow.scaled_width();
|
coord_t perimeter_spacing = this->perimeter_flow.scaled_spacing();
|
||||||
|
|
||||||
// external perimeters
|
// external perimeters
|
||||||
m_ext_mm3_per_mm = this->ext_perimeter_flow.mm3_per_mm();
|
m_ext_mm3_per_mm = this->ext_perimeter_flow.mm3_per_mm();
|
||||||
coord_t ext_perimeter_width = this->ext_perimeter_flow.scaled_width();
|
coord_t ext_perimeter_width = this->ext_perimeter_flow.scaled_width();
|
||||||
|
coord_t ext_perimeter_spacing = this->ext_perimeter_flow.scaled_spacing();
|
||||||
|
|
||||||
// overhang perimeters
|
// overhang perimeters
|
||||||
m_mm3_per_mm_overhang = this->overhang_flow.mm3_per_mm();
|
m_mm3_per_mm_overhang = this->overhang_flow.mm3_per_mm();
|
||||||
|
|
||||||
// solid infill
|
// solid infill
|
||||||
coord_t solid_infill_spacing = this->solid_infill_flow.scaled_spacing();
|
coord_t solid_infill_spacing = this->solid_infill_flow.scaled_spacing();
|
||||||
|
|
||||||
// prepare grown lower layer slices for overhang detection
|
// prepare grown lower layer slices for overhang detection
|
||||||
if (this->lower_slices != NULL && this->config->overhangs) {
|
if (this->lower_slices != nullptr && this->config->overhangs) {
|
||||||
// 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
|
||||||
@ -309,11 +310,11 @@ void PerimeterGenerator::process_arachne()
|
|||||||
for (const Surface &surface : this->slices->surfaces) {
|
for (const Surface &surface : this->slices->surfaces) {
|
||||||
// detect how many perimeters must be generated for this island
|
// detect how many perimeters must be generated for this island
|
||||||
int loop_number = this->config->perimeters + surface.extra_perimeters - 1; // 0-indexed loops
|
int loop_number = this->config->perimeters + surface.extra_perimeters - 1; // 0-indexed loops
|
||||||
ExPolygons last = union_ex(surface.expolygon.simplify_p(m_scaled_resolution));
|
ExPolygons last = offset_ex(surface.expolygon.simplify_p(m_scaled_resolution), - float(ext_perimeter_width / 2. - ext_perimeter_spacing / 2.));
|
||||||
Polygons last_p = to_polygons(last);
|
Polygons last_p = to_polygons(last);
|
||||||
|
|
||||||
coord_t bead_width_0 = ext_perimeter_width;
|
coord_t bead_width_0 = ext_perimeter_spacing;
|
||||||
coord_t bead_width_x = perimeter_width;
|
coord_t bead_width_x = perimeter_spacing;
|
||||||
coord_t wall_0_inset = 0;
|
coord_t wall_0_inset = 0;
|
||||||
|
|
||||||
Arachne::WallToolPaths wallToolPaths(last_p, bead_width_0, bead_width_x, coord_t(loop_number + 1), wall_0_inset, *this->object_config);
|
Arachne::WallToolPaths wallToolPaths(last_p, bead_width_0, bead_width_x, coord_t(loop_number + 1), wall_0_inset, *this->object_config);
|
||||||
@ -440,9 +441,9 @@ void PerimeterGenerator::process_arachne()
|
|||||||
(loop_number < 0) ? 0 :
|
(loop_number < 0) ? 0 :
|
||||||
(loop_number == 0) ?
|
(loop_number == 0) ?
|
||||||
// one loop
|
// one loop
|
||||||
ext_perimeter_width:
|
ext_perimeter_spacing:
|
||||||
// two or more loops?
|
// two or more loops?
|
||||||
perimeter_width;
|
perimeter_spacing;
|
||||||
|
|
||||||
inset = coord_t(scale_(this->config->get_abs_value("infill_overlap", unscale<double>(inset))));
|
inset = coord_t(scale_(this->config->get_abs_value("infill_overlap", unscale<double>(inset))));
|
||||||
Polygons pp;
|
Polygons pp;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user