From b8d189c0ad2d49cc9c5e456b89919fdb8d490e3a Mon Sep 17 00:00:00 2001 From: DarkPhoenix Date: Wed, 3 Jul 2019 10:14:55 +0300 Subject: [PATCH] Change vector behavior to be consistent with trigonometry --- gui/graphFrame/panel.py | 4 ++-- gui/graphFrame/vector.py | 14 +++++++------- 2 files changed, 9 insertions(+), 9 deletions(-) diff --git a/gui/graphFrame/panel.py b/gui/graphFrame/panel.py index 4f0105387..9e1558a83 100644 --- a/gui/graphFrame/panel.py +++ b/gui/graphFrame/panel.py @@ -77,7 +77,7 @@ class GraphControlPanel(wx.Panel): self.srcVectorSizer = wx.BoxSizer(wx.VERTICAL) self.srcVectorLabel = wx.StaticText(self, wx.ID_ANY, '') self.srcVectorSizer.Add(self.srcVectorLabel, 0, wx.ALIGN_CENTER_HORIZONTAL| wx.BOTTOM, 5) - self.srcVector = VectorPicker(self, style=wx.NO_BORDER, size=75, offset=90) + self.srcVector = VectorPicker(self, style=wx.NO_BORDER, size=75, offset=0) self.srcVector.Bind(VectorPicker.EVT_VECTOR_CHANGED, self.OnFieldChanged) self.srcVectorSizer.Add(self.srcVector, 0, wx.SHAPED | wx.ALIGN_CENTER_HORIZONTAL | wx.ALIGN_CENTER_VERTICAL | wx.ALL, 0) graphOptsSizer.Add(self.srcVectorSizer, 0, wx.EXPAND | wx.LEFT, 15) @@ -85,7 +85,7 @@ class GraphControlPanel(wx.Panel): self.tgtVectorSizer = wx.BoxSizer(wx.VERTICAL) self.tgtVectorLabel = wx.StaticText(self, wx.ID_ANY, '') self.tgtVectorSizer.Add(self.tgtVectorLabel, 0, wx.ALIGN_CENTER_HORIZONTAL | wx.BOTTOM, 5) - self.tgtVector = VectorPicker(self, style=wx.NO_BORDER, size=75, offset=90) + self.tgtVector = VectorPicker(self, style=wx.NO_BORDER, size=75, offset=0) self.tgtVector.Bind(VectorPicker.EVT_VECTOR_CHANGED, self.OnFieldChanged) self.tgtVectorSizer.Add(self.tgtVector, 0, wx.SHAPED | wx.ALIGN_CENTER_HORIZONTAL | wx.ALIGN_CENTER_VERTICAL | wx.ALL, 0) graphOptsSizer.Add(self.tgtVectorSizer, 0, wx.EXPAND | wx.LEFT, 10) diff --git a/gui/graphFrame/vector.py b/gui/graphFrame/vector.py index a9224367b..7b4a278ce 100644 --- a/gui/graphFrame/vector.py +++ b/gui/graphFrame/vector.py @@ -52,9 +52,9 @@ class VectorPicker(wx.Window): @property def _tooltip(self): if self._directionOnly: - return 'Click to set angle\nRight-click to snap to 15% angle' + return 'Click to set angle\nShift-click or right-click to snap to 15% angle' else: - return 'Click to set angle and velocity\nRight-click to snap to 15% angle/5% speed increments\nMouse wheel to change velocity only' + return 'Click to set angle and velocity\nShift-click or right-click to snap to 15% angle/5% speed increments\nMouse wheel to change velocity only' @property def _length(self): @@ -112,8 +112,8 @@ class VectorPicker(wx.Window): dc.SetBrush(wx.WHITE_BRUSH) dc.DrawCircle(radius + 2, radius + 2, radius) a = math.radians(self._angle + self._offset) - x = math.sin(a) * radius - y = math.cos(a) * radius + x = math.cos(a) * radius + y = math.sin(a) * radius dc.DrawLine(radius + 2, radius + 2, radius + 2 + x * self._length, radius + 2 - y * self._length) dc.SetBrush(wx.BLACK_BRUSH) dc.DrawCircle(radius + 2 + x * self._length, radius + 2 - y * self._length, 2) @@ -205,11 +205,11 @@ class VectorPicker(wx.Window): x = x - center y = center - y angle = self._angle - length = min((x * x + y * y) ** 0.5 / (center - 2), 1.0) + length = min((x ** 2 + y ** 2) ** 0.5 / (center - 2), 1.0) if length < 0.01: length = 0 else: - angle = ((math.degrees(math.atan2(x, y)) - self._offset + 180) % 360) - 180 + angle = ((math.degrees(math.atan2(y, x)) - self._offset + 180) % 360) - 180 if (self._right and not self._left) or event.ShiftDown(): angle = round(angle / 15.0) * 15.0 # floor() for length to make it easier to hit 0%, can still hit 100% outside the circle @@ -218,7 +218,7 @@ class VectorPicker(wx.Window): self._angle = angle self._length = length self.Refresh() - if self._right and not self._left: + if (self._right and not self._left) or event.ShiftDown(): self.SendChangeEvent() def SendChangeEvent(self):