GetBounds() public method

public GetBounds ( ) : IntRect
return IntRect
Ejemplo n.º 1
0
        public void Execute(ref List <List <IntPoint> > solution, double delta)
        {
            solution.Clear();
            FixOrientations();
            DoOffset(delta);
            Clipper clipper = new Clipper(0);

            clipper.AddPaths(m_destPolys, PolyType.ptSubject, true);
            if (delta > 0.0)
            {
                clipper.Execute(ClipType.ctUnion, solution, PolyFillType.pftPositive, PolyFillType.pftPositive);
            }
            else
            {
                IntRect         bounds = ClipperBase.GetBounds(m_destPolys);
                List <IntPoint> list   = new List <IntPoint>(4);
                list.Add(new IntPoint(bounds.left - 10, bounds.bottom + 10));
                list.Add(new IntPoint(bounds.right + 10, bounds.bottom + 10));
                list.Add(new IntPoint(bounds.right + 10, bounds.top - 10));
                list.Add(new IntPoint(bounds.left - 10, bounds.top - 10));
                clipper.AddPath(list, PolyType.ptSubject, true);
                clipper.ReverseSolution = true;
                clipper.Execute(ClipType.ctUnion, solution, PolyFillType.pftNegative, PolyFillType.pftNegative);
                if (solution.Count > 0)
                {
                    solution.RemoveAt(0);
                }
            }
        }
Ejemplo n.º 2
0
        public void Execute(ref PolyTree solution, double delta)
        {
            solution.Clear();
            FixOrientations();
            DoOffset(delta);
            Clipper clipper = new Clipper(0);

            clipper.AddPaths(m_destPolys, PolyType.ptSubject, true);
            if (delta > 0.0)
            {
                clipper.Execute(ClipType.ctUnion, solution, PolyFillType.pftPositive, PolyFillType.pftPositive);
            }
            else
            {
                IntRect         bounds = ClipperBase.GetBounds(m_destPolys);
                List <IntPoint> list   = new List <IntPoint>(4);
                list.Add(new IntPoint(bounds.left - 10, bounds.bottom + 10));
                list.Add(new IntPoint(bounds.right + 10, bounds.bottom + 10));
                list.Add(new IntPoint(bounds.right + 10, bounds.top - 10));
                list.Add(new IntPoint(bounds.left - 10, bounds.top - 10));
                clipper.AddPath(list, PolyType.ptSubject, true);
                clipper.ReverseSolution = true;
                clipper.Execute(ClipType.ctUnion, solution, PolyFillType.pftNegative, PolyFillType.pftNegative);
                if (solution.ChildCount == 1 && solution.Childs[0].ChildCount > 0)
                {
                    PolyNode polyNode = solution.Childs[0];
                    solution.Childs.Capacity    = polyNode.ChildCount;
                    solution.Childs[0]          = polyNode.Childs[0];
                    solution.Childs[0].m_Parent = solution;
                    for (int i = 1; i < polyNode.ChildCount; i++)
                    {
                        solution.AddChild(polyNode.Childs[i]);
                    }
                }
                else
                {
                    solution.Clear();
                }
            }
        }