예제 #1
0
        //------------------------------------------------------------------------------

        protected override void AddLocalMaxPoly(Active e1, Active e2, Point Pt)
        {
            OutRec outrec = e1.OutRec;
            //very occasionally IsStartSide(e1) is wrong so ...
            bool is_outer = IsStartSide(e1) || (e1.OutRec == e2.OutRec);

            if (is_outer)
            {
                OutRecTri ort = (OutRecTri)(e1.OutRec);
                if (ort.leftOutpt != null)
                {
                    UpdateHelper(outrec, null);
                }
                UpdateHelper(e2.OutRec, null);
            }

            base.AddLocalMaxPoly(e1, e2, Pt);

            if (outrec.Pts == null)
            {
                outrec = outrec.Owner;
            }

            if (is_outer)
            {
                OutPtTri ort  = (OutPtTri)outrec.Pts;
                OutPtTri ort2 = (OutPtTri)outrec.Pts.Next;
                if (ort.rightOutrec != null)
                {
                    UpdateHelper(ort.rightOutrec, null);
                }
                else if (ort2.rightOutrec != null)
                {
                    UpdateHelper(ort2.rightOutrec, null);
                }
            }
            else
            {
                Active e = GetRightAdjacentHotEdge(e2);
                if (e != null)
                {
                    UpdateHelper(e.OutRec, LastOp);
                }
                Update(outrec.Pts, outrec);
            }
            Triangulate(outrec);
        }
예제 #2
0
        //------------------------------------------------------------------------------

        private void UpdateHelper(OutRec rightOutrec, OutPt leftOutpt)
        {
            OutPtTri  leftOpt  = (OutPtTri)leftOutpt;
            OutRecTri rightOrt = (OutRecTri)rightOutrec;

            if (leftOpt != null && leftOpt.rightOutrec != null)
            {
                leftOpt.rightOutrec.leftOutpt = null;
            }
            if (rightOrt.leftOutpt != null)
            {
                rightOrt.leftOutpt.rightOutrec = null;
            }
            rightOrt.leftOutpt = leftOpt;
            if (leftOpt != null)
            {
                leftOpt.rightOutrec = rightOrt;
            }
        }