diff --git a/main.py b/main.py index e81366e..ec00ed0 100644 --- a/main.py +++ b/main.py @@ -3,7 +3,8 @@ import random import gdpc.exceptions from world_maker.world_maker import * -from world_maker.Skeleton import Skeleton, transpose_form_heightmap, simplify_coordinates +from world_maker.data_analysis import transpose_form_heightmap +from world_maker.Skeleton import Skeleton, simplify_coordinates from networks.geometry.Point3D import Point3D from networks.roads_2.Road import Road from networks.legacy_roads import roads @@ -17,12 +18,13 @@ def main(): editor = Editor(buffering=True) buildArea = editor.getBuildArea() + origin = ((buildArea.begin).x, (buildArea.begin).z) - # set_roads(skeleton_mountain) - # set_roads(skeleton_highway) - # set_roads_grids(road_grid) - 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", @@ -61,28 +63,28 @@ def main(): house.build() -def set_roads_grids(road_grid: Road_grid): +def set_roads_grids(road_grid: Road_grid, origin): for i in range(len(road_grid)): if road_grid[i].border: for j in range(len(road_grid)): # Same line if (road_grid[i].position.x == road_grid[j].position.x and road_grid[i].position.y != road_grid[j].position.y) or (road_grid[i].position.x != road_grid[j].position.x and road_grid[i].position.y == road_grid[j].position.y): point_1 = transpose_form_heightmap( - './world_maker/data/heightmap.png', (road_grid[i].position.x, road_grid[i].position.y)) + './world_maker/data/heightmap.png', (road_grid[i].position.x, road_grid[i].position.y), origin) point_2 = transpose_form_heightmap( - './world_maker/data/heightmap.png', (road_grid[j].position.x, road_grid[j].position.y)) + './world_maker/data/heightmap.png', (road_grid[j].position.x, road_grid[j].position.y), origin) Road( [Point3D(point_1[0], point_1[1], point_1[2]), Point3D(point_2[0], point_2[1], point_2[2])], 9) -def set_roads(skeleton: Skeleton): +def set_roads(skeleton: Skeleton, origin): # Parsing print("[Roads] Start parsing...") for i in range(len(skeleton.lines)): print(f"[Roads] Parsing skeleton {i+1}/{len(skeleton.lines)}.") for j in range(len(skeleton.lines[i])): xyz = transpose_form_heightmap('./world_maker/data/heightmap.png', - skeleton.coordinates[skeleton.lines[i][j]]) + skeleton.coordinates[skeleton.lines[i][j]], origin) skeleton.lines[i][j] = xyz print("[Roads] Start simplification...") diff --git a/world_maker/Skeleton.py b/world_maker/Skeleton.py index 12f010f..0075d4b 100644 --- a/world_maker/Skeleton.py +++ b/world_maker/Skeleton.py @@ -16,17 +16,6 @@ def handle_import_image(image: Union[str, Image]) -> Image: return image -def transpose_form_heightmap(heightmap: Union[str, Image], coordinates): - heightmap = handle_import_image(heightmap).convert('L') - - editor = Editor() - xMin = (editor.getBuildArea().begin).x - zMin = (editor.getBuildArea().begin).z - - return (coordinates[0] + xMin, heightmap.getpixel( - (coordinates[0], coordinates[-1])), coordinates[-1] + zMin) - - def simplify_coordinates(coordinates, epsilon): if len(coordinates) < 3: return coordinates diff --git a/world_maker/data/building.png b/world_maker/data/building.png index a36ebd6..500240b 100644 Binary files a/world_maker/data/building.png and b/world_maker/data/building.png differ diff --git a/world_maker/data/city_map.png b/world_maker/data/city_map.png index 8a6c6ec..69a5698 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 7552641..a8450b7 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 154bfdf..661d0e1 100644 Binary files a/world_maker/data/heightmap.png and b/world_maker/data/heightmap.png differ diff --git a/world_maker/data/highwaymap.png b/world_maker/data/highwaymap.png index 5b97f93..4c8bdf4 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 a977b00..3bda4d8 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/roadmap.png b/world_maker/data/roadmap.png index 5c8c5cd..38c872c 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 d48cab2..908df2d 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 1fdae99..08fb7d9 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 14f9cb7..afa970a 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/smooth_sobel_watermap.png b/world_maker/data/smooth_sobel_watermap.png index 3ec92a1..7900f1f 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/sobelmap.png b/world_maker/data/sobelmap.png index 83ff8f6..c981114 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 db12c75..058db06 100644 Binary files a/world_maker/data/treemap.png and b/world_maker/data/treemap.png differ diff --git a/world_maker/data_analysis.py b/world_maker/data_analysis.py index 834d61e..361d654 100644 --- a/world_maker/data_analysis.py +++ b/world_maker/data_analysis.py @@ -299,3 +299,12 @@ def rectangle_2D_to_3D(rectangle: list[tuple[tuple[int, int], tuple[int, int]]], new_rectangle.append( ((start[0], avg_height, start[1]), (end[0], avg_height + randint(height_min, height_max), end[1]))) return new_rectangle + + +def transpose_form_heightmap(heightmap: Union[str, Image], coordinates, origin: tuple[int, int]) -> tuple[int, int, int]: + heightmap = handle_import_image(heightmap).convert('L') + + xMin, zMin = origin + + return (coordinates[0] + xMin, heightmap.getpixel( + (coordinates[0], coordinates[-1])), coordinates[-1] + zMin) diff --git a/world_maker/terraforming.py b/world_maker/terraforming.py new file mode 100644 index 0000000..e69de29