diff --git a/main.py b/main.py index 80d5eec..43bc9b7 100644 --- a/main.py +++ b/main.py @@ -1,6 +1,6 @@ import random -from gdpc import Editor +from gdpc import Editor, Block from House import * from networks.geometry.Point3D import Point3D @@ -11,13 +11,28 @@ 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 +from networks.geometry.Point2D import Point2D +from networks.geometry.Circle import Circle def main(): - y = 105 - Road([Point3D(3903, 137+y, -142), Point3D(3948, 111+y, -148), - Point3D(3967, 112+y, -116), Point3D(4011, 112+y, -99)], 25) + y = 30 + # Road([Point3D(4183, 100+y, -66), Point3D(4206, 102+y, -88), Point3D(4260, 112+y, -80), + # Point3D(4267, 104+y, -108), Point3D(4230, 102+y, -129), Point3D(4220, 112+y, -213), Point3D(4121, 167+y, -249), Point3D(4052, 129+y, -179)], 25) + + editor = Editor(buffering=True) + c, g = Circle(Point2D(4422, -213)).circle_thick_by_line(10, 20) + for i in range(len(g)): + for j in range(len(g[i])): + editor.placeBlock(Point3D.insert_3d( + [g[i][j]], 'y', [103])[0].coordinates, Block("stone")) + for i in range(len(c)): + for j in range(len(c[i])): + editor.placeBlock(Point3D.insert_3d( + [c[i][j]], 'y', [103])[0].coordinates, Block("white_concrete")) + + # Road([Point3D(4398, 87, -136), Point3D(4394, 101, -200), Point3D(4385, 112, -282), Point3D(4324, + # 119, -302), Point3D(4304, 120, -249)], 9) # rectangle_house_mountain, rectangle_building, skeleton_highway, skeleton_mountain, road_grid = world_maker() # editor = Editor(buffering=True) diff --git a/networks/geometry/Circle.py b/networks/geometry/Circle.py index 3933a32..6187f0d 100644 --- a/networks/geometry/Circle.py +++ b/networks/geometry/Circle.py @@ -66,20 +66,26 @@ class Circle: def _remove_gaps(outter_line: List[Point2D], inner_line: List[Point2D]) -> List[Point2D]: gaps = [] for i in range(len(outter_line)): - if Circle._count_neighbors(outter_line[i], inner_line) == 0: - if Circle._count_neighbors(Point2D(outter_line[i].x-1, outter_line[i].y), inner_line) > 1: + nearest_index = outter_line[i].nearest( + inner_line, True)[0] + potential_neighbors = [inner_line[(nearest_index+j) % len(inner_line)] + for j in range(-10, 10, 1)] + print("\n\n", nearest_index, + inner_line[nearest_index], potential_neighbors) + if Circle._count_neighbors(outter_line[i], potential_neighbors) == 0: + if Circle._count_neighbors(Point2D(outter_line[i].x-1, outter_line[i].y), potential_neighbors) > 1: if Point2D(outter_line[i].x-1, outter_line[i].y) not in outter_line: gaps.append( Point2D(outter_line[i].x-1, outter_line[i].y)) - if Circle._count_neighbors(Point2D(outter_line[i].x+1, outter_line[i].y), inner_line) > 1: + if Circle._count_neighbors(Point2D(outter_line[i].x+1, outter_line[i].y), potential_neighbors) > 1: if Point2D(outter_line[i].x+1, outter_line[i].y) not in outter_line: gaps.append( Point2D(outter_line[i].x+1, outter_line[i].y)) - if Circle._count_neighbors(Point2D(outter_line[i].x, outter_line[i].y-1), inner_line) > 1: + if Circle._count_neighbors(Point2D(outter_line[i].x, outter_line[i].y-1), potential_neighbors) > 1: if Point2D(outter_line[i].x, outter_line[i].y-1) not in outter_line: gaps.append( Point2D(outter_line[i].x, outter_line[i].y-1)) - if Circle._count_neighbors(Point2D(outter_line[i].x, outter_line[i].y+1), inner_line) > 1: + if Circle._count_neighbors(Point2D(outter_line[i].x, outter_line[i].y+1), potential_neighbors) > 1: if Point2D(outter_line[i].x, outter_line[i].y+1) not in outter_line: gaps.append( Point2D(outter_line[i].x, outter_line[i].y+1)) diff --git a/networks/roads_2/Road.py b/networks/roads_2/Road.py index 3dad201..0a0595a 100644 --- a/networks/roads_2/Road.py +++ b/networks/roads_2/Road.py @@ -116,7 +116,7 @@ class Road: middle_lane_index = round(len(circle_list)/2) middle_line_length = len(circle_list[middle_lane_index]) - circle_list[middle_lane_index] = circle_list[middle_lane_index][-1].optimized_path( + circle_list[middle_lane_index] = circle_list[middle_lane_index][0].optimized_path( circle_list[middle_lane_index]) for k in range(len(circle_list[middle_lane_index])): nearest = circle_list[middle_lane_index][k].nearest( @@ -128,7 +128,11 @@ class Road: if j != middle_lane_index: circle_list[j] = circle_list[j][0].optimized_path( circle_list[j]) - factor = (middle_line_length-1)/(len(circle_list[j])-1) + if len(circle_list[j]) != 1: + factor = (middle_line_length-1) / \ + (len(circle_list[j])-1) + else: + factor = 1 for k in range(len(circle_list[j])): circle_list[j][k] = Point3D.insert_3d([circle_list[j][k]], 'y', [ @@ -212,7 +216,7 @@ class Road: 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+70, self.polyline.total_line_output[i].y) + 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._surface() self.place()