From ce6e214015cb81b5e04d6fa4c332b406a590fe1a Mon Sep 17 00:00:00 2001 From: Xeon0X Date: Sun, 16 Jun 2024 00:00:43 +0200 Subject: [PATCH] Working road projection (with bug) --- main.py | 12 +++++++++--- networks/roads_2/Roads.py | 32 ++++++++++++++++++++++++++++---- output_image.png | Bin 3905 -> 3730 bytes 3 files changed, 37 insertions(+), 7 deletions(-) diff --git a/main.py b/main.py index a229945..b05bebd 100644 --- a/main.py +++ b/main.py @@ -441,10 +441,16 @@ image.save('output_image.png') # road = Road([Point3D(-984, 97, 811), Point3D(-984, 97, 847), # Point3D(-962, 97, 860), Point3D(-970, 97, 900), Point3D(-953, 97, 920)], 10) -road = Road([Point3D(-1024, 106, 1000), Point3D(-1024, 101, 972), - Point3D(-1001, 100, 966), Point3D(-977, 98, 984), Point3D(-966, 102, 1011), Point3D(-905, 97, 1013), Point3D(-774, 99, 998), Point3D(-694, 99, 1047)], 9) +# road = Road([Point3D(-1024, 106, 1000), Point3D(-1024, 101, 972), +# Point3D(-1001, 100, 966), Point3D(-977, 98, 984), Point3D(-966, 102, 1011), Point3D(-905, 97, 1013), Point3D(-774, 99, 998), Point3D(-694, 99, 1047)], 9) -road.place() +# road = Road([Point3D(-745, 125, 899), Point3D(-744, 117, 944), +# Point3D(-696, 112, 941), Point3D(-645, 112, 979)], 9) + +# road = Road([Point3D(-454, 130, 1046), Point3D(-497, 127, 1070), +# Point3D(-545, 85, 1019), Point3D(-545, 85, 970), Point3D(-457, 87, 865)], 9) + +# road.place() # s = Segment2D(Point2D(-88, -12), Point2D(9, 75)) # s.segment_thick(3, LINE_THICKNESS_MODE.MIDDLE) diff --git a/networks/roads_2/Roads.py b/networks/roads_2/Roads.py index 23cc062..2a0a274 100644 --- a/networks/roads_2/Roads.py +++ b/networks/roads_2/Roads.py @@ -17,18 +17,28 @@ class Road: # self.road_configuration = json.load(f) # self.width = self.road_configuration["width"] self.width = width + self.polyline_height = None self.polyline = Polyline(Point3D.to_2d(coordinates, 'y')) - self._surface() + self.polyline_total_line_output = [ + [] for _ in range(len(self.polyline.total_line_output))] + self.index_factor = 0 + self._projection() + self._surface() + + print(self.polyline_total_line_output) def _surface(self): # Segments - for i in range(1, len(self.polyline.segments)-1): + for i in range(1, len(self.polyline.segments)): if len(self.polyline.segments[i].segment()) > 1: for j in range(len(self.polyline.segments[i].segment_thick(self.width, LINE_THICKNESS_MODE.MIDDLE))): + # Get nearest in x,z projection + nearest = self.polyline.segments[i].points_thick[j].nearest( + Point3D.to_2d(self.polyline_total_line_output, removed_axis='y'), True) self.output_block.append( - (Point3D.insert_3d([self.polyline.segments[i].points_thick[j]], 'y', [180])[0].coordinates, Block("stone"))) + (Point3D.insert_3d([self.polyline.segments[i].points_thick[j]], 'y', [self.polyline_total_line_output[nearest[0]].y])[0].coordinates, Block("stone"))) for i in range(1, len(self.polyline.centers)-1): # Circle @@ -45,9 +55,11 @@ class Road: for j in range(len(circle.points_thick)): if circle.points_thick[j].is_in_triangle(double_point_a, self.polyline.centers[i], double_point_b): + nearest = circle.points_thick[j].nearest( + Point3D.to_2d(self.polyline_total_line_output, removed_axis='y'), True) self.output_block.append( (Point3D.insert_3d([circle.points_thick[j]], 'y', [ - 180+i])[0].coordinates, Block("black_concrete"))) + self.polyline_total_line_output[nearest[0]].y])[0].coordinates, Block("white_concrete"))) def _projection(self): nearest_points_to_reference = [] @@ -59,6 +71,18 @@ class Road: nearest_points_to_reference.append( Point2D(index, self.coordinates[i].y)) + self.polyline_height = Polyline(nearest_points_to_reference) + + self.index_factor = len( + self.polyline_height.total_line_output)/len(self.polyline.total_line_output) + + for i in range(len(self.polyline.total_line_output)): + self.polyline_total_line_output[i] = Point3D( + self.polyline.total_line_output[i].x, self.polyline_height.total_line_output[round(i*self.index_factor)].y, self.polyline.total_line_output[i].y) + + self.polyline_total_line_output = self.polyline_total_line_output[0].optimized_path( + self.polyline_total_line_output) + def place(self): editor = Editor(buffering=True) for i in range(len(self.output_block)): diff --git a/output_image.png b/output_image.png index a07f8a0bbcfec22cd522b25342350d2424262a99..bf1473ca53f5f11b02d99f42074c0751b1d45c4c 100644 GIT binary patch literal 3730 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 wM`=6(`m8YRRNb^Li697qAP9mW2!dqc|FZm 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