]> Shamusworld >> Repos - ttedit/commitdiff
Minor fixes to polygon adding, added Tau constants to math package.
authorShamus Hammons <jlhamm@acm.org>
Tue, 15 Mar 2016 16:01:25 +0000 (11:01 -0500)
committerShamus Hammons <jlhamm@acm.org>
Tue, 15 Mar 2016 16:01:25 +0000 (11:01 -0500)
src/editwindow.cpp
src/mathconstants.h
src/painter.cpp
src/vector.cpp

index e4f7d7b81dd47f2e691ff2548042861845573cbf..d24c447ab6b279bdab42760a7c804c6c61a748b8 100644 (file)
@@ -186,6 +186,23 @@ void EditWindow::paintEvent(QPaintEvent * /*event*/)
                }
        }
 
+       // Draw highlighted point on poly add tool
+       if (tool == TOOLAddPoly)
+       {
+               painter.SetPen(QPen(Qt::red, 1.0, Qt::SolidLine));
+
+               if (addPointOnCurve)
+               {
+                       painter.DrawSquareDotN(addPoint, 7);
+                       painter.DrawSquareDotN(addPoint, 9);
+               }
+               else
+               {
+                       painter.DrawRoundDotN(addPoint, 7);
+                       painter.DrawRoundDotN(addPoint, 9);
+               }
+       }
+
        // Draw curve formed by points
 
        painter.SetPen(QPen(Qt::black, 1.0, Qt::SolidLine));
@@ -393,6 +410,8 @@ void EditWindow::mousePressEvent(QMouseEvent * event)
 
                        update();
                }
