Draft: fixes in line/wire creation by angle

This commit is contained in:
Yorik van Havre 2016-02-18 20:09:19 -02:00
parent ac4d466443
commit fa6046ea19
2 changed files with 19 additions and 12 deletions

View File

@ -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):

View File

@ -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: