]> Shamusworld >> Repos - architektonas/commitdiff
Added new toolbar icons, added arrowhead rendering to Painter class.
authorShamus Hammons <jlhamm@acm.org>
Fri, 3 Feb 2012 22:10:46 +0000 (22:10 +0000)
committerShamus Hammons <jlhamm@acm.org>
Fri, 3 Feb 2012 22:10:46 +0000 (22:10 +0000)
12 files changed:
res/add-arc-tool.png [new file with mode: 0644]
res/add-circle-tool.png [new file with mode: 0644]
res/add-line-tool.png [new file with mode: 0644]
res/add-polygon-tool.png [new file with mode: 0644]
res/architektonas.qrc
res/delete-tool.png [new file with mode: 0644]
res/rotate-tool.png [new file with mode: 0644]
src/applicationwindow.cpp
src/applicationwindow.h
src/dimension.cpp
src/painter.cpp
src/painter.h

diff --git a/res/add-arc-tool.png b/res/add-arc-tool.png
new file mode 100644 (file)
index 0000000..61c931c
Binary files /dev/null and b/res/add-arc-tool.png differ
diff --git a/res/add-circle-tool.png b/res/add-circle-tool.png
new file mode 100644 (file)
index 0000000..c971abc
Binary files /dev/null and b/res/add-circle-tool.png differ
diff --git a/res/add-line-tool.png b/res/add-line-tool.png
new file mode 100644 (file)
index 0000000..1f220a2
Binary files /dev/null and b/res/add-line-tool.png differ
diff --git a/res/add-polygon-tool.png b/res/add-polygon-tool.png
new file mode 100644 (file)
index 0000000..4f22d9d
Binary files /dev/null and b/res/add-polygon-tool.png differ
index c3e6385d80e8e0c4ac6304bf949a6b06f7802dea..0ff0eceb1b9b5c3ffe3d930402fdb6ff48a5a707 100644 (file)
@@ -1,11 +1,17 @@
 <!DOCTYPE RCC><RCC version="1.0">
        <qresource prefix="/res">
                <file>about-logo.png</file>
+               <file>add-arc-tool.png</file>
+               <file>add-circle-tool.png</file>
+               <file>add-line-tool.png</file>
+               <file>add-polygon-tool.png</file>
                <file>atns-icon.png</file>
+               <file>delete-tool.png</file>
                <file>dimension-tool.png</file>
                <file>fix-angle.png</file>
                <file>fix-length.png</file>
                <file>generic-tool.png</file>
+               <file>rotate-tool.png</file>
                <file>splash.png</file>
                <file>quit.png</file>
                <file>zoom-in.png</file>
diff --git a/res/delete-tool.png b/res/delete-tool.png
new file mode 100644 (file)
index 0000000..ded806c
Binary files /dev/null and b/res/delete-tool.png differ
diff --git a/res/rotate-tool.png b/res/rotate-tool.png
new file mode 100644 (file)
index 0000000..ef5cd9d
Binary files /dev/null and b/res/rotate-tool.png differ
index 8e7891c613ed8e7691fde9e30d905358f5a1040f..c580cde948ab4b37535ec2b5f395600fe83cbb0d 100644 (file)
@@ -216,24 +216,26 @@ void ApplicationWindow::CreateActions(void)
                QIcon(":/res/fix-length.png"), QKeySequence(tr("F,L")), true);
        connect(fixLengthAct, SIGNAL(triggered()), this, SLOT(FixLength()));
 
-       deleteAct = CreateAction(tr("&Delete"), tr("Delete Object"), tr("Deletes selected objects."), QIcon(":/res/generic-tool.png"), QKeySequence(), true);
+       deleteAct = CreateAction(tr("&Delete"), tr("Delete Object"), tr("Deletes selected objects."), QIcon(":/res/delete-tool.png"), QKeySequence(), true);
        connect(deleteAct, SIGNAL(triggered()), this, SLOT(DeleteTool()));
 
        addDimensionAct = CreateAction(tr("Add &Dimension"), tr("Add Dimension"), tr("Adds a dimension to the drawing."), QIcon(":/res/dimension-tool.png"), QKeySequence("D,I"), true);
        connect(addDimensionAct, SIGNAL(triggered()), this, SLOT(DimensionTool()));
 
