Fxied a regression that wall order can't be set in height modifier

This commit is contained in:
SoftFever 2024-01-01 18:21:19 +08:00
parent 2f916f5ee9
commit 5683729b17
4 changed files with 12 additions and 11 deletions

View file

@ -4126,7 +4126,7 @@ LayerResult GCode::process_layer(
m_last_obj_copy = this_object_copy; m_last_obj_copy = this_object_copy;
this->set_origin(unscale(offset)); this->set_origin(unscale(offset));
//FIXME the following code prints regions in the order they are defined, the path is not optimized in any way. //FIXME the following code prints regions in the order they are defined, the path is not optimized in any way.
bool is_infill_first =print.config().is_infill_first; bool is_infill_first =m_config.is_infill_first;
auto has_infill = [](const std::vector<ObjectByExtruder::Island::Region> &by_region) { auto has_infill = [](const std::vector<ObjectByExtruder::Island::Region> &by_region) {
for (auto region : by_region) { for (auto region : by_region) {

View file

@ -1047,7 +1047,7 @@ float WipingExtrusions::mark_wiping_extrusions(const Print& print, unsigned int
if (!object->config().flush_into_infill && !object->config().flush_into_objects && !object->config().flush_into_support) if (!object->config().flush_into_infill && !object->config().flush_into_objects && !object->config().flush_into_support)
continue; continue;
bool wipe_into_infill_only = !object->config().flush_into_objects && object->config().flush_into_infill; bool wipe_into_infill_only = !object->config().flush_into_objects && object->config().flush_into_infill;
bool is_infill_first = print.config().is_infill_first; bool is_infill_first = region.config().is_infill_first;
if (is_infill_first != perimeters_done || wipe_into_infill_only) { if (is_infill_first != perimeters_done || wipe_into_infill_only) {
for (const ExtrusionEntity* ee : layerm->fills.entities) { // iterate through all infill Collections for (const ExtrusionEntity* ee : layerm->fills.entities) { // iterate through all infill Collections
auto* fill = dynamic_cast<const ExtrusionEntityCollection*>(ee); auto* fill = dynamic_cast<const ExtrusionEntityCollection*>(ee);
@ -1160,7 +1160,7 @@ void WipingExtrusions::ensure_perimeters_infills_order(const Print& print)
if (!object->config().flush_into_infill && !object->config().flush_into_objects) if (!object->config().flush_into_infill && !object->config().flush_into_objects)
continue; continue;
bool is_infill_first = print.config().is_infill_first; bool is_infill_first = region.config().is_infill_first;
for (const ExtrusionEntity* ee : layerm->fills.entities) { // iterate through all infill Collections for (const ExtrusionEntity* ee : layerm->fills.entities) { // iterate through all infill Collections
auto* fill = dynamic_cast<const ExtrusionEntityCollection*>(ee); auto* fill = dynamic_cast<const ExtrusionEntityCollection*>(ee);

View file

@ -1731,7 +1731,7 @@ void PerimeterGenerator::process_classic()
// 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
bool is_outer_wall_first = this->object_config->wall_sequence == WallSequence::OuterInner; bool is_outer_wall_first = this->config->wall_sequence == WallSequence::OuterInner;
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 &&
@ -1739,7 +1739,7 @@ void PerimeterGenerator::process_classic()
this->object_config->brim_width.value > 0)) this->object_config->brim_width.value > 0))
entities.reverse(); entities.reverse();
// SoftFever: sandwich mode // SoftFever: sandwich mode
else if (this->object_config->wall_sequence == WallSequence::InnerOuterInner) else if (this->config->wall_sequence == WallSequence::InnerOuterInner)
if (entities.entities.size() > 1){ if (entities.entities.size() > 1){
int last_outer=0; int last_outer=0;
int outer = 0; int outer = 0;
@ -2036,12 +2036,12 @@ void PerimeterGenerator::process_arachne()
int direction = -1; int direction = -1;
bool is_outer_wall_first = bool is_outer_wall_first =
this->object_config->wall_sequence == WallSequence::OuterInner || this->config->wall_sequence == WallSequence::OuterInner ||
this->object_config->wall_sequence == WallSequence::InnerOuterInner; this->config->wall_sequence == WallSequence::InnerOuterInner;
if (layer_id == 0){ // disable inner outer inner algorithm after the first layer if (layer_id == 0){ // disable inner outer inner algorithm after the first layer
is_outer_wall_first = is_outer_wall_first =
this->object_config->wall_sequence == WallSequence::OuterInner; this->config->wall_sequence == WallSequence::OuterInner;
} }
if (is_outer_wall_first) { if (is_outer_wall_first) {
start_perimeter = 0; start_perimeter = 0;
@ -2169,7 +2169,7 @@ void PerimeterGenerator::process_arachne()
} }
// printf("New Layer: Layer ID %d\n",layer_id); //debug - new layer // printf("New Layer: Layer ID %d\n",layer_id); //debug - new layer
if (this->object_config->wall_sequence == WallSequence::InnerOuterInner && layer_id > 0) { // only enable inner outer inner algorithm after first layer if (this->config->wall_sequence == WallSequence::InnerOuterInner && layer_id > 0) { // only enable inner outer inner algorithm after first layer
if (ordered_extrusions.size() > 2) { // 3 walls minimum needed to do inner outer inner ordering if (ordered_extrusions.size() > 2) { // 3 walls minimum needed to do inner outer inner ordering
int position = 0; // index to run the re-ordering for multiple external perimeters in a single island. int position = 0; // index to run the re-ordering for multiple external perimeters in a single island.
int arr_i, arr_j = 0; // indexes to run through the walls in the for loops int arr_i, arr_j = 0; // indexes to run through the walls in the for loops

View file

@ -753,7 +753,6 @@ PRINT_CONFIG_CLASS_DEFINE(
// BBS // BBS
((ConfigOptionBool, flush_into_infill)) ((ConfigOptionBool, flush_into_infill))
((ConfigOptionBool, flush_into_support)) ((ConfigOptionBool, flush_into_support))
((ConfigOptionEnum<WallSequence>, wall_sequence))
// BBS // BBS
((ConfigOptionFloat, tree_support_branch_distance)) ((ConfigOptionFloat, tree_support_branch_distance))
((ConfigOptionFloat, tree_support_tip_diameter)) ((ConfigOptionFloat, tree_support_tip_diameter))
@ -903,6 +902,9 @@ PRINT_CONFIG_CLASS_DEFINE(
((ConfigOptionBool, overhang_reverse)) ((ConfigOptionBool, overhang_reverse))
((ConfigOptionBool, overhang_reverse_internal_only)) ((ConfigOptionBool, overhang_reverse_internal_only))
((ConfigOptionFloatOrPercent, overhang_reverse_threshold)) ((ConfigOptionFloatOrPercent, overhang_reverse_threshold))
((ConfigOptionEnum<WallSequence>, wall_sequence))
((ConfigOptionBool, is_infill_first))
) )
PRINT_CONFIG_CLASS_DEFINE( PRINT_CONFIG_CLASS_DEFINE(
@ -1179,7 +1181,6 @@ PRINT_CONFIG_CLASS_DERIVED_DEFINE(
((ConfigOptionBools, activate_chamber_temp_control)) ((ConfigOptionBools, activate_chamber_temp_control))
((ConfigOptionInts , chamber_temperature)) ((ConfigOptionInts , chamber_temperature))
((ConfigOptionBool, is_infill_first))
((ConfigOptionFloat, preferred_orientation)) ((ConfigOptionFloat, preferred_orientation))