From a6b2cecda4973c4b0fdfd442e42fa5381dbd999e Mon Sep 17 00:00:00 2001 From: Xeon0X Date: Sun, 23 Jun 2024 21:29:29 +0200 Subject: [PATCH] Add circle gaps to main line --- main.py | 93 +++++++++++++++++++++------------------- networks/roads_2/Road.py | 49 ++++++++++++++++----- 2 files changed, 87 insertions(+), 55 deletions(-) diff --git a/main.py b/main.py index a79a336..8192797 100644 --- a/main.py +++ b/main.py @@ -11,61 +11,64 @@ from world_maker.Skeleton import Skeleton, simplify_coordinates from world_maker.terraforming import remove_trees, smooth_terrain from world_maker.world_maker import world_maker from networks.geometry.Point3D import Point3D +from networks.geometry.Point3D import Point3D def main(): - rectangle_house_mountain, rectangle_building, skeleton_highway, skeleton_mountain, road_grid = world_maker() + Road([Point3D(3903, 137, -142), Point3D(3948, 111, -148), + Point3D(3967, 112, -116), Point3D(4011, 112, -99)], 25) + # rectangle_house_mountain, rectangle_building, skeleton_highway, skeleton_mountain, road_grid = world_maker() - editor = Editor(buffering=True) - buildArea = editor.getBuildArea() - origin = ((buildArea.begin).x, (buildArea.begin).z) + # editor = Editor(buffering=True) + # buildArea = editor.getBuildArea() + # origin = ((buildArea.begin).x, (buildArea.begin).z) - remove_trees('./world_maker/data/heightmap.png', './world_maker/data/treemap.png', - './world_maker/data/smooth_sobel_watermap.png') - smooth_terrain('./world_maker/data/heightmap.png', - './world_maker/data/heightmap_smooth.png', './world_maker/data/smooth_sobel_watermap.png') + # remove_trees('./world_maker/data/heightmap.png', './world_maker/data/treemap.png', + # './world_maker/data/smooth_sobel_watermap.png') + # smooth_terrain('./world_maker/data/heightmap.png', + # './world_maker/data/heightmap_smooth.png', './world_maker/data/smooth_sobel_watermap.png') - set_roads(skeleton_mountain, origin) - set_roads(skeleton_highway, origin) - # set_roads_grids(road_grid, origin) - # roads.setRoads(skeleton_mountain) - # roads.setRoads(skeleton_highway) + # set_roads(skeleton_mountain, origin) + # set_roads(skeleton_highway, origin) + # # set_roads_grids(road_grid, origin) + # # roads.setRoads(skeleton_mountain) + # # roads.setRoads(skeleton_highway) - blocks = { - "wall": "blackstone", - "roof": "blackstone", - "roof_slab": "blackstone_slab", - "door": "oak_door", - "window": "glass_pane", - "entrance": "oak_door", - "stairs": "quartz_stairs", - "stairs_slab": "quartz_slab", - "celling": "quartz_block", - "floor": "quartz_block", - "celling_slab": "quartz_slab", - "garden_outline": "oak_leaves", - "garden_floor": "grass_block" - } + # blocks = { + # "wall": "blackstone", + # "roof": "blackstone", + # "roof_slab": "blackstone_slab", + # "door": "oak_door", + # "window": "glass_pane", + # "entrance": "oak_door", + # "stairs": "quartz_stairs", + # "stairs_slab": "quartz_slab", + # "celling": "quartz_block", + # "floor": "quartz_block", + # "celling_slab": "quartz_slab", + # "garden_outline": "oak_leaves", + # "garden_floor": "grass_block" + # } - entranceDirection = ["N", "S", "E", "W"] + # entranceDirection = ["N", "S", "E", "W"] - for houses in rectangle_building: - start = (houses[0][0]+buildArea.begin[0], houses[0] - [1], houses[0][2]+buildArea.begin[2]) - end = (houses[1][0]+buildArea.begin[0], houses[1] - [1], houses[1][2]+buildArea.begin[2]) - house = House(editor, start, end, - entranceDirection[random.randint(0, 3)], blocks) - house.build() + # for houses in rectangle_building: + # start = (houses[0][0]+buildArea.begin[0], houses[0] + # [1], houses[0][2]+buildArea.begin[2]) + # end = (houses[1][0]+buildArea.begin[0], houses[1] + # [1], houses[1][2]+buildArea.begin[2]) + # house = House(editor, start, end, + # entranceDirection[random.randint(0, 3)], blocks) + # house.build() - for houses in rectangle_house_mountain: - start = (houses[0][0]+buildArea.begin[0], houses[0] - [1], houses[0][2]+buildArea.begin[2]) - end = (houses[1][0]+buildArea.begin[0], houses[1] - [1], houses[1][2]+buildArea.begin[2]) - house = House(editor, start, end, - entranceDirection[random.randint(0, 3)], blocks) - house.build() + # for houses in rectangle_house_mountain: + # start = (houses[0][0]+buildArea.begin[0], houses[0] + # [1], houses[0][2]+buildArea.begin[2]) + # end = (houses[1][0]+buildArea.begin[0], houses[1] + # [1], houses[1][2]+buildArea.begin[2]) + # house = House(editor, start, end, + # entranceDirection[random.randint(0, 3)], blocks) + # house.build() def set_roads_grids(road_grid: Road_grid, origin): diff --git a/networks/roads_2/Road.py b/networks/roads_2/Road.py index dd32f66..aa1192c 100644 --- a/networks/roads_2/Road.py +++ b/networks/roads_2/Road.py @@ -120,6 +120,7 @@ class Road: # 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")) + circle_list = [[] for _ in range(len(circle))] for j in range(len(circle)): for k in range(len(circle[j])): jj = j % 7 @@ -139,20 +140,48 @@ class Road: case 6: blob = 'purple_concrete' if circle[j][k].is_in_triangle(double_point_a, self.polyline.centers[i], double_point_b): - nearest = circle[j][k].nearest( - Point3D.to_2d(self.polyline_total_line_output, removed_axis='y'), True) - self.output_block.append( - (Point3D.insert_3d([circle[j][k]], 'y', [ - self.polyline_total_line_output[nearest[0]].y])[0].coordinates, Block(blob))) + # nearest = circle[j][k].nearest( + # Point3D.to_2d(self.polyline_total_line_output, removed_axis='y'), True) + # circle_list[j].append( + # (Point3D.insert_3d([circle[j][k]], 'y', [ + # self.polyline_total_line_output[nearest[0]].y])[0].coordinates, Block(blob))) + circle_list[j].append(circle[j][k]) for j in range(len(gaps)): for k in range(len(gaps[j])): if gaps[j][k].is_in_triangle(double_point_a, self.polyline.centers[i], double_point_b): - nearest = gaps[j][k].nearest( - Point3D.to_2d(self.polyline_total_line_output, removed_axis='y'), True) - self.output_block.append( - (Point3D.insert_3d([gaps[j][k]], 'y', [ - self.polyline_total_line_output[nearest[0]].y])[0].coordinates, Block("white_concrete"))) + # nearest = gaps[j][k].nearest( + # Point3D.to_2d(self.polyline_total_line_output, removed_axis='y'), True) + # circle_list[j].append( + # (Point3D.insert_3d([gaps[j][k]], 'y', [ + # self.polyline_total_line_output[nearest[0]].y])[0].coordinates, Block("white_concrete"))) + circle_list[j].append(gaps[j][k]) + + for j in range(len(circle_list)): + circle_list[j] = circle_list[j][0].optimized_path( + circle_list[j]) + jj = j % 7 + match jj: + case 0: + blob = 'pink_concrete' + case 1: + blob = 'red_concrete' + case 2: + blob = 'orange_concrete' + case 3: + blob = 'yellow_concrete' + case 4: + blob = 'green_concrete' + case 5: + blob = 'blue_concrete' + case 6: + blob = 'purple_concrete' + for k in range(len(circle_list[j])): + nearest = circle_list[j][k].nearest( + Point3D.to_2d(self.polyline_total_line_output, removed_axis='y'), True) + self.output_block.append( + (Point3D.insert_3d([circle_list[j][k]], 'y', [ + self.polyline_total_line_output[nearest[0]].y])[0].coordinates, Block(blob))) def _projection_gaussian(self): nearest_points_to_reference = []