From 5e6fb091193f94023bf8768b0621645c2c0af003 Mon Sep 17 00:00:00 2001 From: Dion Moult Date: Tue, 29 Jan 2019 21:46:49 +1100 Subject: [PATCH] Now you can join multiple wires all at once --- src/Mod/Draft/Draft.py | 20 ++++++++++++++++++-- src/Mod/Draft/DraftTools.py | 2 +- 2 files changed, 19 insertions(+), 3 deletions(-) diff --git a/src/Mod/Draft/Draft.py b/src/Mod/Draft/Draft.py index c02b740ed5f0..a6d7131e5992 100644 --- a/src/Mod/Draft/Draft.py +++ b/src/Mod/Draft/Draft.py @@ -1339,7 +1339,20 @@ def extrude(obj,vector,solid=False): FreeCAD.ActiveDocument.recompute() return newobj -def joinWires(wire1, wire2): +def joinWires(wires, joinAttempts = 0): + if joinAttempts > len(wires): + return FreeCAD.ActiveDocument.recompute() + joinAttempts += 1 + for wire1Index, wire1 in enumerate(wires): + for wire2Index, wire2 in enumerate(wires): + if wire2Index <= wire1Index: + continue + if not joinTwoWires(wire1, wire2): + wires.pop(wire2Index) + break + joinWires(wires, joinAttempts) + +def joinTwoWires(wire1, wire2): wire1AbsPoints = [wire1.Placement.multVec(point) for point in wire1.Points] wire2AbsPoints = [wire2.Placement.multVec(point) for point in wire2.Points] if wire1AbsPoints[0] == wire2AbsPoints[0]: @@ -1349,10 +1362,13 @@ def joinWires(wire1, wire2): wire2AbsPoints = list(reversed(wire2AbsPoints)) elif wire1AbsPoints[-1] == wire2AbsPoints[-1]: wire2AbsPoints = list(reversed(wire2AbsPoints)) + elif wire1AbsPoints[-1] == wire2AbsPoints[0]: + pass + else: + return False wire2AbsPoints.pop(0) wire1.Points = [wire1.Placement.inverse().multVec(point) for point in wire1AbsPoints] + [wire1.Placement.inverse().multVec(point) for point in wire2AbsPoints] FreeCAD.ActiveDocument.removeObject(wire2.Name) - FreeCAD.ActiveDocument.recompute() def fuse(object1,object2): '''fuse(oject1,object2): returns an object made from diff --git a/src/Mod/Draft/DraftTools.py b/src/Mod/Draft/DraftTools.py index 977da44557a1..13a1af2169ab 100644 --- a/src/Mod/Draft/DraftTools.py +++ b/src/Mod/Draft/DraftTools.py @@ -3234,7 +3234,7 @@ def proceed(self): print(FreeCADGui.Selection.getSelection()) FreeCADGui.addModule("Draft") self.commit(translate("draft","Upgrade"), - ['Draft.joinWires(FreeCADGui.Selection.getSelection()[0], FreeCADGui.Selection.getSelection()[1])', 'FreeCAD.ActiveDocument.recompute()']) + ['Draft.joinWires(FreeCADGui.Selection.getSelection())', 'FreeCAD.ActiveDocument.recompute()']) self.finish()