@@ -99,10 +99,21 @@ void LayerPlanBuffer::addConnectingTravelMove(LayerPlan* prev_layer, const Layer
9999 const Settings& mesh_group_settings = Application::getInstance ().current_slice_ ->scene .current_mesh_group ->settings ;
100100 const Settings& extruder_settings = Application::getInstance ().current_slice_ ->scene .extruders [prev_layer->extruder_plans_ .back ().extruder_nr_ ].settings_ ;
101101 prev_layer->setIsInside (new_layer_destination_state->second );
102- const bool force_retract = extruder_settings.get <bool >(" retract_at_layer_change" )
103- || (mesh_group_settings.get <bool >(" travel_retract_before_outer_wall" )
104- && (mesh_group_settings.get <InsetDirection>(" inset_direction" ) == InsetDirection::OUTSIDE_IN
105- || mesh_group_settings.get <size_t >(" wall_line_count" ) == 1 )); // Moving towards an outer wall.
102+
103+ const bool travel_retract_before_outer_wall = mesh_group_settings.get <bool >(" travel_retract_before_outer_wall" );
104+ const bool retract_at_layer_change = extruder_settings.get <bool >(" retract_at_layer_change" );
105+ bool next_mesh_retract_before_outer_wall = false ;
106+ std::shared_ptr<const SliceMeshStorage> first_printed_mesh = newest_layer->findFirstPrintedMesh ();
107+ if (! retract_at_layer_change && first_printed_mesh && travel_retract_before_outer_wall)
108+ {
109+ // Check whether we are moving toving towards an outer wall and it should be retracted
110+ const Settings& mesh_settings = first_printed_mesh->settings ;
111+ const InsetDirection inset_direction = mesh_settings.get <InsetDirection>(" inset_direction" );
112+ const size_t wall_line_count = mesh_settings.get <size_t >(" wall_line_count" );
113+
114+ next_mesh_retract_before_outer_wall = inset_direction == InsetDirection::OUTSIDE_IN || wall_line_count == 1 ;
115+ }
116+ const bool force_retract = retract_at_layer_change || next_mesh_retract_before_outer_wall;
106117 prev_layer->final_travel_z_ = newest_layer->z_ ;
107118 GCodePath& path = prev_layer->addTravel (first_location_new_layer, force_retract);
108119 if (force_retract && ! path.retract )
0 commit comments