diff options
author | Ben Boeckel <MathStuf@gmail.com> | 2009-05-23 00:48:44 -0400 |
---|---|---|
committer | Ben Boeckel <MathStuf@gmail.com> | 2009-05-23 00:48:44 -0400 |
commit | 10c467f169bf0b678cc906f58c7d97b4961dbff8 (patch) | |
tree | 0d7827ffc2ad102c6185fdd735aac99f2b63ea2e | |
parent | 2494e4156985bbf15b317f5b0813207683aff9c1 (diff) | |
download | sigen-10c467f169bf0b678cc906f58c7d97b4961dbff8.tar.gz sigen-10c467f169bf0b678cc906f58c7d97b4961dbff8.tar.xz sigen-10c467f169bf0b678cc906f58c7d97b4961dbff8.zip |
Replace destination points with closer ones if found
-rw-r--r-- | sigmodr/widgets/mapeditor/WorldMapPlacement.cpp | 18 |
1 files changed, 11 insertions, 7 deletions
diff --git a/sigmodr/widgets/mapeditor/WorldMapPlacement.cpp b/sigmodr/widgets/mapeditor/WorldMapPlacement.cpp index 42911d1f..96eb2fe7 100644 --- a/sigmodr/widgets/mapeditor/WorldMapPlacement.cpp +++ b/sigmodr/widgets/mapeditor/WorldMapPlacement.cpp @@ -139,18 +139,22 @@ static CollisionInfo findCollisions(const QPolygon& polygon1, const QPolygon& po QPoint prevPoint2 = polygon2.last(); foreach (const QPoint& point2, polygon2) { + QPoint target = dummyPoint; if (nextPoint1 == prevPoint2) - data[point1] = NextTarget(Include, collinear(point1, nextPoint1, point2) ? point2 : prevPoint2); + target = collinear(point1, nextPoint1, point2) ? point2 : prevPoint2; else if (inOrder(prevPoint2, point1, point2) && inOrder(prevPoint2, nextPoint1, point2)) - data[point1] = NextTarget(Include, point2); + target = point2; else if (inOrder(point1, prevPoint2, nextPoint1) && inOrder(point1, point2, nextPoint1)) - data[point1] = NextTarget(Include, point2); + target = point2; else if (inOrder(prevPoint2, point1, point2)) - data[point1] = NextTarget(Include, point2); + target = point2; else if (inOrder(point1, prevPoint2, nextPoint1)) - data[point1] = NextTarget(Include, prevPoint2); - if (data.contains(point1)) - break; + target = prevPoint2; + if (target != dummyPoint) + { + if (!data.contains(point1) || inOrder(point1, target, data[point1].second)) + data[point1] = NextTarget(Include, target); + } prevPoint2 = point2; } point1 = nextPoint1; |