diff --git a/main.py b/main.py index 2938619..02eacac 100644 --- a/main.py +++ b/main.py @@ -26,13 +26,13 @@ def main(): abs(buildArea.begin.z - buildArea.end.z) / 2) length_world = sqrt((center[0]*2) ** 2 + (center[1]*2) ** 2) - 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(skeleton_highway, origin) + # set_roads(skeleton_mountain, origin) # set_roads_grids(road_grid, origin) # roads.setRoads(skeleton_mountain) # roads.setRoads(skeleton_highway) @@ -114,16 +114,22 @@ def set_roads(skeleton: Skeleton, origin): # Simplification for i in range(len(skeleton.lines)): print(f"[Roads] Simplify skelton {i + 1}/{len(skeleton.lines)}") - skeleton.lines[i] = simplify_coordinates(skeleton.lines[i], 10) + print(f"[Roads] Number of points: {len(skeleton.lines[i])}") + skeleton.lines[i] = simplify_coordinates(skeleton.lines[i], 20) + j = 0 + while j < len(skeleton.lines[i])-1: + if Point3D(skeleton.lines[i][j][0], skeleton.lines[i][j][1], skeleton.lines[i][j][2]).distance(Point3D(skeleton.lines[i][j+1][0], skeleton.lines[i][j+1][1], skeleton.lines[i][j+1][2])) <= 10: + del skeleton.lines[i][j+1] + print("[Roads] Delete point to close") + j += 1 + print( + f"[Roads] Number of points after simplification: {len(skeleton.lines[i])}") print("[Roads] Start generation...") for i in range(len(skeleton.lines)): print(f"[Roads] Generating roads {i + 1}/{len(skeleton.lines)}.") if len(skeleton.lines[i]) >= 4: Road(Point3D.from_arrays(skeleton.lines[i]), 9) - else: - print( - f"[Roads] Ignore roads {i + 1} with {len(skeleton.lines[i])} coordinates between {skeleton.lines[i][1]} and {skeleton.lines[i][-1]}.") if __name__ == '__main__': diff --git a/networks/roads_2/Road.py b/networks/roads_2/Road.py index 0a0595a..ebe76a1 100644 --- a/networks/roads_2/Road.py +++ b/networks/roads_2/Road.py @@ -125,7 +125,8 @@ class Road: self.polyline_total_line_output[nearest[0]].y])[0] for j in range(len(circle_list)): - if j != middle_lane_index: + if j != middle_lane_index and len(circle_list[j]) > 0: + print(len(circle_list[j]), circle_list[j]) circle_list[j] = circle_list[j][0].optimized_path( circle_list[j]) if len(circle_list[j]) != 1: diff --git a/world_maker/data/building.png b/world_maker/data/building.png index d0819e7..dfff8fe 100644 Binary files a/world_maker/data/building.png and b/world_maker/data/building.png differ diff --git a/world_maker/data/building_moutain.png b/world_maker/data/building_moutain.png index 14d2890..2ccbfd6 100644 Binary files a/world_maker/data/building_moutain.png and b/world_maker/data/building_moutain.png differ diff --git a/world_maker/data/city_map.png b/world_maker/data/city_map.png index d0819e7..bf2603c 100644 Binary files a/world_maker/data/city_map.png and b/world_maker/data/city_map.png differ diff --git a/world_maker/data/district.png b/world_maker/data/district.png index bc47ea1..392b888 100644 Binary files a/world_maker/data/district.png and b/world_maker/data/district.png differ diff --git a/world_maker/data/heightmap.png b/world_maker/data/heightmap.png index 5e1fdc4..5917638 100644 Binary files a/world_maker/data/heightmap.png and b/world_maker/data/heightmap.png differ diff --git a/world_maker/data/heightmap_smooth.png b/world_maker/data/heightmap_smooth.png index df7c13e..a56dd90 100644 Binary files a/world_maker/data/heightmap_smooth.png and b/world_maker/data/heightmap_smooth.png differ diff --git a/world_maker/data/heightmap_with_building.png b/world_maker/data/heightmap_with_building.png index 6e41da3..ba934ac 100644 Binary files a/world_maker/data/heightmap_with_building.png and b/world_maker/data/heightmap_with_building.png differ diff --git a/world_maker/data/highwaymap.png b/world_maker/data/highwaymap.png index 3eca359..f26666c 100644 Binary files a/world_maker/data/highwaymap.png and b/world_maker/data/highwaymap.png differ diff --git a/world_maker/data/mountain_map.png b/world_maker/data/mountain_map.png index 61aa359..80e9c97 100644 Binary files a/world_maker/data/mountain_map.png and b/world_maker/data/mountain_map.png differ diff --git a/world_maker/data/removed_treesmap.png b/world_maker/data/removed_treesmap.png index 1d65df3..6bf143b 100644 Binary files a/world_maker/data/removed_treesmap.png and b/world_maker/data/removed_treesmap.png differ diff --git a/world_maker/data/roadmap.png b/world_maker/data/roadmap.png index 84ef883..82cdef4 100644 Binary files a/world_maker/data/roadmap.png and b/world_maker/data/roadmap.png differ diff --git a/world_maker/data/skeleton_highway.png b/world_maker/data/skeleton_highway.png index fb54002..47e32f8 100644 Binary files a/world_maker/data/skeleton_highway.png and b/world_maker/data/skeleton_highway.png differ diff --git a/world_maker/data/skeleton_highway_area.png b/world_maker/data/skeleton_highway_area.png index d5c73f0..7847491 100644 Binary files a/world_maker/data/skeleton_highway_area.png and b/world_maker/data/skeleton_highway_area.png differ diff --git a/world_maker/data/skeleton_mountain.png b/world_maker/data/skeleton_mountain.png index 8a11273..6108ffc 100644 Binary files a/world_maker/data/skeleton_mountain.png and b/world_maker/data/skeleton_mountain.png differ diff --git a/world_maker/data/skeleton_mountain_area.png b/world_maker/data/skeleton_mountain_area.png index d0819e7..c922f92 100644 Binary files a/world_maker/data/skeleton_mountain_area.png and b/world_maker/data/skeleton_mountain_area.png differ diff --git a/world_maker/data/smooth_sobel_watermap.png b/world_maker/data/smooth_sobel_watermap.png index e1bc78f..92ce757 100644 Binary files a/world_maker/data/smooth_sobel_watermap.png and b/world_maker/data/smooth_sobel_watermap.png differ diff --git a/world_maker/data/smooth_terrain_delta.png b/world_maker/data/smooth_terrain_delta.png index b5e60fa..bec37c6 100644 Binary files a/world_maker/data/smooth_terrain_delta.png and b/world_maker/data/smooth_terrain_delta.png differ diff --git a/world_maker/data/sobelmap.png b/world_maker/data/sobelmap.png index 4150cf9..0983b28 100644 Binary files a/world_maker/data/sobelmap.png and b/world_maker/data/sobelmap.png differ diff --git a/world_maker/data/treemap.png b/world_maker/data/treemap.png index 87a6241..ff4ce76 100644 Binary files a/world_maker/data/treemap.png and b/world_maker/data/treemap.png differ diff --git a/world_maker/data/watermap.png b/world_maker/data/watermap.png index ccc28c0..f51d2ee 100644 Binary files a/world_maker/data/watermap.png and b/world_maker/data/watermap.png differ diff --git a/world_maker/pack_rectangle.py b/world_maker/pack_rectangle.py index 2e04b10..579a416 100644 --- a/world_maker/pack_rectangle.py +++ b/world_maker/pack_rectangle.py @@ -87,6 +87,7 @@ def draw_rectangles(rectangles, grid, heightmap): image.putpixel((x, y), round(height_average)) return image + def area_of_rectangles(rectangles): area = 0 for rectangle in rectangles: @@ -95,7 +96,6 @@ def area_of_rectangles(rectangles): return area - def generate_building(image: str | Image.Image, heightmap: str | Image.Image, output: str = './world_maker/data/building.png', number_of_try: int = 3, min_width: int = 10, max_width: int = 25): print("[Building] Start generating building position...") @@ -111,5 +111,3 @@ def generate_building(image: str | Image.Image, heightmap: str | Image.Image, ou rectangles_output = rectangles draw_rectangles(rectangles_output, grid, heightmap).save(output) return rectangles_output - -