From bff34a36ec67d87d9f47efe174c7f0bc3d55829a Mon Sep 17 00:00:00 2001 From: Yorik van Havre Date: Thu, 16 May 2019 14:38:46 -0300 Subject: [PATCH] Draft: Fixed regression bug in Rotate --- src/Mod/Draft/Draft.py | 8 ++++++-- src/Mod/Draft/DraftGui.py | 25 +++++++++++++++++++------ src/Mod/Draft/DraftTools.py | 25 ++++++++++++++----------- 3 files changed, 39 insertions(+), 19 deletions(-) diff --git a/src/Mod/Draft/Draft.py b/src/Mod/Draft/Draft.py index b7c77a25bd..c75fa36c68 100644 --- a/src/Mod/Draft/Draft.py +++ b/src/Mod/Draft/Draft.py @@ -6117,8 +6117,12 @@ class _ShapeString(_DraftObject): sep_wirelist = [] face = Part.Face(wire2Face) face.validate() - if face.Surface.Axis.z < 0.0: - face.reverse() + try: + # some fonts fail here + if face.Surface.Axis.z < 0.0: + face.reverse() + except: + pass compFaces.append(face) ret = Part.Compound(compFaces) return ret diff --git a/src/Mod/Draft/DraftGui.py b/src/Mod/Draft/DraftGui.py index 6e9c8667f8..8efda15e35 100644 --- a/src/Mod/Draft/DraftGui.py +++ b/src/Mod/Draft/DraftGui.py @@ -364,6 +364,8 @@ class DraftToolBar: self.x = 0 self.y = 0 self.z = 0 + self.radius = 0 + self.offset = 0 self.uiloader = FreeCADGui.UiLoader() self.autogroup = None self.isCenterPlane = False @@ -916,6 +918,12 @@ class DraftToolBar: #--------------------------------------------------------------------------- def taskUi(self,title="Draft",extra=None,icon="Draft_Draft"): + # reset InputField values + self.x = 0 + self.y = 0 + self.z = 0 + self.radius = 0 + self.offset = 0 if self.taskmode: self.isTaskOn = True todo.delay(FreeCADGui.Control.closeDialog,None) @@ -973,6 +981,9 @@ class DraftToolBar: elif f=="z": self.zValue.setFocus() self.zValue.selectAll() + elif f=="radius": + self.radiusValue.setFocus() + self.radiusValue.selectAll() def selectPlaneUi(self): self.taskUi(title=translate("draft", "Working plane setup"),icon="Draft_SelectPlane") @@ -1196,6 +1207,8 @@ class DraftToolBar: self.labelRadius.show() self.radiusValue.setText(FreeCAD.Units.Quantity(0,FreeCAD.Units.Length).UserString) self.radiusValue.show() + todo.delay(self.radiusValue.setFocus,None) + self.radiusValue.selectAll() def textUi(self): self.hideXYZ() @@ -1542,16 +1555,16 @@ class DraftToolBar: try: #rad=float(self.radiusValue.text()) rad = self.radius - except ValueError: - pass + except (ValueError, AttributeError): + print("debug: DraftGui.validatePoint: AttributeError") else: self.sourceCmd.numericRadius(rad) elif (self.offsetLabel.isVisible()): try: #offset=float(self.offsetValue.text()) offset = self.offset - except ValueError: - pass + except (ValueError, AttributeError): + print("debug: DraftGui.validatePoint: AttributeError") else: self.sourceCmd.offsetHandler(offset) elif (self.labelx.isVisible()): @@ -1562,8 +1575,8 @@ class DraftToolBar: numy = self.y #numz=float(self.zValue.text()) numz = self.z - except: - pass + except (ValueError, AttributeError): + print("debug: DraftGui.validatePoint: AttributeError") else: if self.pointcallback: self.pointcallback(FreeCAD.Vector(numx,numy,numz),self.relativeMode) diff --git a/src/Mod/Draft/DraftTools.py b/src/Mod/Draft/DraftTools.py index f348c19a84..0cff5ad134 100644 --- a/src/Mod/Draft/DraftTools.py +++ b/src/Mod/Draft/DraftTools.py @@ -557,6 +557,7 @@ class Line(Creator): self.ui.wireUi(name) else: self.ui.lineUi(name) + self.ui.setTitle(translate("draft", "Line")) if sys.version_info.major < 3: if isinstance(self.featureName,unicode): self.featureName = self.featureName.encode("utf8") @@ -2806,7 +2807,7 @@ class Rotate(Modifier): self.center = None self.ui.arcUi() self.ui.modUi() - self.ui.setTitle("Rotate") + self.ui.setTitle(translate("draft","Rotate")) self.arctrack = arcTracker() self.call = self.view.addEventCallback("SoEvent",self.action) msg(translate("draft", "Pick rotation center:")+"\n") @@ -2882,7 +2883,7 @@ class Rotate(Modifier): self.ui.radiusUi() self.ui.radiusValue.setText(FreeCAD.Units.Quantity(0,FreeCAD.Units.Angle).UserString) self.ui.hasFill.hide() - self.ui.labelRadius.setText("Base angle") + self.ui.labelRadius.setText(translate("draft","Base angle")) self.arctrack.setCenter(self.center) for ghost in self.ghosts: ghost.center(self.center) @@ -2892,7 +2893,7 @@ class Rotate(Modifier): self.planetrack.set(self.point) def set_start_point(self): - self.ui.labelRadius.setText("Rotation") + self.ui.labelRadius.setText(translate("draft","Rotation")) self.rad = DraftVecUtils.dist(self.point,self.center) self.arctrack.on() self.arctrack.setStartPoint(self.point) @@ -3007,34 +3008,36 @@ class Rotate(Modifier): DraftVecUtils.toString(self.center), DraftVecUtils.toString(plane.axis), is_copy - )]) + ), + 'FreeCAD.ActiveDocument.recompute()']) def numericInput(self,numx,numy,numz): "this function gets called by the toolbar when valid x, y, and z have been entered there" self.center = Vector(numx,numy,numz) self.node = [self.center] self.arctrack.setCenter(self.center) - if self.ghost: - self.ghost.center(self.center) + for ghost in self.ghosts: + ghost.center(self.center) self.ui.radiusUi() self.ui.hasFill.hide() - self.ui.labelRadius.setText("Base angle") + self.ui.labelRadius.setText(translate("draft","Base angle")) self.step = 1 msg(translate("draft", "Pick base angle:")+"\n") def numericRadius(self,rad): "this function gets called by the toolbar when valid radius have been entered there" if (self.step == 1): - self.ui.labelRadius.setText("Rotation") + self.ui.labelRadius.setText(translate("draft","Rotation")) self.firstangle = math.radians(rad) self.arctrack.setStartAngle(self.firstangle) self.arctrack.on() - if self.ghost: - self.ghost.on() + for ghost in self.ghosts: + ghost.on() self.step = 2 msg(translate("draft", "Pick rotation angle:")+"\n") else: - self.rotate(math.radians(rad),self.ui.isCopy.isChecked()) + self.angle = math.radians(rad) + self.rotate(self.ui.isCopy.isChecked()) self.finish(cont=True)