From fd609b4e37ec18b942e9bc606b42a43450e33deb Mon Sep 17 00:00:00 2001 From: Roy-043 Date: Mon, 16 Oct 2023 23:29:44 +0200 Subject: [PATCH] Draft: Fix angular dimension issue caused by #10556 Forum topic: https://forum.freecad.org/viewtopic.php?t=81956 This PR basically reverts PR #10556. The angular offset required for the Draft_Arc command is handled in the gui_arc.py file instead. Also removed the unused `urotated` variable from that file. --- src/Mod/Draft/draftguitools/gui_arcs.py | 17 +++++++------- src/Mod/Draft/draftguitools/gui_trackers.py | 26 +++++++-------------- 2 files changed, 17 insertions(+), 26 deletions(-) diff --git a/src/Mod/Draft/draftguitools/gui_arcs.py b/src/Mod/Draft/draftguitools/gui_arcs.py index 542b0813675e..30255498ed9d 100644 --- a/src/Mod/Draft/draftguitools/gui_arcs.py +++ b/src/Mod/Draft/draftguitools/gui_arcs.py @@ -284,10 +284,11 @@ def action(self, arg): elif self.step == 2: # choose first angle self.ui.labelRadius.setText(translate("draft", "Aperture angle")) self.ui.radiusValue.setToolTip(translate("draft", "Aperture angle")) + ang_offset = DraftVecUtils.angle(self.wp.u, + self.arctrack.getDeviation(), + self.wp.axis) + self.arctrack.setStartAngle(self.firstangle - ang_offset) self.step = 3 - # scale center->point vector for proper display - # u = DraftVecUtils.scaleTo(self.point.sub(self.center), self.rad) obsolete? - self.arctrack.setStartAngle(self.firstangle) _msg(translate("draft", "Pick aperture")) else: # choose second angle self.step = 4 @@ -449,12 +450,10 @@ def numericRadius(self, rad): self.ui.labelRadius.setText(translate("draft", "Aperture angle")) self.ui.radiusValue.setToolTip(translate("draft", "Aperture angle")) self.firstangle = math.radians(rad) - if DraftVecUtils.equals(self.wp.axis, App.Vector(1, 0, 0)): - u = App.Vector(0, self.rad, 0) - else: - u = DraftVecUtils.scaleTo(App.Vector(1, 0, 0).cross(self.wp.axis), self.rad) - urotated = DraftVecUtils.rotate(u, math.radians(rad), self.wp.axis) - self.arctrack.setStartAngle(self.firstangle) + ang_offset = DraftVecUtils.angle(self.wp.u, + self.arctrack.getDeviation(), + self.wp.axis) + self.arctrack.setStartAngle(self.firstangle - ang_offset) self.step = 3 self.ui.radiusValue.setText("") self.ui.radiusValue.setFocus() diff --git a/src/Mod/Draft/draftguitools/gui_trackers.py b/src/Mod/Draft/draftguitools/gui_trackers.py index 5dd232932b65..a3d1fc89033b 100644 --- a/src/Mod/Draft/draftguitools/gui_trackers.py +++ b/src/Mod/Draft/draftguitools/gui_trackers.py @@ -528,7 +528,7 @@ def recompute(self): class arcTracker(Tracker): """An arc tracker.""" - + # Note: used by the Arc command but also for angular dimensions. def __init__(self, dotted=False, scolor=None, swidth=None, start=0, end=math.pi*2): self.circle = None @@ -539,10 +539,6 @@ def __init__(self, dotted=False, scolor=None, swidth=None, self.sep = coin.SoSeparator() self.autoinvert = True self.normal = FreeCAD.DraftWorkingPlane.axis - ang = DraftVecUtils.angle(self.getDeviation(), - FreeCAD.DraftWorkingPlane.u, - self.normal) - self.ang_offset = math.degrees(ang) self.recompute() super().__init__(dotted, scolor, swidth, [self.trans, self.sep], name="arcTracker") @@ -579,7 +575,7 @@ def getAngle(self, pt): """Return the angle of a given vector in radians.""" c = self.trans.translation.getValue() center = Vector(c[0], c[1], c[2]) - return DraftVecUtils.angle(self.getDeviation(), pt.sub(center), self.normal) + return DraftVecUtils.angle(pt.sub(center), self.getDeviation(), self.normal) def getAngles(self): """Return the start and end angles in degrees.""" @@ -587,11 +583,11 @@ def getAngles(self): def setStartPoint(self, pt): """Set the start angle from a point.""" - self.setStartAngle(self.getAngle(pt)) + self.setStartAngle(-self.getAngle(pt)) def setEndPoint(self, pt): """Set the end angle from a point.""" - self.setEndAngle(self.getAngle(pt)) + self.setEndAngle(-self.getAngle(pt)) def setApertureAngle(self, ang): """Set the end angle by giving the aperture angle.""" @@ -620,16 +616,12 @@ def recompute(self): if self.circle: self.sep.removeChild(self.circle) self.circle = None - if self.autoinvert is False: - ang_sta = self.endangle - ang_end = self.startangle - elif self.endangle < self.startangle: - ang_sta = self.endangle + self.ang_offset - ang_end = self.startangle + self.ang_offset + if (self.endangle < self.startangle) or not self.autoinvert: + c = Part.makeCircle(1, Vector(0, 0, 0), + self.normal, self.endangle, self.startangle) else: - ang_sta = self.startangle + self.ang_offset - ang_end = self.endangle + self.ang_offset - c = Part.makeCircle(1, Vector(0, 0, 0), self.normal, ang_sta, ang_end) + c = Part.makeCircle(1, Vector(0, 0, 0), + self.normal, self.startangle, self.endangle) buf = c.writeInventor(2, 0.01) try: ivin = coin.SoInput()