From fa6046ea195ebf8bc4c0f9ca5a09cc1da1cc9982 Mon Sep 17 00:00:00 2001 From: Yorik van Havre Date: Thu, 18 Feb 2016 20:09:19 -0200 Subject: [PATCH] Draft: fixes in line/wire creation by angle --- src/Mod/Draft/DraftGui.py | 25 +++++++++++++++---------- src/Mod/Draft/DraftSnap.py | 6 ++++-- 2 files changed, 19 insertions(+), 12 deletions(-) diff --git a/src/Mod/Draft/DraftGui.py b/src/Mod/Draft/DraftGui.py index 353d51353..6bc11f95f 100644 --- a/src/Mod/Draft/DraftGui.py +++ b/src/Mod/Draft/DraftGui.py @@ -239,6 +239,7 @@ class DraftToolBar: self.fillmode = Draft.getParam("fillmode",False) self.mask = None self.alock = False + self.angle = None self.DECIMALS = FreeCAD.ParamGet("User parameter:BaseApp/Preferences/Units").GetInt("Decimals",2) self.FORMAT = makeFormatSpec(self.DECIMALS,'Length') self.AFORMAT = makeFormatSpec(self.DECIMALS,'Angle') @@ -760,6 +761,7 @@ class DraftToolBar: self.labelangle.show() self.angleValue.show() self.angleLock.show() + self.angleLock.setChecked(False) def hideXYZ(self): ''' turn off all the point entry widgets ''' @@ -1503,7 +1505,8 @@ class DraftToolBar: if last and dp and plane: self.lengthValue.setText(displayExternal(dp.Length,self.DECIMALS,'Length')) a = math.degrees(-DraftVecUtils.angle(dp,plane.u,plane.axis)) - self.angleValue.setText(displayExternal(a,self.DECIMALS,'Angle')) + if not self.angleLock.isChecked(): + self.angleValue.setText(displayExternal(a,self.DECIMALS,'Angle')) if not mask: # automask if a in [0,180,-180]: @@ -1740,30 +1743,32 @@ class DraftToolBar: self.xValue.setText(displayExternal(v.x,self.DECIMALS,'Length')) self.yValue.setText(displayExternal(v.y,self.DECIMALS,'Length')) self.zValue.setText(displayExternal(v.z,self.DECIMALS,'Length')) - self.xValue.setFocus() - self.xValue.selectAll() def changeAngleValue(self,d): v = FreeCAD.Vector(self.x,self.y,self.z) a = DraftVecUtils.angle(v,FreeCAD.DraftWorkingPlane.u,FreeCAD.DraftWorkingPlane.axis) a = math.radians(d)+a v=DraftVecUtils.rotate(v,a,FreeCAD.DraftWorkingPlane.axis) + self.angle = v self.xValue.setText(displayExternal(v.x,self.DECIMALS,'Length')) self.yValue.setText(displayExternal(v.y,self.DECIMALS,'Length')) self.zValue.setText(displayExternal(v.z,self.DECIMALS,'Length')) - self.xValue.setFocus() - self.xValue.selectAll() + if self.angleLock.isChecked(): + FreeCADGui.Snapper.setAngle(self.angle) - def toggleAngle(self,bool): + def toggleAngle(self,b): self.alock = self.angleLock.isChecked() - FreeCADGui.Snapper.setAngle() - - + if b: + FreeCADGui.Snapper.setAngle(self.angle) + else: + FreeCADGui.Snapper.setAngle() + self.angle = None + #--------------------------------------------------------------------------- # TaskView operations #--------------------------------------------------------------------------- - + def setWatchers(self): class DraftCreateWatcher: def __init__(self): diff --git a/src/Mod/Draft/DraftSnap.py b/src/Mod/Draft/DraftSnap.py index 66590b9e8..3978849b2 100644 --- a/src/Mod/Draft/DraftSnap.py +++ b/src/Mod/Draft/DraftSnap.py @@ -897,9 +897,11 @@ class Snapper: if self.trackLine: self.trackLine.off() - def setAngle(self): + def setAngle(self,delta=None): "keeps the current angle" - if isinstance(self.mask,FreeCAD.Vector): + if delta: + self.mask = delta + elif isinstance(self.mask,FreeCAD.Vector): self.mask = None elif self.trackLine: if self.trackLine.Visible: