public Hull(List <Vector3> points) { //Make a new convex hull this.points = ConvexHull.Compute(points, true); this.points = MathfEx.smoothPolygon(this.points); }
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)); }
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); }
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()); }