Add circle gaps to main line

This commit is contained in:
2024-06-23 21:29:29 +02:00
parent f73457809b
commit a6b2cecda4
2 changed files with 87 additions and 55 deletions

93
main.py
View File

@@ -11,61 +11,64 @@ from world_maker.Skeleton import Skeleton, simplify_coordinates
from world_maker.terraforming import remove_trees, smooth_terrain from world_maker.terraforming import remove_trees, smooth_terrain
from world_maker.world_maker import world_maker from world_maker.world_maker import world_maker
from networks.geometry.Point3D import Point3D from networks.geometry.Point3D import Point3D
from networks.geometry.Point3D import Point3D
def main(): 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) # editor = Editor(buffering=True)
buildArea = editor.getBuildArea() # buildArea = editor.getBuildArea()
origin = ((buildArea.begin).x, (buildArea.begin).z) # origin = ((buildArea.begin).x, (buildArea.begin).z)
remove_trees('./world_maker/data/heightmap.png', './world_maker/data/treemap.png', # remove_trees('./world_maker/data/heightmap.png', './world_maker/data/treemap.png',
'./world_maker/data/smooth_sobel_watermap.png') # './world_maker/data/smooth_sobel_watermap.png')
smooth_terrain('./world_maker/data/heightmap.png', # smooth_terrain('./world_maker/data/heightmap.png',
'./world_maker/data/heightmap_smooth.png', './world_maker/data/smooth_sobel_watermap.png') # './world_maker/data/heightmap_smooth.png', './world_maker/data/smooth_sobel_watermap.png')
set_roads(skeleton_mountain, origin) # set_roads(skeleton_mountain, origin)
set_roads(skeleton_highway, origin) # set_roads(skeleton_highway, origin)
# set_roads_grids(road_grid, origin) # # set_roads_grids(road_grid, origin)
# roads.setRoads(skeleton_mountain) # # roads.setRoads(skeleton_mountain)
# roads.setRoads(skeleton_highway) # # roads.setRoads(skeleton_highway)
blocks = { # blocks = {
"wall": "blackstone", # "wall": "blackstone",
"roof": "blackstone", # "roof": "blackstone",
"roof_slab": "blackstone_slab", # "roof_slab": "blackstone_slab",
"door": "oak_door", # "door": "oak_door",
"window": "glass_pane", # "window": "glass_pane",
"entrance": "oak_door", # "entrance": "oak_door",
"stairs": "quartz_stairs", # "stairs": "quartz_stairs",
"stairs_slab": "quartz_slab", # "stairs_slab": "quartz_slab",
"celling": "quartz_block", # "celling": "quartz_block",
"floor": "quartz_block", # "floor": "quartz_block",
"celling_slab": "quartz_slab", # "celling_slab": "quartz_slab",
"garden_outline": "oak_leaves", # "garden_outline": "oak_leaves",
"garden_floor": "grass_block" # "garden_floor": "grass_block"
} # }
entranceDirection = ["N", "S", "E", "W"] # entranceDirection = ["N", "S", "E", "W"]
for houses in rectangle_building: # for houses in rectangle_building:
start = (houses[0][0]+buildArea.begin[0], houses[0] # start = (houses[0][0]+buildArea.begin[0], houses[0]
[1], houses[0][2]+buildArea.begin[2]) # [1], houses[0][2]+buildArea.begin[2])
end = (houses[1][0]+buildArea.begin[0], houses[1] # end = (houses[1][0]+buildArea.begin[0], houses[1]
[1], houses[1][2]+buildArea.begin[2]) # [1], houses[1][2]+buildArea.begin[2])
house = House(editor, start, end, # house = House(editor, start, end,
entranceDirection[random.randint(0, 3)], blocks) # entranceDirection[random.randint(0, 3)], blocks)
house.build() # house.build()
for houses in rectangle_house_mountain: # for houses in rectangle_house_mountain:
start = (houses[0][0]+buildArea.begin[0], houses[0] # start = (houses[0][0]+buildArea.begin[0], houses[0]
[1], houses[0][2]+buildArea.begin[2]) # [1], houses[0][2]+buildArea.begin[2])
end = (houses[1][0]+buildArea.begin[0], houses[1] # end = (houses[1][0]+buildArea.begin[0], houses[1]
[1], houses[1][2]+buildArea.begin[2]) # [1], houses[1][2]+buildArea.begin[2])
house = House(editor, start, end, # house = House(editor, start, end,
entranceDirection[random.randint(0, 3)], blocks) # entranceDirection[random.randint(0, 3)], blocks)
house.build() # house.build()
def set_roads_grids(road_grid: Road_grid, origin): def set_roads_grids(road_grid: Road_grid, origin):

View File

@@ -120,6 +120,7 @@ class Road:
# geometry.placeLine(editor, Point3D.insert_3d([double_point_b], 'y', [229])[ # 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")) # 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 j in range(len(circle)):
for k in range(len(circle[j])): for k in range(len(circle[j])):
jj = j % 7 jj = j % 7
@@ -139,20 +140,48 @@ class Road:
case 6: case 6:
blob = 'purple_concrete' blob = 'purple_concrete'
if circle[j][k].is_in_triangle(double_point_a, self.polyline.centers[i], double_point_b): if circle[j][k].is_in_triangle(double_point_a, self.polyline.centers[i], double_point_b):
nearest = circle[j][k].nearest( # nearest = circle[j][k].nearest(
Point3D.to_2d(self.polyline_total_line_output, removed_axis='y'), True) # Point3D.to_2d(self.polyline_total_line_output, removed_axis='y'), True)
self.output_block.append( # circle_list[j].append(
(Point3D.insert_3d([circle[j][k]], 'y', [ # (Point3D.insert_3d([circle[j][k]], 'y', [
self.polyline_total_line_output[nearest[0]].y])[0].coordinates, Block(blob))) # 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 j in range(len(gaps)):
for k in range(len(gaps[j])): for k in range(len(gaps[j])):
if gaps[j][k].is_in_triangle(double_point_a, self.polyline.centers[i], double_point_b): if gaps[j][k].is_in_triangle(double_point_a, self.polyline.centers[i], double_point_b):
nearest = gaps[j][k].nearest( # 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) Point3D.to_2d(self.polyline_total_line_output, removed_axis='y'), True)
self.output_block.append( self.output_block.append(
(Point3D.insert_3d([gaps[j][k]], 'y', [ (Point3D.insert_3d([circle_list[j][k]], 'y', [
self.polyline_total_line_output[nearest[0]].y])[0].coordinates, Block("white_concrete"))) self.polyline_total_line_output[nearest[0]].y])[0].coordinates, Block(blob)))
def _projection_gaussian(self): def _projection_gaussian(self):
nearest_points_to_reference = [] nearest_points_to_reference = []