From 9b827c0436381cdae815b520ab920f70e299e397 Mon Sep 17 00:00:00 2001 From: Louis Gombert <44813937+Lgt2x@users.noreply.github.com> Date: Sat, 20 Dec 2025 22:23:55 +0100 Subject: [PATCH] SVG export: improve performance (#26149) * SVG export: use a set to match edges instead of a list Lookup in edge list becomes O(1), significantly improving SVG export speed * [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci --------- Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com> --- src/Mod/Draft/draftfunctions/svg.py | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/src/Mod/Draft/draftfunctions/svg.py b/src/Mod/Draft/draftfunctions/svg.py index 875583e5d5..c6130c6b8e 100644 --- a/src/Mod/Draft/draftfunctions/svg.py +++ b/src/Mod/Draft/draftfunctions/svg.py @@ -1052,10 +1052,20 @@ def get_svg( pathname="%s_w%04d" % (obj.Name, i), ) wiredEdges.extend(w.Edges) + if len(wiredEdges) != len(obj.Shape.Edges): fill = "none" # Required if obj has a face. Edges processed here have no face. + + def get_edge_descriptor(edge): + return ( + str(edge.Curve), + str(edge.Vertexes[0].Point), + str(edge.Vertexes[-1].Point), + ) + + wiredEdgesSet = set([get_edge_descriptor(e) for e in wiredEdges]) for i, e in enumerate(obj.Shape.Edges): - if DraftGeomUtils.findEdge(e, wiredEdges) is None: + if get_edge_descriptor(e) not in wiredEdgesSet: svg += get_path( obj, plane,