-       addLineAct = CreateAction(tr("Add &Line"), tr("Add Line"), tr("Adds lines to the drawing."), QIcon(":/res/generic-tool.png"), QKeySequence("A,L"), true);
+       addLineAct = CreateAction(tr("Add &Line"), tr("Add Line"), tr("Adds lines to the drawing."), QIcon(":/res/add-line-tool.png"), QKeySequence("A,L"), true);
        connect(addLineAct, SIGNAL(triggered()), this, SLOT(AddLineTool()));
 
-       addCircleAct = CreateAction(tr("Add &Circle"), tr("Add Circle"), tr("Adds circles to the drawing."), QIcon(":/res/generic-tool.png"), QKeySequence("A,C"), true);
+       addCircleAct = CreateAction(tr("Add &Circle"), tr("Add Circle"), tr("Adds circles to the drawing."), QIcon(":/res/add-circle-tool.png"), QKeySequence("A,C"), true);
        connect(addCircleAct, SIGNAL(triggered()), this, SLOT(AddCircleTool()));
 
-       addArcAct = CreateAction(tr("Add &Arc"), tr("Add Arc"), tr("Adds arcs to the drawing."), QIcon(":/res/generic-tool.png"), QKeySequence("A,A"), true);
+       addArcAct = CreateAction(tr("Add &Arc"), tr("Add Arc"), tr("Adds arcs to the drawing."), QIcon(":/res/add-arc-tool.png"), QKeySequence("A,A"), true);
+
+       addPolygonAct = CreateAction(tr("Add &Polygon"), tr("Add Polygon"), tr("Add polygons to the drawing."), QIcon(":/res/add-polygon-tool.png"), QKeySequence("A,P"), true);
 
        aboutAct = CreateAction(tr("About &Architektonas"), tr("About Architektonas"), tr("Gives information about this program."), QIcon(":/res/generic-tool.png"), QKeySequence());
        connect(aboutAct, SIGNAL(triggered()), this, SLOT(HelpAbout()));
 
-       rotateAct = CreateAction(tr("&Rotate Objects"), tr("Rotate"), tr("Rotate object(s) around an arbitrary center."), QIcon(":/res/generic-tool.png"), QKeySequence(tr("R,O")), true);
+       rotateAct = CreateAction(tr("&Rotate Objects"), tr("Rotate"), tr("Rotate object(s) around an arbitrary center."), QIcon(":/res/rotate-tool.png"), QKeySequence(tr("R,O")), true);
        connect(rotateAct, SIGNAL(triggered()), this, SLOT(RotateTool()));
 
        zoomInAct = CreateAction(tr("Zoom &In"), tr("Zoom In"), tr("Zoom in on the document."), QIcon(":/res/zoom-in.png"), QKeySequence(tr("+")), QKeySequence(tr("=")));
@@ -323,6 +325,7 @@ void ApplicationWindow::CreateMenus(void)
        menu->addAction(addLineAct);
        menu->addAction(addCircleAct);
        menu->addAction(addArcAct);
+       menu->addAction(addPolygonAct);
        menu->addAction(addDimensionAct);
        menu->addSeparator();
        menu->addAction(settingsAct);
index 21d4c8dde252016a849301a38ef9e6389f4cf692..eca3c65657199321e90d3e3cd9aa6e5708b4dac8 100644 (file)
@@ -65,6 +65,7 @@ class ApplicationWindow: public QMainWindow
                QAction * addLineAct;
                QAction * addCircleAct;
                QAction * addArcAct;
+               QAction * addPolygonAct;
                QAction * aboutAct;
                QAction * rotateAct;
                QAction * zoomInAct;
index 9ba0ed5a0b82638e67e4705b75d777add76129da..b433cac32fa47ad7a6486cca1ac0f3d3c6651392 100644 (file)
@@ -72,8 +72,31 @@ Dimension::~Dimension()
        painter->DrawLine(p3, p5);
        painter->DrawLine(p4, p6);
 
