return Vector((v.x - origin.x) * zoom, screenSize.y - ((v.y - origin.y) * zoom));
}
-Vector Painter::QtCoordsToCartesian(Vector v)
+Vector Painter::QtToCartesianCoords(Vector v)
{
// Convert screen location, with inverted Y-axis coordinates, to regular
// Cartesian coordinates at the current zoom level.
void Painter::DrawAngledText(Vector center, double angle, QString text)
{
+ // Strategy: Since Qt doesn't have any rotated text drawing functions,
+ // we instead translate the origin to the center of the text to be drawn and
+ // then rotate the frame to the desired angle.
center = CartesianToQtCoords(center);
// We may need this stuff... If dimension text is large enough.
// int textHeight = QFontMetrics(painter->font()).height();
QRectF textBox(-100, -100, 200, 200); // x, y, w, h; x/y = upper left corner
- // Some things to note here: if angle > 90 degrees, then we need to take the negative
- // of the angle for our text.
- painter->save();
- painter->translate(center.x, center.y);
// 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,
// or if they have a definite size, and are thus zoomable.
// If zoomable, this is incorrect:
int yOffset = -12;
- //Fix text so it isn't upside down...
+ // Fix text so it isn't upside down...
if ((angle > PI * 0.5) && (angle < PI * 1.5))
{
angle += PI;
}
textBox.translate(0, yOffset);
- // Angles are backwards in the Qt coord system...
+ painter->save();
+ painter->translate(center.x, center.y);
+ // Angles are backwards in the Qt coord system, so we flip ours...
painter->rotate(-angle * RADIANS_TO_DEGREES);
painter->drawText(textBox, Qt::AlignCenter, text);
painter->restore();