Changeset View
Changeset View
Standalone View
Standalone View
tools/osm-simplify/BaseClipper.cpp
Context not available. | |||||
171 | 171 | | |||
---|---|---|---|---|---|
172 | 172 | | |||
173 | 173 | | |||
174 | void BaseClipper::initClipRect (const GeoDataLatLonBox &clippingBox) | 174 | void BaseClipper::initClipRect (const GeoDataLatLonBox &clippingBox, int pointsToAddAtEdges) | ||
175 | { | 175 | { | ||
176 | m_left = clippingBox.west(); | 176 | m_left = clippingBox.west(); | ||
177 | m_right = clippingBox.east(); | 177 | m_right = clippingBox.east(); | ||
Context not available. | |||||
188 | m_bottomRight = QPointF(m_right, m_bottom); | 188 | m_bottomRight = QPointF(m_right, m_bottom); | ||
189 | m_bottomLeft = QPointF(m_left, m_bottom); | 189 | m_bottomLeft = QPointF(m_left, m_bottom); | ||
190 | 190 | | |||
191 | qreal x, y; | ||||
192 | qreal deltaX = fabs(m_right - m_left) / (pointsToAddAtEdges + 1); | ||||
193 | qreal deltaY = fabs(m_bottom - m_top) / (pointsToAddAtEdges + 1); | ||||
194 | | ||||
195 | m_topEdge.clear(); | ||||
196 | x = m_left; | ||||
197 | for(int i = 0; i < pointsToAddAtEdges; ++i) { | ||||
198 | x += deltaX; | ||||
199 | m_topEdge << QPointF(x, m_top); | ||||
200 | } | ||||
201 | | ||||
202 | m_rightEdge.clear(); | ||||
203 | y = m_top; | ||||
204 | for(int i = 0; i < pointsToAddAtEdges; ++i) { | ||||
205 | y += deltaY; | ||||
206 | m_rightEdge << QPointF(m_right, y); | ||||
207 | } | ||||
208 | | ||||
209 | m_bottomEdge.clear(); | ||||
210 | x = m_right; | ||||
211 | for(int i = 0; i < pointsToAddAtEdges; ++i) { | ||||
212 | x -= deltaX; | ||||
213 | m_bottomEdge << QPointF(x, m_bottom); | ||||
214 | } | ||||
215 | | ||||
216 | m_leftEdge.clear(); | ||||
217 | y = m_bottom; | ||||
218 | for(int i = 0; i < pointsToAddAtEdges; ++i) { | ||||
219 | y -= deltaY; | ||||
220 | m_leftEdge << QPointF(m_left, y); | ||||
221 | } | ||||
222 | | ||||
191 | m_viewport.clear(); | 223 | m_viewport.clear(); | ||
192 | m_viewport << m_topLeft << m_topRight << m_bottomRight << m_bottomLeft; | 224 | m_viewport << m_topLeft << m_topRight << m_bottomRight << m_bottomLeft; | ||
193 | m_viewport.isClosed(); | 225 | m_viewport.isClosed(); | ||
Context not available. | |||||
468 | clippedPolyObjects.clear(); | 500 | clippedPolyObjects.clear(); | ||
469 | clippedPolyObject = QPolygonF(); | 501 | clippedPolyObject = QPolygonF(); | ||
470 | 502 | | |||
503 | for(const auto& point : m_topEdge) { | ||||
504 | intersectionsTop << QSharedPointer<LinkedPoint>(new LinkedPoint(point)); | ||||
505 | } | ||||
471 | std::sort(intersectionsTop.begin(), intersectionsTop.end(), [](QSharedPointer<LinkedPoint>& A, QSharedPointer<LinkedPoint>& B) { | 506 | std::sort(intersectionsTop.begin(), intersectionsTop.end(), [](QSharedPointer<LinkedPoint>& A, QSharedPointer<LinkedPoint>& B) { | ||
472 | return A->point().x() < B->point().x(); | 507 | return A->point().x() < B->point().x(); | ||
473 | }); | 508 | }); | ||
474 | 509 | | |||
510 | for(const auto& point : m_rightEdge) { | ||||
511 | intersectionsRight << QSharedPointer<LinkedPoint>(new LinkedPoint(point)); | ||||
512 | } | ||||
475 | std::sort(intersectionsRight.begin(), intersectionsRight.end(), [](QSharedPointer<LinkedPoint>& A, QSharedPointer<LinkedPoint>& B) { | 513 | std::sort(intersectionsRight.begin(), intersectionsRight.end(), [](QSharedPointer<LinkedPoint>& A, QSharedPointer<LinkedPoint>& B) { | ||
476 | return A->point().y() < B->point().y(); | 514 | return A->point().y() < B->point().y(); | ||
477 | }); | 515 | }); | ||
478 | 516 | | |||
517 | for(const auto& point : m_bottomEdge) { | ||||
518 | intersectionsBottom << QSharedPointer<LinkedPoint>(new LinkedPoint(point)); | ||||
519 | } | ||||
479 | std::sort(intersectionsBottom.begin(), intersectionsBottom.end(), [](QSharedPointer<LinkedPoint>& A, QSharedPointer<LinkedPoint>& B) { | 520 | std::sort(intersectionsBottom.begin(), intersectionsBottom.end(), [](QSharedPointer<LinkedPoint>& A, QSharedPointer<LinkedPoint>& B) { | ||
480 | return B->point().x() < A->point().x(); | 521 | return B->point().x() < A->point().x(); | ||
481 | }); | 522 | }); | ||
482 | 523 | | |||
524 | for(const auto& point : m_leftEdge) { | ||||
525 | intersectionsLeft << QSharedPointer<LinkedPoint>(new LinkedPoint(point)); | ||||
526 | } | ||||
483 | std::sort(intersectionsLeft.begin(), intersectionsLeft.end(), [](QSharedPointer<LinkedPoint>& A, QSharedPointer<LinkedPoint>& B) { | 527 | std::sort(intersectionsLeft.begin(), intersectionsLeft.end(), [](QSharedPointer<LinkedPoint>& A, QSharedPointer<LinkedPoint>& B) { | ||
484 | return B->point().y() < A->point().y(); | 528 | return B->point().y() < A->point().y(); | ||
485 | }); | 529 | }); | ||
Context not available. | |||||
545 | if(clippedPolyObject == polygon) { | 589 | if(clippedPolyObject == polygon) { | ||
546 | clippedPolyObjects << polygon; | 590 | clippedPolyObjects << polygon; | ||
547 | } else if (clippedPolyObject == m_viewport.intersected(m_viewport)) { | 591 | } else if (clippedPolyObject == m_viewport.intersected(m_viewport)) { | ||
548 | clippedPolyObjects << m_viewport; | 592 | clippedPolyObject = QPolygonF(); | ||
593 | clippedPolyObject << m_topLeft << m_topEdge | ||||
594 | << m_topRight << m_rightEdge | ||||
595 | << m_bottomRight << m_bottomEdge | ||||
596 | << m_bottomLeft << m_leftEdge; | ||||
597 | clippedPolyObjects << clippedPolyObject; | ||||
549 | } | 598 | } | ||
550 | } | 599 | } | ||
551 | } else if(!clippedPolyObject.isEmpty()) { | 600 | } else if(!clippedPolyObject.isEmpty()) { | ||
Context not available. |