+       painter->SetBrush(QBrush(QColor(Qt::blue)));
+       painter->DrawArrowhead(p1, p2);
+       painter->DrawArrowhead(p2, p1);
+#if 0
+       // Draw arrowheads, dots, etc :-P
+       // NOTE: These need some kind of enum in the header so that they can
+       //       be created with some kind of user control...
+
+       Point p7 = position + (unit * 9.0);
+       Point p8 = endpoint - (unit * 9.0);
+       Point p9 = p7 + (orthogonal * 7.0);
+       Point p10 = p7 + (orthogonal * 13.0);
+       Point p11 = p8 + (orthogonal * 7.0);
+       Point p12 = p8 + (orthogonal * 13.0);
+
+       painter->DrawLine(p1, p9);
+       painter->DrawLine(p9, p10);
+       painter->DrawLine(p10, p1);
+       painter->DrawLine(p2, p11);
+       painter->DrawLine(p11, p12);
+       painter->DrawLine(p12, p2);
+#endif
+
        // Draw length of dimension line...
-       painter->SetFont(QFont("Arial", 10));
+       painter->SetFont(QFont("Arial", 10 * Painter::zoom));
        Vector v1((p1.x - p2.x) / 2.0, (p1.y - p2.y) / 2.0);
        Point ctr = p2 + v1;
        // This is in pixels, which isn't even remotely correct... !!! FIX !!!
index 0dfdf3c76471920a33ae7e679524f80bc8ebd73a..1bb2e6bb33845aa3a000d385fb811efedeb366d1 100644 (file)
@@ -111,7 +111,7 @@ void Painter::DrawAngledText(Vector center, double angle, QString text)
        // We may need this stuff... If dimension text is large enough.
 //     int textWidth = QFontMetrics(painter->font()).width(text);
 //     int textHeight = QFontMetrics(painter->font()).height();
-       QRectF textBox(-100, -100, 200, 200);   // x, y, w, h; x/y = upper left corner
+       QRectF textBox(-100 * zoom, -100 * zoom, 200 * zoom, 200 * zoom);       // x, y, w, h; x/y = upper left corner
 
        // This is in pixels. Might not render correctly at all zoom levels.
        // Need to figure out if dimensions are always rendered at one size regardless of zoom,
@@ -213,3 +213,27 @@ void Painter::DrawText(QRectF rect, int type, QString text)
 
        painter->drawText(rect, (Qt::AlignmentFlag)type, text);
 }
+
+void Painter::DrawArrowhead(Vector head, Vector tail)
+{
+       QPolygonF arrow;
+
+       // We draw the arrowhead aligned along the line from tail to head
+       double angle = Vector(head - tail).Angle();
+       double orthoAngle = angle + (PI / 2.0);
+       Vector orthogonal = Vector(cos(orthoAngle), sin(orthoAngle));
+       Vector unit = Vector(head - tail).Unit();
+
+       Point p1 = head - (unit * 9.0);
+       Point p2 = p1 + (orthogonal * 3.0);
+       Point p3 = p1 - (orthogonal * 3.0);
+
+       Point p4 = CartesianToQtCoords(head);
+       Point p5 = CartesianToQtCoords(p2);
+       Point p6 = CartesianToQtCoords(p3);
+
+       arrow << QPointF(p4.x, p4.y) << QPointF(p5.x, p5.y) << QPointF(p6.x, p6.y);
+
+       painter->drawPolygon(arrow);
+}
+
index 52da1d5a212548f30c5aaebe98d87238cb2a3653..ddd6a27ad7b73f616ff39f91455d0eed9ff59e23 100644 (file)
@@ -25,6 +25,7 @@ class Painter
                void DrawPoint(int, int);
                void DrawRoundedRect(QRectF, double, double);
                void DrawText(QRectF, int, QString);
+               void DrawArrowhead(Vector, Vector);
 
        public:
                static Vector CartesianToQtCoords(Vector);