Beispiel #1
0
        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));
        }
Beispiel #2
0
        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]));
        }
Beispiel #3
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]));
        }