+// Moved to mouse up routine, so we can slide the point around
+#if 0
                else if (tool == TOOLAddPoly)   // "Add Poly" tool
                {
 #ifdef DEBUGFOO
@@ -415,6 +434,7 @@ WriteLogMsg("Adding point... # polys: %u, # points: %u", pts.GetNumPolys(), pts.
 WriteLogMsg(" --> [# polys: %u, # points: %u]\n", pts.GetNumPolys(), pts.GetNumPoints());
 #endif
                }
+#endif
                else if (tool == TOOLSelect || tool == TOOLPolySelect)
                {
                        if (pts.GetNumPoints() > 0)
@@ -516,7 +536,7 @@ void EditWindow::mouseMoveEvent(QMouseEvent * event)
                if (tool == TOOLAddPt || tool == TOOLAddPoly || tool == TOOLSelect)
                {
                        // Bail out if we have the select tool and no points yet...
-                       if (tool == TOOLSelect && pts.GetNumPoints() == 0)
+                       if ((tool == TOOLSelect) && (pts.GetNumPoints() == 0))
                                return;
 
 //                     QPoint pt2 = GetAdjustedMousePosition(event);
@@ -525,8 +545,10 @@ void EditWindow::mouseMoveEvent(QMouseEvent * event)
                        if (tool != TOOLSelect)
                        {
                                addPoint = pt2;
+                               ptHighlight = -1;
                                // Prolly should move this to the key handlers below...
-                               addPointOnCurve = ((event->modifiers() == Qt::ShiftModifier) || (event->modifiers() == Qt::ControlModifier) ? false : true);
+//now we do! :-D
+//                             addPointOnCurve = ((event->modifiers() == Qt::ShiftModifier) || (event->modifiers() == Qt::ControlModifier) ? false : true);
                        }
                        else
                                pts.SetXY(ptHighlight, pt2.x, pt2.y);
@@ -699,6 +721,7 @@ void EditWindow::mouseMoveEvent(QMouseEvent * event)
 
                ptPrevious = Vector(event->x(), event->y());
                addPoint = Painter::QtToCartesianCoords(Vector(event->x(), event->y()));
+//handled by real key handlers now...
 //             addPointOnCurve = ((event->modifiers() == Qt::ShiftModifier) || (event->modifiers() == Qt::ControlModifier) ? false : true);
 
                if (tool == TOOLAddPoly)
@@ -767,6 +790,28 @@ void EditWindow::mouseReleaseEvent(QMouseEvent * event)
                        selectionInProgress = false;
                        update();
                }
+               else if (tool == TOOLAddPoly)   // "Add Poly" tool
+               {
+#ifdef DEBUGFOO
+WriteLogMsg("Adding point... # polys: %u, # points: %u", pts.GetNumPolys(), pts.GetNumPoints());
+#endif
+                       if (polyFirstPoint)
+                       {
+                               polyFirstPoint = false;
+                               pts.AddNewPolyAtEnd();
+                       }
+
+//                     QPoint pt = GetAdjustedMousePosition(event);
+                       Vector pt = Painter::QtToCartesianCoords(Vector(event->x(), event->y()));
+//printf("GetAdjustedMousePosition = %i, %i\n", pt.x(), pt.y());
+                       // Append a point to the end of the structure
+                       pts += IPoint(pt.x, pt.y, addPointOnCurve);
+//                     ptHighlight = pts.GetNumPoints() - 1;
+                       update();
+#ifdef DEBUGFOO
+WriteLogMsg(" --> [# polys: %u, # points: %u]\n", pts.GetNumPolys(), pts.GetNumPoints());
+#endif
+               }
        }
 
        event->accept();
@@ -775,6 +820,15 @@ void EditWindow::mouseReleaseEvent(QMouseEvent * event)
 
 void EditWindow::keyPressEvent(QKeyEvent * event)
 {
+       // We do this here because of the ptHighlight nonsense. If we're in
+       // the add poly tool, we'll never see this if it's under the 'sanity'
+       // check (which is needed for the arrow key shite, but still...)
+       if ((event->key() == Qt::Key_Shift) || (event->key() == Qt::Key_Control))
+       {
+               addPointOnCurve = false;
+               update();
+       }
+
        // Sanity checking...
        if (ptHighlight == -1)
                return;
@@ -789,13 +843,10 @@ void EditWindow::keyPressEvent(QKeyEvent * event)
                pts.SetXY(ptHighlight, pts.GetX(ptHighlight) + 1, pts.GetY(ptHighlight));
        else if (event->key() == Qt::Key_Left)
                pts.SetXY(ptHighlight, pts.GetX(ptHighlight) - 1, pts.GetY(ptHighlight));
-       else if ((event->key() == Qt::Key_Shift) || (event->key() == Qt::Key_Control))
-       {
-               addPointOnCurve = false;
-       }
        else
                return;
 
+//Not need but you need to call the base class for some reason??
 //     event->accept();
        update();
        ((TTEdit *)qApp)->charWnd->MakePathFromPoints(&pts);
index 42f4940343c5119aa97867f63e225e01f643657e..b0e516e339fead7ffe6c0cffb80ce12fa7ea1768 100644 (file)
@@ -1,7 +1,7 @@
 // Mathematical Constants used by Architektonas
 //
 // Part of the Architektonas Project
-// (C) 2011 Underground Software
+// (C) 2016 Underground Software
 // See the README and GPLv3 files for licensing and warranty information
 //
 // NOTE: Since this has no code associated with it, there is no corresponding
 // JLH = James Hammons <jlhamm@acm.org>
 //
 // WHO  WHEN        WHAT
-// ---  ----------  ------------------------------------------------------------
+// ---  ----------  -----------------------------------------------------------
 // JLH  04/01/2011  Created this file
+// JLH  03/15/2016  Added Tau constants, removed Pi constants
 //
 
-#define PI                 3.14159265358979323846264338327
-#define PI_OVER_2          (PI / 2.0)
-#define PI3_OVER_2         ((3.0 * PI) / 2.0)
-#define PI_TIMES_2         (PI * 2.0)
-#define RADIANS_TO_DEGREES (180.0 / PI)
-#define DEGREES_TO_RADIANS (PI / 180.0)
+#define TAU                6.28318530717958647692528676655
+#define TAU_1QTR           (TAU * 0.25)
+#define TAU_2QTR           (TAU * 0.50)
+#define TAU_3QTR           (TAU * 0.75)
+#define RADIANS_TO_DEGREES (360.0 / TAU)
+#define DEGREES_TO_RADIANS (TAU / 360.0)
+
+// Convenience definitions
+#define HALF_TAU           (TAU_2QTR)
+#define QTR_TAU            (TAU_1QTR)
+#define THREE_QTR_TAU      (TAU_3QTR)
 
index e2a457a5499a3cff2ba5732e9cc399080c57986a..869843933fd7f9726554dff7ba0c5c280499de2e 100644 (file)
@@ -8,7 +8,7 @@
 // JLH = James Hammons <jlhamm@acm.org>
 //
 // WHO  WHEN        WHAT
-// ---  ----------  ------------------------------------------------------------
+// ---  ----------  -----------------------------------------------------------
 // JLH  09/20/2011  Created this file
 //
 
@@ -148,11 +148,19 @@ void Painter::DrawAngledText(Vector center, double angle, QString text, double s
        float yOffset = -12.0 * Global::zoom * size;
 
        // Fix text so it isn't upside down...
+#if 0
        if ((angle > PI * 0.5) && (angle < PI * 1.5))
        {
                angle += PI;
                yOffset = 12.0 * Global::zoom * size;
        }
+#else
+       if ((angle > QTR_TAU) && (angle < THREE_QTR_TAU))
+       {
+               angle += HALF_TAU;
+               yOffset = 12.0 * Global::zoom * size;
+       }
+#endif
 
        textBox.translate(0, yOffset);
        painter->save();
@@ -230,7 +238,11 @@ void Painter::DrawArrowHandle(Vector center, double angle)
 
        // Since we're drawing directly on the screen, the Y is inverted. So we use
        // the mirror of the angle.
+#if 0
        double orthoAngle = -angle + (PI / 2.0);
+#else
+       double orthoAngle = -angle + QTR_TAU;
+#endif
        Vector orthogonal = Vector(cos(orthoAngle), sin(orthoAngle));
        Vector unit = Vector(cos(-angle), sin(-angle));
 
@@ -256,7 +268,11 @@ void Painter::DrawArrowToLineHandle(Vector center, double angle)
 
        // Since we're drawing directly on the screen, the Y is inverted. So we use
        // the mirror of the angle.
+#if 0
        double orthoAngle = -angle + (PI / 2.0);
+#else
+       double orthoAngle = -angle + QTR_TAU;
+#endif
        Vector orthogonal = Vector(cos(orthoAngle), sin(orthoAngle));
        Vector unit = Vector(cos(-angle), sin(-angle));
 
@@ -366,7 +382,11 @@ void Painter::DrawArrowhead(Vector head, Vector tail, double size)
 
        // We draw the arrowhead aligned along the line from tail to head
        double angle = Vector(head - tail).Angle();
+#if 0
        double orthoAngle = angle + (PI / 2.0);
+#else
+       double orthoAngle = angle + QTR_TAU;
+#endif
        Vector orthogonal = Vector(cos(orthoAngle), sin(orthoAngle));
        Vector unit = Vector(head - tail).Unit();
 
index fe627cd329adb397f28c3447512dfcad265c6f02..baa0422869b125aa24dca41e8d1c32ed016b58cd 100644 (file)
@@ -162,11 +162,7 @@ void vector::zero(const double epsilon/*= 1.0e-6*/)
 #include "vector.h"
 
 #include <math.h>                                                              // For sqrt()
-//#include "mathconstants.h"
-
-#define PI 3.14159265358979323846264338327
-#define RADIANS_TO_DEGREES (180.0 / PI)
-#define DEGREES_TO_RADIANS (PI / 180.0)
+#include "mathconstants.h"
 
 
 // Vector implementation
@@ -354,11 +350,11 @@ double Vector::Magnitude(void)
 
 double Vector::Angle(void)
 {
-       // acos returns a value between zero and PI, which means we don't know which
-       // quadrant the angle is in... Though, if the y-coordinate of the vector is
-       // negative, that means that the angle is in quadrants III - IV.
+       // acos returns a value between zero and PI, which means we don't know
+       // which quadrant the angle is in... Though, if the y-coordinate of the
+       // vector is negative, that means that the angle is in quadrants III - IV.
        double rawAngle = acos(Unit().x);
-       double correctedAngle = (y < 0 ? (2.0 * PI) - rawAngle : rawAngle);
+       double correctedAngle = (y < 0 ? TAU - rawAngle : rawAngle);
 
        return correctedAngle;
 }