import networks.geometry.curve_tools as curve_tools import networks.geometry.Strip as Strip import networks.geometry.segment_tools as segment_tools import random class Lane: def __init__(self, coordinates, lane_materials, width): self.coordinates = coordinates self.width = width self.lane_materials = lane_materials self.surface = [] def get_surface(self): resolution, distance = curve_tools.resolution_distance( self.coordinates, 6) curve_points = curve_tools.curve(self.coordinates, resolution) curve_surface = Strip.Strip(self.coordinates) curve_surface.compute_curvature() # Set the road to be flat normals = [] for i in range(len(curve_surface.curvature)): normals.append((0, 1, 0)) # # Compute each line # for distance in range(self.width): # offset = curve_tools.offset(curve_surface.curve, distance, normals) # for i in range(len(offset)-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()), # weights=self.lane_materials.values(), # k=1,)[0])) curve_surface.compute_surface_perpendicular(self.width, normals) for i in range(len(curve_surface.surface)): for j in range(len(curve_surface.surface[i])): for k in range(len(curve_surface.surface[i][j])): for l in range(len(curve_surface.surface[i][j][k])): self.surface.append((curve_surface.surface[i][j][k][l], random.choices( list(self.lane_materials.keys()), weights=self.lane_materials.values(), k=1,)[0])) return self.surface