@@ -1790,7 +1790,7 @@ void FffGcodeWriter::addMeshLayerToGCode(
17901790 const MeshPathConfigs& mesh_config,
17911791 LayerPlan& gcode_layer) const
17921792{
1793- const auto & mesh = *mesh_ptr;
1793+ auto & mesh = *mesh_ptr;
17941794 if (gcode_layer.getLayerNr () > mesh.layer_nr_max_filled_layer )
17951795 {
17961796 return ;
@@ -1801,7 +1801,7 @@ void FffGcodeWriter::addMeshLayerToGCode(
18011801 return ;
18021802 }
18031803
1804- const SliceLayer& layer = mesh.layers [gcode_layer.getLayerNr ()];
1804+ SliceLayer& layer = mesh.layers [gcode_layer.getLayerNr ()];
18051805
18061806 if (layer.parts .empty ())
18071807 {
@@ -1819,8 +1819,8 @@ void FffGcodeWriter::addMeshLayerToGCode(
18191819 mesh.settings .get <EZSeamCornerPrefType>(" z_seam_corner" ),
18201820 mesh.settings .get <coord_t >(" wall_line_width_0" ) * 2 );
18211821 }
1822- PathOrderOptimizer<const SliceLayerPart*> part_order_optimizer (gcode_layer.getLastPlannedPositionOrStartingPosition (), z_seam_config);
1823- for (const SliceLayerPart& part : layer.parts )
1822+ PathOrderOptimizer<SliceLayerPart*> part_order_optimizer (gcode_layer.getLastPlannedPositionOrStartingPosition (), z_seam_config);
1823+ for (SliceLayerPart& part : layer.parts )
18241824 {
18251825 if (part.outline .empty ())
18261826 {
@@ -1831,7 +1831,7 @@ void FffGcodeWriter::addMeshLayerToGCode(
18311831
18321832 part_order_optimizer.optimize (false );
18331833
1834- for (const PathOrdering<const SliceLayerPart*>& path : part_order_optimizer.paths_ )
1834+ for (const PathOrdering<SliceLayerPart*>& path : part_order_optimizer.paths_ )
18351835 {
18361836 addMeshPartToGCode (storage, mesh, extruder_nr, mesh_config, *path.vertices_ , gcode_layer);
18371837 }
@@ -1853,7 +1853,7 @@ void FffGcodeWriter::addMeshPartToGCode(
18531853 const SliceMeshStorage& mesh,
18541854 const size_t extruder_nr,
18551855 const MeshPathConfigs& mesh_config,
1856- const SliceLayerPart& part,
1856+ SliceLayerPart& part,
18571857 LayerPlan& gcode_layer) const
18581858{
18591859 const Settings& mesh_group_settings = Application::getInstance ().current_slice_ ->scene .current_mesh_group ->settings ;
@@ -2976,7 +2976,7 @@ bool FffGcodeWriter::processInsets(
29762976 const SliceMeshStorage& mesh,
29772977 const size_t extruder_nr,
29782978 const MeshPathConfigs& mesh_config,
2979- const SliceLayerPart& part) const
2979+ SliceLayerPart& part) const
29802980{
29812981 bool added_something = false ;
29822982 if (extruder_nr != mesh.settings .get <ExtruderTrain&>(" wall_0_extruder_nr" ).extruder_nr_ && extruder_nr != mesh.settings .get <ExtruderTrain&>(" wall_x_extruder_nr" ).extruder_nr_ )
@@ -3099,7 +3099,16 @@ bool FffGcodeWriter::processInsets(
30993099 // which is required because when the walls are being generated, the vertices do not fall on the part's outline
31003100 // but, instead, are 1/2 a line width inset from the outline
31013101
3102- gcode_layer.setBridgeWallMask (compressed_air.offset (max_air_gap + half_outer_wall_width));
3102+ Shape bridge_mask = compressed_air.offset (max_air_gap + half_outer_wall_width);
3103+ gcode_layer.setBridgeWallMask (bridge_mask);
3104+
3105+ // Override flooring/skin areas to register bridging areas to be treated as normal skin
3106+ for (SkinPart& skin_part : part.skin_parts )
3107+ {
3108+ Shape moved_area = skin_part.flooring_fill .intersection (bridge_mask).offset (10 );
3109+ skin_part.flooring_fill = skin_part.flooring_fill .difference (moved_area);
3110+ skin_part.skin_fill = skin_part.skin_fill .unionPolygons (moved_area);
3111+ }
31033112 }
31043113 else
31053114 {
0 commit comments