예제 #1
0
        public CGEdge AddInternalEdge(CGPoint from, CGPoint to)
        {
            var ret = CGEdge.CreateEdge(from, to, true);

            internalEdges.Add(ret);
            return(ret);
        }
예제 #2
0
        public static Vertex CreateVertex(CGPoint p)
        {
            if (p == null)
            {
                return(null);
            }
            var ret = new Vertex()
            {
                point = p,
                e     = CGEdge.CreateEdge(p, p.succ),
            };

            if (p.y > p.succ.y && p.y > p.pred.y)
            {
                ret.type = CGUtils.ToLeft(p.pred, p.succ, p) ? Type.Split : Type.Start;
            }
            else if (p.y < p.succ.y && p.y < p.pred.y)
            {
                ret.type = CGUtils.ToLeft(p.pred, p.succ, p) ? Type.Merge : Type.End;
            }
            else
            {
                ret.type = Type.Normal;
            }
            return(ret);
        }
예제 #3
0
        public override void OnMouseUp(MouseEventArgs e)
        {
            var newP = WinManager.Instance.CreatePoint(e.X, CGUtils.ReversedY(e.Y));

            if (newP == null)
            {
                //var currP = form.currPt;
                //if (form.Points.Count > 1 && CGUtils.SqrtLength(form.Points[0], currP) < 500) {
                //    form.Points[0].pred = lastP;
                //    lastP.succ = form.Points[0];
                //    Draw.DrawLine(lastP, form.Points[0]);
                //    Draw.DrawImage();
                //    lastP = null;
                //}
                return;
            }
            Draw.DrawPoint(newP);
            Draw.DrawLine(lastP, newP);
            var edge = CGEdge.CreateEdge(lastP, newP);

            edges.Add(edge);
            lastP.owner = edge;
            newP.owner  = edge;
            lastP.succ  = newP;
            newP.pred   = lastP;
            lastP       = null;
        }
예제 #4
0
        CGEdge SearchLeftNeighbourEdge(Vertex v)
        {
            CGEdge e   = CGEdge.CreateEdge(v.point, v.point);
            var    ret = avl.Search(e);

            (avl.comparer as CGEdge.CGEdgeCompare).n = v.point.y - 0.1f;
            float x = ret.data.GetX(v.point.y);

            return(v.point.x > x ? ret.data : ret.Pred.data);
        }