# ----------------------- #Carparks Attributes Group("Carpark",3) @Order(1) attr carparks = false @Group("Carpark") @Order(2) attr carparkwidth = 2.5 # ----------------------- # Sidewalk Attributes @Group("Sidewalk") @Order(3) @Range(0,0.4) attr Sidewalk_height = 0.2 # height of sidewalk (and depth of Kerbs) @Group("Sidewalk") @Order(4) @Range("grey asphalt","pavement") attr sidewalk_style = "grey asphalt" # ---------------------------------------- # Functions # ---------------------------------------- calcNbrOfLanes = rint(lenAlongV/ Lane_width ) calcLanesLeft = rint((lenAlongV*0.5-Median_width) / Lane_width) calcLanesRight = rint((lenAlongV - calcLanesLeft*Lane_width - Median_width) / Lane_width) lenAlongU = geometry.du(0,unitSpace) # for convenience and readability only lenAlongV = geometry.dv(0,unitSpace) # for convenience and readability only @StartRule Street --> alignScopeToAxes(y) split(u,unitSpace,0){ Crosswalk_width *conStart : Crosswalk(-1) | ~1 : Streetsides | Crosswalk_width *conEnd : Crosswalk(1) } BridgeMain # create left and right side of the street (per default same nbr of lanes in both directions, but user can influence it via attributes) # modified for New Zealand roads Streetsides --> case calcNbrOfLanes < 1.1 : Asphalt case Nbr_of_left_lanes == 0 && Nbr_of_right_lanes == 0: split(v,unitSpace,0){ ~calcLanesLeft : scaleUV(0,-1,-1) Lanes(calcNbrOfLanes,connectionStart,2) Vehicles(2) | Median_width : Median | ~calcLanesRight : Lanes(calcNbrOfLanes,connectionEnd,0) Vehicles(0)} else: split(v,unitSpace,0){ ~Nbr_of_left_lanes : scaleUV(0,-1,-1) Lanes(Nbr_of_left_lanes,connectionStart,2) Vehicles(2) | Median_width : Median | ~Nbr_of_right_lanes : Lanes(Nbr_of_right_lanes,connectionEnd,0) Vehicles(0) } # Lanes Lanes(nLanes,connectionType,dir) --> case connectionType == "STREET" || lenAlongU < 10: Asphalt("stripes",nLanes) case connectionType == "JUNCTION" && type == "MAJOR": Asphalt("stripes",nLanes) else: split(u,unitSpace,0){ ~1 : Asphalt("stripes",nLanes) | 12 : Asphalt(arrows,nLanes) } # Asphalt # - with lanes Asphalt(type,nLanes) --> case lenAlongU > 3: [ extrude(0.1) comp(f){all: NIL} ] // required for occlusion check normalizeUV(0, uv, collectiveAllFaces) scaleUV(0,0.5*rint(lenAlongU/6),1) texture(getStreetTexture(type,nLanes)) Asphalt. else: Asphalt # - no lanes Asphalt --> [ extrude(0.1) comp(f){all: NIL} ] // required for occlusion check setupProjection(0, world.xz, 12, 9) projectUV(0) texture(concrete_tex) Asphalt. # ---------------------------------------- # Sidewalk # ---------------------------------------- Sidewalk --> alignScopeToAxes(y) SidewalkWithKerbs t(0, Sidewalk_height ,0) SidewalkWithKerbs --> case carparks == true : comp(f){ top : split(y){ Sidewalk_height : CarparkKerbs | ~1 : CarparkPavement } } else: extrude(world.y, Sidewalk_height ) comp(f){ top : split(y){ Sidewalk_height : Kerbs | ~1 : CarparkPavement }| side : Kerbs} # ---------------------------------------- # Rules needed by all # ---------------------------------------- SolidKerbs --> extrude(world.y, Sidewalk_height ) comp(f){ top: alignScopeToGeometry(zUp,1) Kerbs | side: Kerbs } SolidKerbsNormal --> extrude(Sidewalk_height) comp(f){ top: alignScopeToGeometry(zUp,1) Kerbs | side: Kerbs } CarparkKerbs--> case carparks == true: split(x){Crosswalk_width*2 : extrude(world.y, Sidewalk_height )Kerbs | ~1 : t(0,carparkwidth,0) extrude(Sidewalk_height)Kerbs | Crosswalk_width*2 : extrude(world.y, Sidewalk_height )Kerbs} setupProjection(0,scope.xy,~1.1,'1) projectUV(0) texture(kerb_tex) else:Kerbs Kerbs --> case scope.sx < 0.5: setupProjection(0,scope.xy,1,'1) projectUV(0) translateUV(0,-scope.sx/2,0) texture(kerb_tex) else: setupProjection(0,scope.xy,~1.1,'1) projectUV(0) texture(kerb_tex) CarparkPavement --> case carparks == true : split(u,unitSpace,0){ Crosswalk_width*2 : extrude(world.y, Sidewalk_height )Pavement | t(0,-0.2,0) split(v,unitSpace,0) { carparkwidth : split(u,unitSpace,0){0.2 : extrude(Sidewalk_height)Kerbs |{ ~5 : Asphalt | { ~0.1: WhiteLine | ~5 : Asphalt }* |0.2 : extrude(Sidewalk_height)Kerbs} } | ~1 : t(0,0.2,0) extrude(world.y, Sidewalk_height )Pavement } | Crosswalk_width*2: extrude(world.y, Sidewalk_height )Pavement } else: Pavement Pavement --> alignScopeToGeometry(zUp, 0,0) Pavement(rand(10),rand(10)) Pavement(texUOffset,texVOffset) --> setupProjection(0,scope.xy,1,1,texUOffset,texVOffset) projectUV(0) setupProjection(2,scope.xy,100, 100) projectUV(2) texture(sidewalk_tex)set(material.dirtmap, swdirtmap) WhiteLine--> color(White)
Aangemelde leden kunnen berichten plaatsen, updates volgen en meer. Nieuw hier? Registreer een gratis account.
Find useful guides, FAQs, and documents to help you navigate and make the most of Esri Community.