fix clipping lines for labeling

This commit is contained in:
Ansis Brammanis
2015-05-28 17:14:46 -04:00
parent 1e044a175c
commit 4cd95a97c6

View File

@@ -21,33 +21,33 @@ std::vector<std::vector<Coordinate>> clipLines(const std::vector<std::vector<Coo
if (p0.x < x1 && p1.x < x1) {
continue;
} else if (p0.x < x1) {
p0 = { x1, static_cast<int16_t>(p0.y + static_cast<float>(p1.y - p0.y) * ((x1 - p0.x) / (p1.x - p0.x))) };
p0 = { x1, static_cast<int16_t>(p0.y + (p1.y - p0.y) * ((float)(x1 - p0.x) / (p1.x - p0.x))) };
} else if (p1.x < x1) {
p1 = { x1, static_cast<int16_t>(p0.y + static_cast<float>(p1.y - p0.y) * ((x1 - p0.x) / (p1.x - p0.x))) };
p1 = { x1, static_cast<int16_t>(p0.y + (p1.y - p0.y) * ((float)(x1 - p0.x) / (p1.x - p0.x))) };
}
if (p0.y < y1 && p1.y < y1) {
continue;
} else if (p0.y < y1) {
p0 = { static_cast<int16_t>(p0.x + static_cast<float>(p1.x - p0.x) * ((y1 - p0.y) / (p1.y - p0.y))), y1 };
p0 = { static_cast<int16_t>(p0.x + (p1.x - p0.x) * ((float)(y1 - p0.y) / (p1.y - p0.y))), y1 };
} else if (p1.y < y1) {
p1 = { static_cast<int16_t>(p0.x + static_cast<float>(p1.x - p0.x) * ((y1 - p0.y) / (p1.y - p0.y))), y1 };
p1 = { static_cast<int16_t>(p0.x + (p1.x - p0.x) * ((float)(y1 - p0.y) / (p1.y - p0.y))), y1 };
}
if (p0.x >= x2 && p1.x >= x2) {
continue;
} else if (p0.x >= x2) {
p0 = { x2, static_cast<int16_t>(p0.y + static_cast<float>(p1.y - p0.y) * ((x2 - p0.x) / (p1.x - p0.x))) };
p0 = { x2, static_cast<int16_t>(p0.y + (p1.y - p0.y) * ((float)(x2 - p0.x) / (p1.x - p0.x))) };
} else if (p1.x >= x2) {
p1 = { x2, static_cast<int16_t>(p0.y + static_cast<float>(p1.y - p0.y) * ((x2 - p0.x) / (p1.x - p0.x))) };
p1 = { x2, static_cast<int16_t>(p0.y + (p1.y - p0.y) * ((float)(x2 - p0.x) / (p1.x - p0.x))) };
}
if (p0.y >= y2 && p1.y >= y2) {
continue;
} else if (p0.y >= y2) {
p0 = { static_cast<int16_t>(p0.x + static_cast<float>(p1.x - p0.x) * ((y2 - p0.y) / (p1.y - p0.y))), y2 };
p0 = { static_cast<int16_t>(p0.x + (p1.x - p0.x) * ((float)(y2 - p0.y) / (p1.y - p0.y))), y2 };
} else if (p1.y >= y2) {
p1 = { static_cast<int16_t>(p0.x + static_cast<float>(p1.x - p0.x) * ((y2 - p0.y) / (p1.y - p0.y))), y2 };
p1 = { static_cast<int16_t>(p0.x + (p1.x - p0.x) * ((float)(y2 - p0.y) / (p1.y - p0.y))), y2 };
}
if (!clippedLines.size() || (clippedLines.back().size() && !(p0 == clippedLines.back().back()))) {