From 67efd9eff3a11714ebab5fd42271db4c1abd4555 Mon Sep 17 00:00:00 2001 From: jffmichi Date: Mon, 23 Jun 2025 17:22:21 +0200 Subject: [PATCH] CAM: sort tool paths for Engrave and Deburr operation (#21531) Co-authored-by: jffmichi <> --- src/Mod/CAM/Path/Op/EngraveBase.py | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/src/Mod/CAM/Path/Op/EngraveBase.py b/src/Mod/CAM/Path/Op/EngraveBase.py index 1c4248695a..cbbaa72368 100644 --- a/src/Mod/CAM/Path/Op/EngraveBase.py +++ b/src/Mod/CAM/Path/Op/EngraveBase.py @@ -24,6 +24,7 @@ from lazy_loader.lazy_loader import LazyLoader import Path import Path.Op.Base as PathOp import Path.Op.Util as PathOpUtil +import PathScripts.PathUtils as PathUtils import copy __doc__ = "Base class for all ops in the engrave family." @@ -61,6 +62,15 @@ class ObjectOp(PathOp.ObjectOp): """buildpathocc(obj, wires, zValues, relZ=False) ... internal helper function to generate engraving commands.""" Path.Log.track(obj.Label, len(wires), zValues) + # sort wires, adapted from Area.py + if len(wires) > 1: + locations = [] + for w in wires: + locations.append({"x": w.BoundBox.Center.x, "y": w.BoundBox.Center.y, "wire": w}) + + locations = PathUtils.sort_locations(locations, ["x", "y"]) + wires = [j["wire"] for j in locations] + decomposewires = [] for wire in wires: decomposewires.extend(PathOpUtil.makeWires(wire.Edges))