mirror of
https://git.mirrors.martin98.com/https://github.com/SoftFever/OrcaSlicer.git
synced 2025-08-15 21:15:52 +08:00
fix sandwich inner-outer-inner regression
$468
This commit is contained in:
parent
ee72ebb988
commit
6d8f01f48d
@ -960,14 +960,14 @@ void PerimeterGenerator::process_classic()
|
|||||||
// TODO: add test for perimeter order
|
// TODO: add test for perimeter order
|
||||||
bool is_outer_wall_first =
|
bool is_outer_wall_first =
|
||||||
this->config->wall_infill_order == WallInfillOrder::OuterInnerInfill ||
|
this->config->wall_infill_order == WallInfillOrder::OuterInnerInfill ||
|
||||||
this->config->wall_infill_order == WallInfillOrder::InfillOuterInner ||
|
this->config->wall_infill_order == WallInfillOrder::InfillOuterInner;
|
||||||
this->config->wall_infill_order == WallInfillOrder::InnerOuterInnerInfill;
|
|
||||||
if (is_outer_wall_first ||
|
if (is_outer_wall_first ||
|
||||||
//BBS: always print outer wall first when there indeed has brim.
|
//BBS: always print outer wall first when there indeed has brim.
|
||||||
(this->layer_id == 0 &&
|
(this->layer_id == 0 &&
|
||||||
this->object_config->brim_type == BrimType::btOuterOnly &&
|
this->object_config->brim_type == BrimType::btOuterOnly &&
|
||||||
this->object_config->brim_width.value > 0))
|
this->object_config->brim_width.value > 0))
|
||||||
entities.reverse();
|
entities.reverse();
|
||||||
|
// SoftFever: sandwich mode
|
||||||
else if (this->config->wall_infill_order == WallInfillOrder::InnerOuterInnerInfill)
|
else if (this->config->wall_infill_order == WallInfillOrder::InnerOuterInnerInfill)
|
||||||
if (entities.entities.size() > 1){
|
if (entities.entities.size() > 1){
|
||||||
int last_outer=0;
|
int last_outer=0;
|
||||||
@ -981,6 +981,7 @@ void PerimeterGenerator::process_classic()
|
|||||||
// append perimeters for this slice as a collection
|
// append perimeters for this slice as a collection
|
||||||
if (! entities.empty())
|
if (! entities.empty())
|
||||||
this->loops->append(entities);
|
this->loops->append(entities);
|
||||||
|
|
||||||
} // for each loop of an island
|
} // for each loop of an island
|
||||||
|
|
||||||
// fill gaps
|
// fill gaps
|
||||||
@ -1320,7 +1321,8 @@ void PerimeterGenerator::process_arachne()
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
// BBS. adjust wall generate seq
|
|
||||||
|
|
||||||
if (this->config->wall_infill_order == WallInfillOrder::InnerOuterInnerInfill)
|
if (this->config->wall_infill_order == WallInfillOrder::InnerOuterInnerInfill)
|
||||||
if (ordered_extrusions.size() > 1) {
|
if (ordered_extrusions.size() > 1) {
|
||||||
int last_outer = 0;
|
int last_outer = 0;
|
||||||
@ -1333,21 +1335,6 @@ void PerimeterGenerator::process_arachne()
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
if (this->config->wall_infill_order == WallInfillOrder::InnerOuterInnerInfill) {
|
|
||||||
if (ordered_extrusions.size() > 1) {
|
|
||||||
std::vector<int> extPs;
|
|
||||||
for (int i = 0; i < ordered_extrusions.size(); ++i) {
|
|
||||||
if (ordered_extrusions[i].extrusion->inset_idx == 0)
|
|
||||||
extPs.push_back(i);
|
|
||||||
}
|
|
||||||
for (int i = 0; i < extPs.size(); ++i) {
|
|
||||||
if (extPs[i] == 0 || (i > 0 && extPs[i] - 1 == extPs[i - 1]))
|
|
||||||
continue;
|
|
||||||
std::swap(ordered_extrusions[extPs[i]], ordered_extrusions[extPs[i] - 1]);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (ExtrusionEntityCollection extrusion_coll = traverse_extrusions(*this, ordered_extrusions); !extrusion_coll.empty())
|
if (ExtrusionEntityCollection extrusion_coll = traverse_extrusions(*this, ordered_extrusions); !extrusion_coll.empty())
|
||||||
this->loops->append(extrusion_coll);
|
this->loops->append(extrusion_coll);
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user