示例#1
0
        public static Dictionary <string, object> FromOrigin(
            DSGeom.Point origin,
            List <DSGeom.Point> points,
            List <DSGeom.Polygon> boundary,
            [DefaultArgument("[]")] List <DSGeom.Polygon> obstacles)
        {
            DSGeom.Polygon isovist = IsovistPolygon(boundary, obstacles, origin);
            GTGeom.Polygon gPol    = GTGeom.Polygon.ByVertices(isovist.Points.Select(p => GTGeom.Vertex.ByCoordinates(p.X, p.Y, p.Z)).ToList());

            List <DSGeom.Point> visPoints = new List <DSGeom.Point>();
            double totalPoints            = points.Count;
            double visibilityAmount       = 0;

            foreach (DSGeom.Point point in points)
            {
                GTGeom.Vertex vertex = GTGeom.Vertex.ByCoordinates(point.X, point.Y, point.Z);

                if (gPol.ContainsVertex(vertex))
                {
                    ++visibilityAmount;
                    visPoints.Add(point);
                }
            }
            isovist.Dispose();

            return(new Dictionary <string, object>()
            {
                { scoreOutputPort, (1 / totalPoints) * visibilityAmount },
                { geometryOutputPort, visPoints }
            });
        }
示例#2
0
        public static Dictionary <string, object> OfPointsFromOrigin(
            Point origin,
            List <Point> points,
            List <Polygon> boundary,
            [DefaultArgument("[]")] List <Polygon> obstructions = null)
        {
            if (origin is null)
            {
                throw new ArgumentNullException(nameof(origin));
            }
            if (points is null || points.Count == 0)
            {
                throw new ArgumentNullException(nameof(points));
            }
            if (obstructions == null)
            {
                obstructions = new List <Polygon>();
            }

            Polygon isovist = IsovistPolygon(origin, obstructions, boundary);

            GTGeom.Polygon isovistPolygon = GTGeom.Polygon.ByVertices(isovist.Points.Select(p => GTGeom.Vertex.ByCoordinates(p.X, p.Y, p.Z)).ToList());

            var    visiblePoints    = new List <Point>();
            double totalPoints      = points.Count;
            double visibilityAmount = 0;

            for (var i = 0; i < points.Count; i++)
            {
                var           point  = points[i];
                GTGeom.Vertex vertex = GTGeom.Vertex.ByCoordinates(point.X, point.Y, point.Z);

                if (isovistPolygon.ContainsVertex(vertex))
                {
                    ++visibilityAmount;
                    visiblePoints.Add(point);
                }
            }
            isovist.Dispose();

            var visibilityPercentageScore = (1 / totalPoints) * visibilityAmount * 100;

            return(new Dictionary <string, object>()
            {
                { percentageVisibleOutputPort, visibilityPercentageScore },
                { visibleItemsOutputPort, visiblePoints }
            });
        }