threejs-worldgen
    Preparing search index...

    Class RoadGraph

    A planar road graph: every crossing of two roads is a node. RoadGraph.addEdge refuses edges that would cross or touch another edge away from a shared node, so the graph stays planar by construction. Spatially hashed for fast snapping and crossing queries, and plain data (toJSON) so crowds and vehicles can navigate it.

    Index
    • Creates an empty graph; cellSize should be about the typical segment length.

      Parameters

      • cellSize: number = 40

      Returns RoadGraph

    cellSize: number

    Spatial hash cell size, metres.

    edges: RoadEdge[] = []

    All edges, by id.

    nodes: RoadNode[] = []

    All nodes, by id.

    • Adds an edge between existing nodes. Returns its id, or −1 (and changes nothing) if it would break planarity, duplicate an edge, or have zero length.

      Parameters

      • a: number
      • b: number
      • type: RoadType
      • width: number
      • sidewalk: number
      • bridge: boolean = false

      Returns number

    • Adds a node and returns its id.

      Parameters

      • x: number
      • z: number

      Returns number

    • True if segment a→b (between nodes na and nb, which may be −1) would touch any edge not sharing one of those nodes. skipEdge is ignored (the edge about to be split at b).

      Parameters

      • ax: number
      • az: number
      • bx: number
      • bz: number
      • na: number = -1
      • nb: number = -1
      • skipEdge: number = -1

      Returns boolean

    • Edge id connecting nodes a and b, or −1.

      Parameters

      • a: number
      • b: number

      Returns number

    • Ids of edges that may overlap the box (a superset: check the geometry).

      Parameters

      • minX: number
      • minZ: number
      • maxX: number
      • maxZ: number

      Returns number[]

    • First edge crossed by segment a→b (nearest to a), ignoring edges at node skipNode. distance is the parameter along a→b.

      Parameters

      • ax: number
      • az: number
      • bx: number
      • bz: number
      • skipNode: number = -1

      Returns EdgeHit | null

    • Length of edge e, metres.

      Parameters

      • e: number

      Returns number

    • Nearest point on any edge within radius of (x, z), skipping edges for which skip is true.

      Parameters

      • x: number
      • z: number
      • radius: number
      • Optionalskip: (id: number) => boolean

      Returns EdgeHit | null

    • Nearest node within radius of (x, z), skipping ids in skip; −1 if none.

      Parameters

      • x: number
      • z: number
      • radius: number
      • Optionalskip: (id: number) => boolean

      Returns number

    • The other end of edge e seen from node n.

      Parameters

      • e: number
      • n: number

      Returns number

    • Shortest route between two nodes along the roads (A*). Returns node ids from from to to, or an empty array if they are not connected. cost can weight edges (default: length).

      Parameters

      • from: number
      • to: number
      • cost: (edge: RoadEdge, length: number) => number = ...

      Returns number[]

    • Splits edge e at (x, z) (projected onto it) with a new node; returns the node id.

      Parameters

      • e: number
      • x: number
      • z: number

      Returns number