diff --git a/main.py b/main.py index 27a74d0..62447a1 100644 --- a/main.py +++ b/main.py @@ -1,15 +1,15 @@ import networks.roads.lines.Line as Line import networks.roads.lanes.Lane as Lane from gdpc import Editor, Block, geometry -import networks.geometry.curve as curve -import networks.geometry.CurveSurface as CurveSurface -import networks.geometry.segment as segment +import networks.geometry.curve_tools as curve_tools +import networks.geometry.Strip as Strip +import networks.geometry.segment_tools as segment_tools import numpy as np import json from buildings.Building import Building import random -from networks.geometry.point import curved_corner_intersection +from networks.geometry.point_tools import curved_corner_intersection editor = Editor(buffering=True) diff --git a/networks/geometry/CurveSurface.py b/networks/geometry/Strip.py similarity index 72% rename from networks/geometry/CurveSurface.py rename to networks/geometry/Strip.py index ca830b4..5da1474 100644 --- a/networks/geometry/CurveSurface.py +++ b/networks/geometry/Strip.py @@ -1,28 +1,28 @@ -import networks.geometry.curve as curve -import networks.geometry.segment as segment +import networks.geometry.curve_tools as curve_tools +import networks.geometry.segment_tools as segment_tools import numpy as np -class CurveSurface: +class Strip: def __init__(self, points, reshape=True, spacing_distance=10): self.points = np.array(points) if reshape: - self.resolution, self.length = curve.resolution_distance( + self.resolution, self.length = curve_tools.resolution_distance( self.points, spacing_distance=spacing_distance) - self.curve = curve.curve(self.points, self.resolution) + self.curve = curve_tools.curve(self.points, self.resolution) else: # Point can also be given already in curved form self.curve = self.points def compute_curvature(self): - self.curvature = curve.curvature(self.curve) + self.curvature = curve_tools.curvature(self.curve) def compute_surface_perpendicular(self, width, normals): - self.offset_left = curve.offset(self.curve, width, normals) - self.offset_right = curve.offset(self.curve, -width, normals) + self.offset_left = curve_tools.offset(self.curve, width, normals) + self.offset_right = curve_tools.offset(self.curve, -width, normals) self.perpendicular_segment = [] for i in range(len(self.offset_left)): - self.perpendicular_segment.append(segment.discrete_segment( + self.perpendicular_segment.append(segment_tools.discrete_segment( self.offset_left[i], self.offset_right[i], pixel_perfect=False)) self.surface = [] @@ -45,14 +45,14 @@ class CurveSurface: self.surface[i].append([]) for k in range(len(self.perpendicular_segment[max_length_index])-1): - self.surface[i][j].append(segment.discrete_segment( + self.surface[i][j].append(segment_tools.discrete_segment( self.perpendicular_segment[max_length_index][k], self.perpendicular_segment[min_length_index][round(k * proportion)], pixel_perfect=False)) def compute_surface_parallel(self, inner_range, outer_range, resolution, normals): self.left_side = [] self.right_side = [] for current_range in range(inner_range * resolution, outer_range * resolution): - self.left_side.append(curve.offset( + self.left_side.append(curve_tools.offset( self.curve, current_range/resolution, normals)) - self.right_side.append(curve.offset( + self.right_side.append(curve_tools.offset( self.curve, -current_range/resolution, normals)) diff --git a/networks/geometry/curve.py b/networks/geometry/curve_tools.py similarity index 96% rename from networks/geometry/curve.py rename to networks/geometry/curve_tools.py index 5d3d00c..9b2fa3d 100644 --- a/networks/geometry/curve.py +++ b/networks/geometry/curve_tools.py @@ -1,5 +1,5 @@ import numpy as np -import networks.geometry.segment as segment +import networks.geometry.segment_tools as segment_tools from scipy import interpolate from math import sqrt @@ -83,14 +83,14 @@ def offset(curve, distance, normals): 'Number of normals and number of points in the curve do not match') # Offsetting - offset_segments = [segment.parallel( + offset_segments = [segment_tools.parallel( (curve[i], curve[i+1]), distance, normals[i]) for i in range(len(curve) - 1)] # Combining segments combined_curve = [] combined_curve.append(np.round(offset_segments[0][0]).tolist()) for i in range(0, len(offset_segments)-1): - combined_curve.append(segment.middle_point( + combined_curve.append(segment_tools.middle_point( offset_segments[i][1], offset_segments[i+1][0])) combined_curve.append(np.round(offset_segments[-1][1]).tolist()) diff --git a/networks/geometry/point.py b/networks/geometry/point_tools.py similarity index 100% rename from networks/geometry/point.py rename to networks/geometry/point_tools.py diff --git a/networks/geometry/segment.py b/networks/geometry/segment_tools.py similarity index 100% rename from networks/geometry/segment.py rename to networks/geometry/segment_tools.py diff --git a/networks/roads/lanes/Lane.py b/networks/roads/lanes/Lane.py index 3e3824e..803a0ef 100644 --- a/networks/roads/lanes/Lane.py +++ b/networks/roads/lanes/Lane.py @@ -1,6 +1,6 @@ -import networks.geometry.curve as curve -import networks.geometry.CurveSurface as CurveSurface -import networks.geometry.segment as segment +import networks.geometry.curve_tools as curve_tools +import networks.geometry.Strip as Strip +import networks.geometry.segment_tools as segment_tools import random @@ -12,10 +12,11 @@ class Lane: self.surface = [] def get_surface(self): - resolution, distance = curve.resolution_distance(self.coordinates, 6) + resolution, distance = curve_tools.resolution_distance( + self.coordinates, 6) - curve_points = curve.curve(self.coordinates, resolution) - curve_surface = CurveSurface.CurveSurface(self.coordinates) + curve_points = curve_tools.curve(self.coordinates, resolution) + curve_surface = Strip.Strip(self.coordinates) curve_surface.compute_curvature() # Set the road to be flat @@ -25,9 +26,9 @@ class Lane: # Compute each line for distance in range(self.width): - offset = curve.offset(curve_surface.curve, distance, normals) + offset = curve_tools.offset(curve_surface.curve, distance, normals) for i in range(len(offset)-1): - line = segment.discrete_segment(offset[i], offset[i+1]) + line = segment_tools.discrete_segment(offset[i], offset[i+1]) for coordinate in line: self.surface.append((coordinate, random.choices( list(self.lane_materials.keys()), diff --git a/networks/roads/lines/Line.py b/networks/roads/lines/Line.py index 0393d63..fb00dfc 100644 --- a/networks/roads/lines/Line.py +++ b/networks/roads/lines/Line.py @@ -1,5 +1,5 @@ -import networks.geometry.curve as curve -import networks.geometry.segment as segment +import networks.geometry.curve_tools as curve_tools +import networks.geometry.segment_tools as segment_tools import random @@ -10,9 +10,10 @@ class Line: self.surface = [] def get_surface(self): - resolution, distance = curve.resolution_distance(self.coordinates, 6) + resolution, distance = curve_tools.resolution_distance( + self.coordinates, 6) - curve_points = curve.curve(self.coordinates, resolution) + curve_points = curve_tools.curve(self.coordinates, resolution) # Compute the line @@ -26,7 +27,8 @@ class Line: pattern_iteration = 0 for i in range(len(curve_points)-1): - line = segment.discrete_segment(curve_points[i], curve_points[i+1]) + line = segment_tools.discrete_segment( + curve_points[i], curve_points[i+1]) for coordinate in line: block = random.choices( list(pattern_materials[pattern_iteration].keys()),