From 7501475e66519d1d3c57feadb9521c7e6f0e70c2 Mon Sep 17 00:00:00 2001 From: Yorik van Havre Date: Mon, 1 Jul 2013 12:53:43 -0300 Subject: [PATCH 1/2] Draft: Fixed bug in trim tool --- src/Mod/Draft/Draft.py | 2 ++ src/Mod/Draft/DraftTools.py | 33 ++++++++++++++++++++++++++++++--- 2 files changed, 32 insertions(+), 3 deletions(-) diff --git a/src/Mod/Draft/Draft.py b/src/Mod/Draft/Draft.py index c59f77466..d44414748 100644 --- a/src/Mod/Draft/Draft.py +++ b/src/Mod/Draft/Draft.py @@ -165,6 +165,8 @@ def getType(obj): return obj.Proxy.Type if obj.isDerivedFrom("Sketcher::SketchObject"): return "Sketch" + if (obj.TypeId == "Part::Line"): + return "Part::Line" if obj.isDerivedFrom("Part::Feature"): return "Part" if (obj.TypeId == "App::Annotation"): diff --git a/src/Mod/Draft/DraftTools.py b/src/Mod/Draft/DraftTools.py index e310e9b84..128f1a1eb 100644 --- a/src/Mod/Draft/DraftTools.py +++ b/src/Mod/Draft/DraftTools.py @@ -2551,7 +2551,7 @@ class Trimex(Modifier): sw = self.obj.ViewObject.LineWidth import DraftGeomUtils for e in self.edges: - if DraftGeomUtils(e) == "Line": + if DraftGeomUtils.geomType(e) == "Line": self.ghost.append(lineTracker(scolor=sc,swidth=sw)) else: self.ghost.append(arcTracker(scolor=sc,swidth=sw)) @@ -2739,12 +2739,39 @@ class Trimex(Modifier): self.doc.openTransaction("Trim/extend") if Draft.getType(self.obj) in ["Wire","BSpline"]: p = [] - if self.placement: invpl = self.placement.inverse() + if self.placement: + invpl = self.placement.inverse() for v in newshape.Vertexes: np = v.Point - if self.placement: np = invpl.multVec(np) + if self.placement: + np = invpl.multVec(np) p.append(np) self.obj.Points = p + elif Draft.getType(self.obj) == "Part::Line": + p = [] + if self.placement: + invpl = self.placement.inverse() + for v in newshape.Vertexes: + np = v.Point + if self.placement: + np = invpl.multVec(np) + p.append(np) + if ((p[0].x == self.obj.X1) and (p[0].y == self.obj.Y1) and (p[0].z == self.obj.Z1)): + self.obj.X2 = p[-1].x + self.obj.Y2 = p[-1].y + self.obj.Z2 = p[-1].z + elif ((p[-1].x == self.obj.X1) and (p[-1].y == self.obj.Y1) and (p[-1].z == self.obj.Z1)): + self.obj.X2 = p[0].x + self.obj.Y2 = p[0].y + self.obj.Z2 = p[0].z + elif ((p[0].x == self.obj.X2) and (p[0].y == self.obj.Y2) and (p[0].z == self.obj.Z2)): + self.obj.X1 = p[-1].x + self.obj.Y1 = p[-1].y + self.obj.Z1 = p[-1].z + else: + self.obj.X1 = p[0].x + self.obj.Y1 = p[0].y + self.obj.Z1 = p[0].z elif Draft.getType(self.obj) == "Circle": angles = self.ghost[0].getAngles() print "original",self.obj.FirstAngle," ",self.obj.LastAngle From 64ed1d97b2c7d3d7376ff40b36be5a68c096920d Mon Sep 17 00:00:00 2001 From: Yorik van Havre Date: Mon, 1 Jul 2013 16:28:00 -0300 Subject: [PATCH 2/2] Draft: Added commands for snapping tools Snap tools now also appear in the Draft menu, so users can give them keyboard shortcuts. --- src/Mod/Arch/InitGui.py | 5 ++ src/Mod/Draft/DraftTools.py | 162 +++++++++++++++++++++++++++++++++++- src/Mod/Draft/InitGui.py | 5 ++ 3 files changed, 171 insertions(+), 1 deletion(-) diff --git a/src/Mod/Arch/InitGui.py b/src/Mod/Arch/InitGui.py index 94f34788a..4a8d4ee9f 100644 --- a/src/Mod/Arch/InitGui.py +++ b/src/Mod/Arch/InitGui.py @@ -91,6 +91,10 @@ class ArchWorkbench(Workbench): "Draft_SelectGroup","Draft_SelectPlane","Draft_ToggleSnap", "Draft_ShowSnapBar","Draft_ToggleGrid","Draft_UndoLine", "Draft_FinishLine","Draft_CloseLine"] + self.snapList = ['Draft_Snap_Lock','Draft_Snap_Midpoint','Draft_Snap_Perpendicular', + 'Draft_Snap_Grid','Draft_Snap_Intersection','Draft_Snap_Parallel', + 'Draft_Snap_Endpoint','Draft_Snap_Angle','Draft_Snap_Center', + 'Draft_Snap_Extension','Draft_Snap_Near','Draft_Snap_Ortho'] self.appendToolbar(str(translate("arch","Arch tools")),self.archtools) self.appendToolbar(str(translate("arch","Draft tools")),self.drafttools) @@ -100,6 +104,7 @@ class ArchWorkbench(Workbench): self.appendMenu(str(translate("arch","&Architecture")),self.archtools) self.appendMenu(str(translate("arch","&Draft")),self.drafttools+self.draftmodtools) self.appendMenu([str(translate("arch","&Draft")),str(translate("arch","Context Tools"))],self.draftcontexttools) + self.appendMenu([str(translate("arch","&Draft")),str(translate("arch","Snapping"))],self.snapList) FreeCADGui.addIconPath(":/icons") FreeCADGui.addLanguagePath(":/translations") FreeCADGui.addPreferencePage(":/ui/archprefs-base.ui","Arch") diff --git a/src/Mod/Draft/DraftTools.py b/src/Mod/Draft/DraftTools.py index 128f1a1eb..7568c5dd9 100644 --- a/src/Mod/Draft/DraftTools.py +++ b/src/Mod/Draft/DraftTools.py @@ -3725,8 +3725,154 @@ class Heal(): else: Draft.heal() FreeCAD.ActiveDocument.commitTransaction() + +#--------------------------------------------------------------------------- +# Snap tools +#--------------------------------------------------------------------------- + +class Draft_Snap_Lock(): + def GetResources(self): + return {'Pixmap' : 'Snap_Lock', + 'MenuText': QtCore.QT_TRANSLATE_NOOP("Draft_Snap_Lock", "Toggle On/Off"), + 'ToolTip' : QtCore.QT_TRANSLATE_NOOP("Draft_Snap_Lock", "Activates/deactivates all snap tools at once")} + def Activated(self): + if hasattr(FreeCADGui,"Snapper"): + if hasattr(FreeCADGui.Snapper,"masterbutton"): + print FreeCADGui.Snapper.masterbutton + FreeCADGui.Snapper.masterbutton.toggle() + +class Draft_Snap_Midpoint(): + def GetResources(self): + return {'Pixmap' : 'Snap_Midpoint', + 'MenuText': QtCore.QT_TRANSLATE_NOOP("Draft_Snap_Midpoint", "Midpoint"), + 'ToolTip' : QtCore.QT_TRANSLATE_NOOP("Draft_Snap_Midpoint", "Snaps to midpoints of edges")} + def Activated(self): + if hasattr(FreeCADGui,"Snapper"): + if hasattr(FreeCADGui.Snapper,"toolbarButtons"): + for b in FreeCADGui.Snapper.toolbarButtons: + if b.objectName() == "SnapButtonmidpoint": + b.toggle() + +class Draft_Snap_Perpendicular(): + def GetResources(self): + return {'Pixmap' : 'Snap_Perpendicular', + 'MenuText': QtCore.QT_TRANSLATE_NOOP("Draft_Snap_Perpendicular", "Perpendicular"), + 'ToolTip' : QtCore.QT_TRANSLATE_NOOP("Draft_Snap_Perpendicular", "Snaps to perpendicular points on edges")} + def Activated(self): + if hasattr(FreeCADGui,"Snapper"): + if hasattr(FreeCADGui.Snapper,"toolbarButtons"): + for b in FreeCADGui.Snapper.toolbarButtons: + if b.objectName() == "SnapButtonperpendicular": + b.toggle() + +class Draft_Snap_Grid(): + def GetResources(self): + return {'Pixmap' : 'Snap_Grid', + 'MenuText': QtCore.QT_TRANSLATE_NOOP("Draft_Snap_Grid", "Grid"), + 'ToolTip' : QtCore.QT_TRANSLATE_NOOP("Draft_Snap_Grid", "Snaps to grid points")} + def Activated(self): + if hasattr(FreeCADGui,"Snapper"): + if hasattr(FreeCADGui.Snapper,"toolbarButtons"): + for b in FreeCADGui.Snapper.toolbarButtons: + if b.objectName() == "SnapButtongrid": + b.toggle() + +class Draft_Snap_Intersection(): + def GetResources(self): + return {'Pixmap' : 'Snap_Intersection', + 'MenuText': QtCore.QT_TRANSLATE_NOOP("Draft_Snap_Intersection", "Intersection"), + 'ToolTip' : QtCore.QT_TRANSLATE_NOOP("Draft_Snap_Intersection", "Snaps to edges intersections")} + def Activated(self): + if hasattr(FreeCADGui,"Snapper"): + if hasattr(FreeCADGui.Snapper,"toolbarButtons"): + for b in FreeCADGui.Snapper.toolbarButtons: + if b.objectName() == "SnapButtonintersection": + b.toggle() + +class Draft_Snap_Parallel(): + def GetResources(self): + return {'Pixmap' : 'Snap_Parallel', + 'MenuText': QtCore.QT_TRANSLATE_NOOP("Draft_Snap_Parallel", "Parallel"), + 'ToolTip' : QtCore.QT_TRANSLATE_NOOP("Draft_Snap_Parallel", "Snaps to parallel directions of edges")} + def Activated(self): + if hasattr(FreeCADGui,"Snapper"): + if hasattr(FreeCADGui.Snapper,"toolbarButtons"): + for b in FreeCADGui.Snapper.toolbarButtons: + if b.objectName() == "SnapButtonparallel": + b.toggle() + +class Draft_Snap_Endpoint(): + def GetResources(self): + return {'Pixmap' : 'Snap_Endpoint', + 'MenuText': QtCore.QT_TRANSLATE_NOOP("Draft_Snap_Endpoint", "Endpoint"), + 'ToolTip' : QtCore.QT_TRANSLATE_NOOP("Draft_Snap_Endpoint", "Snaps to endpoints of edges")} + def Activated(self): + if hasattr(FreeCADGui,"Snapper"): + if hasattr(FreeCADGui.Snapper,"toolbarButtons"): + for b in FreeCADGui.Snapper.toolbarButtons: + if b.objectName() == "SnapButtonendpoint": + b.toggle() + +class Draft_Snap_Angle(): + def GetResources(self): + return {'Pixmap' : 'Snap_Angle', + 'MenuText': QtCore.QT_TRANSLATE_NOOP("Draft_Snap_Angle", "Angles"), + 'ToolTip' : QtCore.QT_TRANSLATE_NOOP("Draft_Snap_Angle", "Snaps to 45 and 90 degrees points on arcs and circles")} + def Activated(self): + if hasattr(FreeCADGui,"Snapper"): + if hasattr(FreeCADGui.Snapper,"toolbarButtons"): + for b in FreeCADGui.Snapper.toolbarButtons: + if b.objectName() == "SnapButtonangle": + b.toggle() + +class Draft_Snap_Center(): + def GetResources(self): + return {'Pixmap' : 'Snap_Center', + 'MenuText': QtCore.QT_TRANSLATE_NOOP("Draft_Snap_Center", "Center"), + 'ToolTip' : QtCore.QT_TRANSLATE_NOOP("Draft_Snap_Center", "Snaps to center of circles and arcs")} + def Activated(self): + if hasattr(FreeCADGui,"Snapper"): + if hasattr(FreeCADGui.Snapper,"toolbarButtons"): + for b in FreeCADGui.Snapper.toolbarButtons: + if b.objectName() == "SnapButtoncenter": + b.toggle() + +class Draft_Snap_Extension(): + def GetResources(self): + return {'Pixmap' : 'Snap_Extension', + 'MenuText': QtCore.QT_TRANSLATE_NOOP("Draft_Snap_Extension", "Extension"), + 'ToolTip' : QtCore.QT_TRANSLATE_NOOP("Draft_Snap_Extension", "Snaps to extension of edges")} + def Activated(self): + if hasattr(FreeCADGui,"Snapper"): + if hasattr(FreeCADGui.Snapper,"toolbarButtons"): + for b in FreeCADGui.Snapper.toolbarButtons: + if b.objectName() == "SnapButtonextension": + b.toggle() + +class Draft_Snap_Near(): + def GetResources(self): + return {'Pixmap' : 'Snap_Near', + 'MenuText': QtCore.QT_TRANSLATE_NOOP("Draft_Snap_Near", "Nearest"), + 'ToolTip' : QtCore.QT_TRANSLATE_NOOP("Draft_Snap_Near", "Snaps to nearest point on edges")} + def Activated(self): + if hasattr(FreeCADGui,"Snapper"): + if hasattr(FreeCADGui.Snapper,"toolbarButtons"): + for b in FreeCADGui.Snapper.toolbarButtons: + if b.objectName() == "SnapButtonnear": + b.toggle() + +class Draft_Snap_Ortho(): + def GetResources(self): + return {'Pixmap' : 'Snap_Ortho', + 'MenuText': QtCore.QT_TRANSLATE_NOOP("Draft_Snap_Ortho", "Ortho"), + 'ToolTip' : QtCore.QT_TRANSLATE_NOOP("Draft_Snap_Ortho", "Snaps to orthogonal and 45 degrees directions")} + def Activated(self): + if hasattr(FreeCADGui,"Snapper"): + if hasattr(FreeCADGui.Snapper,"toolbarButtons"): + for b in FreeCADGui.Snapper.toolbarButtons: + if b.objectName() == "SnapButtonortho": + b.toggle() - #--------------------------------------------------------------------------- # Adds the icons & commands to the FreeCAD command manager, and sets defaults #--------------------------------------------------------------------------- @@ -3779,6 +3925,20 @@ FreeCADGui.addCommand('Draft_ToggleSnap',ToggleSnap()) FreeCADGui.addCommand('Draft_ShowSnapBar',ShowSnapBar()) FreeCADGui.addCommand('Draft_ToggleGrid',ToggleGrid()) +# snap commands +FreeCADGui.addCommand('Draft_Snap_Lock',Draft_Snap_Lock()) +FreeCADGui.addCommand('Draft_Snap_Midpoint',Draft_Snap_Midpoint()) +FreeCADGui.addCommand('Draft_Snap_Perpendicular',Draft_Snap_Perpendicular()) +FreeCADGui.addCommand('Draft_Snap_Grid',Draft_Snap_Grid()) +FreeCADGui.addCommand('Draft_Snap_Intersection',Draft_Snap_Intersection()) +FreeCADGui.addCommand('Draft_Snap_Parallel',Draft_Snap_Parallel()) +FreeCADGui.addCommand('Draft_Snap_Endpoint',Draft_Snap_Endpoint()) +FreeCADGui.addCommand('Draft_Snap_Angle',Draft_Snap_Angle()) +FreeCADGui.addCommand('Draft_Snap_Center',Draft_Snap_Center()) +FreeCADGui.addCommand('Draft_Snap_Extension',Draft_Snap_Extension()) +FreeCADGui.addCommand('Draft_Snap_Near',Draft_Snap_Near()) +FreeCADGui.addCommand('Draft_Snap_Ortho',Draft_Snap_Ortho()) + # a global place to look for active draft Command FreeCAD.activeDraftCommand = None diff --git a/src/Mod/Draft/InitGui.py b/src/Mod/Draft/InitGui.py index 1b2e7732f..f1ae9612c 100644 --- a/src/Mod/Draft/InitGui.py +++ b/src/Mod/Draft/InitGui.py @@ -117,11 +117,16 @@ class DraftWorkbench (Workbench): "Draft_SelectGroup","Draft_SelectPlane","Draft_ToggleSnap", "Draft_ShowSnapBar","Draft_ToggleGrid"] self.lineList = ["Draft_UndoLine","Draft_FinishLine","Draft_CloseLine"] + self.snapList = ['Draft_Snap_Lock','Draft_Snap_Midpoint','Draft_Snap_Perpendicular', + 'Draft_Snap_Grid','Draft_Snap_Intersection','Draft_Snap_Parallel', + 'Draft_Snap_Endpoint','Draft_Snap_Angle','Draft_Snap_Center', + 'Draft_Snap_Extension','Draft_Snap_Near','Draft_Snap_Ortho'] self.appendToolbar(QT_TRANSLATE_NOOP("Workbench","Draft creation tools"),self.cmdList) self.appendToolbar(QT_TRANSLATE_NOOP("Workbench","Draft modification tools"),self.modList) self.appendMenu(str(translate("draft","&Draft")),self.cmdList+self.modList) self.appendMenu([str(translate("draft","&Draft")),str(translate("draft","Context tools"))],self.treecmdList) self.appendMenu([str(translate("draft","&Draft")),str(translate("draft","Wire tools"))],self.lineList) + self.appendMenu([str(translate("draft","&Draft")),str(translate("draft","Snapping"))],self.snapList) if hasattr(FreeCADGui,"draftToolBar"): if not hasattr(FreeCADGui.draftToolBar,"loadedPreferences"): FreeCADGui.addPreferencePage(":/ui/userprefs-base.ui","Draft")