示例#1
0
    public Hull(List <Vector3> points)
    {
        //Make a new convex hull
        this.points = ConvexHull.Compute(points, true);

        this.points = MathfEx.smoothPolygon(this.points);
    }
示例#2
0
        public static CanvasGeometry ComputeHullGeometry(ICanvasResourceCreator resourceCreator, Win2DScene scene, Win2DRenderNode renderNode)
        {
            Guard.NotNull(scene, nameof(scene));
            Guard.NotNull(renderNode, nameof(renderNode));
            Guard.NotNull(resourceCreator, nameof(resourceCreator));

            var node = renderNode.Node;

            if (!node.HasChildren || node.IsCollapsed)
            {
                return(null);
            }

            IList <Rect2> childBounds =
                node.AllChildren()
                .Select(x => (Win2DRenderNode)scene.FindRenderNode(x)).Union(new[] { renderNode }).Where(x => x.IsVisible)
                .Select(x => Rect2.Inflate(new Rect2(x.TargetLayoutPosition, x.RenderSize), new Vector2(Padding, Padding)))
                .ToList();

            if (childBounds.Count <= 0)
            {
                return(null);
            }

            var hull = ConvexHull.Compute(childBounds);

            var points = RoundCorners(hull);

            return(BuildGeometry(resourceCreator, points));
        }
示例#3
0
    public Hull(List <Vector3> pointsA, List <Vector3> pointsB)
    {
        //Union the two together -- not the best approach but its 2am
        List <Vector3> allPoints = pointsA.Union(pointsB).ToList();

        //Compute the hull and save it
        this.points = ConvexHull.Compute(allPoints, true);

        this.points = MathfEx.smoothPolygon(this.points);
    }
示例#4
0
        public void ComputeHull_FromRects_CorrectCornersCalculated()
        {
            Rect2 rect1 = new Rect2(00, 00, 50, 50);
            Rect2 rect2 = new Rect2(50, 50, 20, 20);

            IEnumerable <Rect2> rects = new[] { rect1, rect2 };

            ConvexHull hull = ConvexHull.Compute(rects);

            Assert.Equal(6, hull.Points.Count);

            Assert.Equal(new[]
            {
                new Vector2(00, 00),
                new Vector2(00, 50),
                new Vector2(50, 70),
                new Vector2(70, 70),
                new Vector2(70, 50),
                new Vector2(50, 00)
            }, hull.Points.ToArray());
        }