<!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>
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("=")));
menu->addAction(addLineAct);
menu->addAction(addCircleAct);
menu->addAction(addArcAct);
+ menu->addAction(addPolygonAct);
menu->addAction(addDimensionAct);
menu->addSeparator();
menu->addAction(settingsAct);
QAction * addLineAct;
QAction * addCircleAct;
QAction * addArcAct;
+ QAction * addPolygonAct;
QAction * aboutAct;
QAction * rotateAct;
QAction * zoomInAct;
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 !!!
// 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,
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);
+}
+
void DrawPoint(int, int);
void DrawRoundedRect(QRectF, double, double);
void DrawText(QRectF, int, QString);
+ void DrawArrowhead(Vector, Vector);
public:
static Vector CartesianToQtCoords(Vector);