From ebf3a604f0dd06d3bfe27f965055efb0f9387826 Mon Sep 17 00:00:00 2001 From: Xeon0X Date: Fri, 21 Jun 2024 01:18:19 +0200 Subject: [PATCH] Fix gaps when near collinear centers and arc intersections --- networks/geometry/Polyline.py | 14 ++++++++++---- networks/roads_2/Road.py | 8 ++++---- 2 files changed, 14 insertions(+), 8 deletions(-) diff --git a/networks/geometry/Polyline.py b/networks/geometry/Polyline.py index 2d99ff7..366387b 100644 --- a/networks/geometry/Polyline.py +++ b/networks/geometry/Polyline.py @@ -112,12 +112,18 @@ class Polyline: # Instead of two independant arc intersection, we make sure to combine both. if i > 1: if point_1.distance(self.acrs_intersections[i-1][2]) <= 2: - print(point_1, self.acrs_intersections[i-1][2]) middle = Segment2D( + self.centers[i], self.centers[i-1]).middle_point() + combined = Segment2D( point_1, self.acrs_intersections[i-1][2]).middle_point() - print(middle) - point_1 = middle - self.acrs_intersections[i-1][2] = middle + + # To correct mis-alignement bewteen center 1 - arc intersection 1 and 2 combined - center 2 + if middle.distance(combined) <= 2: + point_1 = middle + self.acrs_intersections[i-1][2] = middle + else: + point_1 = combined + self.acrs_intersections[i-1][2] = combined self.acrs_intersections[i] = [point_1.round(), Point2D.from_arrays( self.points_array[i]), point_2.round()] diff --git a/networks/roads_2/Road.py b/networks/roads_2/Road.py index 9a6a290..79edcfd 100644 --- a/networks/roads_2/Road.py +++ b/networks/roads_2/Road.py @@ -112,10 +112,10 @@ class Road: editor.placeBlock(Point3D.insert_3d( [self.polyline.acrs_intersections[i][2]], 'y', [230])[0].coordinates, Block("pink_concrete")) - geometry.placeLine(editor, Point3D.insert_3d([double_point_a], 'y', [250])[ - 0].coordinates, Point3D.insert_3d([self.polyline.centers[i]], 'y', [250])[0].coordinates, Block("blue_concrete")) - geometry.placeLine(editor, Point3D.insert_3d([double_point_b], 'y', [250])[ - 0].coordinates, Point3D.insert_3d([self.polyline.centers[i]], 'y', [250])[0].coordinates, Block("red_concrete")) + geometry.placeLine(editor, Point3D.insert_3d([double_point_a], 'y', [229])[ + 0].coordinates, Point3D.insert_3d([self.polyline.centers[i]], 'y', [229])[0].coordinates, Block("blue_concrete")) + geometry.placeLine(editor, Point3D.insert_3d([double_point_b], 'y', [229])[ + 0].coordinates, Point3D.insert_3d([self.polyline.centers[i]], 'y', [229])[0].coordinates, Block("red_concrete")) for j in range(len(circle)): for k in range(len(circle[j])):