From 882c4ca2f372f2fe5d5fe140290eef5803844beb Mon Sep 17 00:00:00 2001 From: Dion Moult Date: Mon, 28 Jan 2019 23:01:04 +1100 Subject: [PATCH] Add new draft join tool --- src/Mod/Draft/Draft.py | 15 +++++++++++++++ src/Mod/Draft/DraftTools.py | 31 +++++++++++++++++++++++++++++++ src/Mod/Draft/InitGui.py | 2 +- 3 files changed, 47 insertions(+), 1 deletion(-) diff --git a/src/Mod/Draft/Draft.py b/src/Mod/Draft/Draft.py index fb935f05b1..c02b740ed5 100644 --- a/src/Mod/Draft/Draft.py +++ b/src/Mod/Draft/Draft.py @@ -1339,6 +1339,21 @@ def extrude(obj,vector,solid=False): FreeCAD.ActiveDocument.recompute() return newobj +def joinWires(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]: + wire1AbsPoints = list(reversed(wire1AbsPoints)) + elif wire1AbsPoints[0] == wire2AbsPoints[-1]: + wire1AbsPoints = list(reversed(wire1AbsPoints)) + wire2AbsPoints = list(reversed(wire2AbsPoints)) + elif wire1AbsPoints[-1] == wire2AbsPoints[-1]: + wire2AbsPoints = list(reversed(wire2AbsPoints)) + 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 the union of the 2 given objects. If the objects are diff --git a/src/Mod/Draft/DraftTools.py b/src/Mod/Draft/DraftTools.py index d43213e24d..32234beca9 100644 --- a/src/Mod/Draft/DraftTools.py +++ b/src/Mod/Draft/DraftTools.py @@ -3207,6 +3207,36 @@ class Stretch(Modifier): self.commit(translate("draft","Stretch"),commitops) self.finish() +class Join(Modifier): + '''The Draft_Join FreeCAD command definition.''' + + def GetResources(self): + return {'Pixmap' : 'Draft_Upgrade', + 'Accel' : "F, U", + 'MenuText': QtCore.QT_TRANSLATE_NOOP("Draft_Join", "Join"), + 'ToolTip': QtCore.QT_TRANSLATE_NOOP("Draft_Join", "Does funky!")} + + def Activated(self): + Modifier.Activated(self,"Upgrade") + if not self.ui: + return + if not FreeCADGui.Selection.getSelection(): + self.ui.selectUi() + msg(translate("draft", "Select an object to upgrade")+"\n") + self.call = self.view.addEventCallback("SoEvent",selectObject) + else: + self.proceed() + + def proceed(self): + if self.call: + self.view.removeEventCallback("SoEvent",self.call) + if FreeCADGui.Selection.getSelection(): + 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()']) + self.finish() + class Upgrade(Modifier): '''The Draft_Upgrade FreeCAD command definition.''' @@ -5823,6 +5853,7 @@ FreeCADGui.addCommand('Draft_Label',Draft_Label()) FreeCADGui.addCommand('Draft_Move',Move()) FreeCADGui.addCommand('Draft_Rotate',Rotate()) FreeCADGui.addCommand('Draft_Offset',Offset()) +FreeCADGui.addCommand('Draft_Join',Join()) FreeCADGui.addCommand('Draft_Upgrade',Upgrade()) FreeCADGui.addCommand('Draft_Downgrade',Downgrade()) FreeCADGui.addCommand('Draft_Trimex',Trimex()) diff --git a/src/Mod/Draft/InitGui.py b/src/Mod/Draft/InitGui.py index 1d74e29f99..39f69bf430 100644 --- a/src/Mod/Draft/InitGui.py +++ b/src/Mod/Draft/InitGui.py @@ -73,7 +73,7 @@ class DraftWorkbench (Workbench): "Draft_Dimension", "Draft_BSpline","Draft_Point", "Draft_ShapeString","Draft_Facebinder","Draft_BezCurve","Draft_Label"] self.modList = ["Draft_Move","Draft_Rotate","Draft_Offset", - "Draft_Trimex", "Draft_Upgrade", "Draft_Downgrade", "Draft_Scale", + "Draft_Trimex", "Draft_Join", "Draft_Upgrade", "Draft_Downgrade", "Draft_Scale", "Draft_Edit","Draft_WireToBSpline","Draft_AddPoint", "Draft_DelPoint","Draft_Shape2DView","Draft_Draft2Sketch","Draft_Array", "Draft_PathArray", "Draft_PointArray","Draft_Clone",