Example #1
0
        /// <summary>
        /// Create an edge builder which builds the geometry for the given edge
        /// </summary>
        /// <param name="edge"></param>
        /// <param name="roadLanes"></param>
        /// <returns></returns>
        protected virtual IHalfEdgeBuilder CreateHalfEdgeBuilder(HalfEdge <IVertexBuilder, IHalfEdgeBuilder, IFaceBuilder> edge, uint roadLanes)
        {
            Contract.Requires(edge != null);
            Contract.Requires(HierarchicalParameters != null);
            Contract.Ensures(Contract.Result <IHalfEdgeBuilder>() != null);

            var road = HierarchicalParameters.RoadLaneWidth(Random);
            var path = HierarchicalParameters.RoadSidewalkWidth(Random);

            return(new HalfEdgeRoadBuilder(edge, road, path, roadLanes));
        }
Example #2
0
        private void MaterializeMesh(Mesh <IVertexBuilder, IHalfEdgeBuilder, IFaceBuilder> mesh)
        {
            Contract.Requires(mesh != null);

            //Generate default footpath data
            HierarchicalParameters.RoadSidewalkHeight(Random);
            HierarchicalParameters.RoadSidewalkWidth(Random);
            HierarchicalParameters.RoadLaneWidth(Random);
            HierarchicalParameters.RoadSidewalkMaterial(Random);

            //Generate default building data
            HierarchicalParameters.MaximumBuildingHeight(Random);

            //Attach builders to each part of the topological mesh
            foreach (var vertex in mesh.Vertices.Where(v => v.Tag == null))
            {
                vertex.Tag = CreateVertexBuilder(vertex);
            }
            foreach (var halfEdge in mesh.HalfEdges.Where(e => e.IsPrimaryEdge && e.Tag == null))
            {
                halfEdge.Tag = CreateHalfEdgeBuilder(halfEdge, RoadLanes(halfEdge));
            }
            foreach (var face in mesh.Faces.Where(f => f.Tag == null))
            {
                face.Tag = CreateFaceBuilder(face);
            }

            //Create junctions (appropriate shape for different widths of road)
            foreach (var vertex in mesh.Vertices)
            {
                CreateJunction(Bounds.Height, vertex);
            }

            //Create roads (with appropriate widths)
            foreach (var edge in mesh.HalfEdges.Where(e => e.IsPrimaryEdge))
            {
                CreateRoad(Bounds.Height, edge);
            }

            //Create blocks (with appropriate shapes for different road widths)
            foreach (var face in mesh.Faces)
            {
                CreateBlock(Bounds.Height, face);
            }
        }