public static Polygon Shape1minus2(List <Vec2> shape1, List <Vec2> shape2) { Polygon p1 = new Polygon(shape1); Polygon p2 = new Polygon(shape2); return(GpcWrapper.Clip(GpcWrapper.GpcOperation.Difference, p1, p2)); }
public static List <Vec2i> IntersectShapes(List <Vec2i> shape1, List <Vec2i> shape2) { Polygon p1 = new Polygon(shape1); Polygon p2 = new Polygon(shape2); Polygon p = GpcWrapper.Clip(GpcWrapper.GpcOperation.Intersection, p1, p2); if (p == null || p.NumContours != 1) { return(new List <Vec2i>()); } return(Vec2i.FromVec2dList(p[0])); }
public static Geometry.Shape BoxesToShape(List <Box2> boxes) { if (boxes.Count == 0) { return(null); } Polygon p = null; foreach (Box2 b in boxes) { if (b.Dimensions.X > 0.0001 && b.Dimensions.Y > 0.0001) { Polygon pb = new Polygon(b.Corners()); if (p == null) { p = pb; } else { try { Polygon newPoly = GpcWrapper.Clip(GpcWrapper.GpcOperation.Union, p, pb); p = newPoly; } catch (Exception) { throw; } } } } List <List <Vec2> > vlists = PolygonToVectorLists(p); if (vlists.Count == 0) { return(null); } return(new Geometry.Shape(vlists[0])); }