diff --git a/src/Mod/Draft/DraftGui.py b/src/Mod/Draft/DraftGui.py index 45702fb4a2..41eb45cf3b 100644 --- a/src/Mod/Draft/DraftGui.py +++ b/src/Mod/Draft/DraftGui.py @@ -1139,7 +1139,10 @@ class DraftToolBar: self.displayPoint() elif txt.endsWith("z"): self.constrain("z") - self.displayPoint() + self.displayPoint() + elif txt.endsWith("l"): + self.constrain("angle") + self.displayPoint() elif txt.endsWith("c"): if self.closeButton.isVisible(): self.closeLine() @@ -1362,7 +1365,9 @@ class DraftToolBar: FreeCADGui.Snapper.showradius() def constrain(self,val): - if self.mask == val: + if val == "angle": + FreeCADGui.Snapper.setAngle() + elif self.mask == val: self.mask = None if hasattr(FreeCADGui,"Snapper"): FreeCADGui.Snapper.mask = None diff --git a/src/Mod/Draft/DraftSnap.py b/src/Mod/Draft/DraftSnap.py index 248156d385..6ba7f3277f 100644 --- a/src/Mod/Draft/DraftSnap.py +++ b/src/Mod/Draft/DraftSnap.py @@ -764,6 +764,13 @@ class Snapper: self.toolbar.hide() self.mask = None self.lastArchPoint = None + + def setAngle(self): + "keeps the current angle" + if isinstance(self.mask,FreeCAD.Vector): + self.mask = None + elif self.trackLine.Visible: + self.mask = self.trackLine.p2().sub(self.trackLine.p1()) def constrain(self,point,basepoint=None,axis=None): '''constrain(point,basepoint=None,axis=None: Returns a @@ -809,8 +816,15 @@ class Snapper: self.constraintAxis = FreeCAD.DraftWorkingPlane.u elif self.affinity == "y": self.constraintAxis = FreeCAD.DraftWorkingPlane.v - else: + elif self.affinity == "z": self.constraintAxis = FreeCAD.DraftWorkingPlane.axis + elif isinstance(self.affinity,FreeCAD.Vector): + self.constraintAxis = self.affinity + else: + self.constraintAxis = None + + if not self.constraintAxis: + return point # calculating constrained point cdelta = DraftVecUtils.project(delta,self.constraintAxis)