version 2.13.0
add Map library (MapView with OSM maps and items) and mapviewer util
This commit is contained in:
77
libs/map/mapitemellipse.cpp
Normal file
77
libs/map/mapitemellipse.cpp
Normal file
@@ -0,0 +1,77 @@
|
||||
#include "mapitemellipse.h"
|
||||
|
||||
#include <math.h>
|
||||
|
||||
|
||||
MapItemEllipse::MapItemEllipse(const QRectF & r) {
|
||||
setEllipse(r);
|
||||
}
|
||||
|
||||
|
||||
MapItemEllipse::MapItemEllipse(const QPointF & p, double rx, double ry) {
|
||||
setEllipse(p, rx, ry);
|
||||
}
|
||||
|
||||
|
||||
void MapItemEllipse::setStartAngle(double a) {
|
||||
sa = a;
|
||||
rebuild();
|
||||
updateParent();
|
||||
}
|
||||
|
||||
|
||||
void MapItemEllipse::setEndAngle(double a) {
|
||||
ea = a;
|
||||
rebuild();
|
||||
updateParent();
|
||||
}
|
||||
|
||||
|
||||
void MapItemEllipse::setEllipse(const QRectF & r) {
|
||||
rct = r;
|
||||
rebuild();
|
||||
updateParent();
|
||||
}
|
||||
|
||||
|
||||
void MapItemEllipse::setEllipse(const QPointF & p, double rx, double ry) {
|
||||
rct.setWidth(rx * 2.);
|
||||
rct.setHeight(ry * 2.);
|
||||
rct.moveCenter(p);
|
||||
rebuild();
|
||||
updateParent();
|
||||
}
|
||||
|
||||
|
||||
void MapItemEllipse::draw(QPainter * p) {
|
||||
p->setPen(pen());
|
||||
p->setBrush(brush());
|
||||
QPolygonF dp(pol);
|
||||
double us = unitScale();
|
||||
for (auto & i: dp)
|
||||
i = QPointF(i.x(), -i.y()) / us;
|
||||
p->drawPolygon(dp);
|
||||
setBoundingRect(dp.boundingRect());
|
||||
}
|
||||
|
||||
|
||||
void MapItemEllipse::rebuild() {
|
||||
pol.clear();
|
||||
QPointF c = rct.center();
|
||||
bool full = sa == ea;
|
||||
if (!full) pol << c;
|
||||
double w = rct.width() / 2., h = rct.height() / 2.;
|
||||
static double deg2rad = M_PI / 180.;
|
||||
if (full) {
|
||||
sa = 0.;
|
||||
ea = 360.;
|
||||
} else {
|
||||
if (ea < sa) qSwap(sa, ea);
|
||||
}
|
||||
for (double a = sa; a <= ea; a += 3.) {
|
||||
if (a > ea) a = ea;
|
||||
QPointF p(sin(a * deg2rad) * w, cos(a * deg2rad) * h);
|
||||
pol << (c + p);
|
||||
}
|
||||
if (!full) pol << c;
|
||||
}
|
||||
Reference in New Issue
Block a user