27 #include "../../../common/STLUtils.h"
28 #include "../../../geometry/Envelope.h"
29 #include "../../../geometry/Geometry.h"
30 #include "../../../geometry/LinearRing.h"
31 #include "../../../geometry/Polygon.h"
32 #include "../canvas/Canvas.h"
33 #include "../canvas/MapDisplay.h"
37 #include <QMouseEvent>
49 m_pen.setColor(QColor(0, 0, 0));
51 m_brush = QColor(233, 88, 63, 80);
59 QPixmap* draft = m_display->getDraftPixmap();
60 draft->fill(Qt::transparent);
65 if(e->button() != Qt::LeftButton)
74 QPointF pw = m_display->transform(e->pos());
82 if(m_coords.size() < 1 || m_isFinished)
85 #if QT_VERSION >= 0x050000
86 QPointF pw = m_display->transform(e->localPos());
88 QPointF pw = m_display->transform(e->posF());
92 #if QT_VERSION >= 0x050000
93 QPointF pos = e->localPos() + QPointF(0.0001, 0.0001);
95 QPointF pos = e->posF() + QPointF(0.0001, 0.0001);
98 pw = m_display->transform(pos);
113 if(e->button() != Qt::LeftButton)
116 if(m_coords.size() < 3)
123 for(std::size_t i = 0; i < m_coords.size(); ++i)
124 ring->
setPoint(i, m_coords[i].x, m_coords[i].y);
125 ring->
setPoint(m_coords.size(), m_coords[0].x, m_coords[0].y);
130 emit polygonAquired(polygon);
142 QPixmap* draft = m_display->getDraftPixmap();
143 draft->fill(Qt::transparent);
146 Canvas canvas(m_display->width(), m_display->height());
149 canvas.setRenderHint(QPainter::Antialiasing,
true);
156 m_display->repaint();
163 for(std::size_t i = 0; i < m_coords.size(); ++i)
164 line->
setPoint(i, m_coords[i].x, m_coords[i].y);
178 if(m_coords.size() < 3)
179 return drawLine(canvas);
183 for(std::size_t i = 0; i < m_coords.size(); ++i)
184 ring->
setPoint(i, m_coords[i].x, m_coords[i].y);
185 ring->
setPoint(m_coords.size(), m_coords[0].x, m_coords[0].y);
196 canvas.
draw(polygon);
205 QPixmap* draft = m_display->getDraftPixmap();
206 draft->fill(Qt::transparent);
208 m_display->repaint();
216 m_coords.push_back(m_lastPos);
double m_urx
Upper right corner x-coordinate.
An utility struct for representing 2D coordinates.
A LinearRing is a LineString that is both closed and simple.
double m_llx
Lower left corner x-coordinate.
LineString is a curve with linear interpolation between points.
void setPoint(std::size_t i, const double &x, const double &y)
It sets the value of the specified point.
An Envelope defines a 2D rectangular region.
This class implements a concrete tool to acquire a polygon geometry.
double m_lly
Lower left corner y-coordinate.
Polygon is a subclass of CurvePolygon whose rings are defined by linear rings.
double m_ury
Upper right corner y-coordinate.
bool isValid() const
It tells if the rectangle is valid or not.
void setRingN(std::size_t i, Curve *r)
It sets the informed position ring to the new one.