Exemplo n.º 1
0
        public void DrawTracker(Graphics canvas, CrossEle.DirectionCross direction)
        {
            if (canvas == null)
            {
                throw new Exception("Graphics对象Canvas不能为空");
            }
            Pen pen = new Pen(Color.Blue, 1);

            //SolidBrush bsh = new SolidBrush(Color.Blue);
            Point[] pts = new Point[4];
            pts[0] = pointList[0];
            pts[1] = pointList[3];
            pts[2] = pointList[5];
            pts[3] = pointList[7];
            if (drawMultiFactor != 1)
            {
                for (int i = 0; i < pts.Length; i++)
                {
                    pts[i].Offset(pts[i].X * drawMultiFactor - pts[i].X, pts[i].Y * drawMultiFactor - pts[i].Y);
                }
            }
            for (int i = 0; i < 4; i++)
            {
                Rectangle rc = new Rectangle(pts[i].X - 4, pts[i].Y - 4, 8, 8);
                canvas.DrawRectangle(pen, rc);
                //canvas.FillRectangle(bsh, rc);
            }
            pen.Dispose();
            //bsh.Dispose();
        }
Exemplo n.º 2
0
        public int HandleHitTest(Point point, CrossEle.DirectionCross direction, bool isMirror)
        {
            Point[] pts = new Point[4];
            pts[0] = pointList[0];
            pts[1] = pointList[3];
            pts[2] = pointList[5];
            pts[3] = pointList[7];
            Point tempPt = Point.Empty;

            for (int i = 0; i < 4; i++)
            {
                Point pt = pts[i];
                pt.Offset(pt.X * drawMultiFactor - pt.X, pt.Y * drawMultiFactor - pt.Y);
                Rectangle rc = new Rectangle(pt.X - 3, pt.Y - 3, 6, 6);
                if (rc.Contains(point))
                {
                    return(i + 1);
                }
            }
            return(-1);
        }
Exemplo n.º 3
0
        public int HitTest(
            Point point,
            bool isSelected,
            CrossEle.DirectionCross direction,
            bool isMirror)
        {
            if (isSelected)
            {
                int handleHit = HandleHitTest(point, direction, isMirror);
                if (handleHit > 0)
                {
                    return(handleHit);
                }
            }
            Point wrapper = new Point();

            wrapper = point;
            Rectangle rc = new Rectangle();

            Point[] pts = new Point[4];
            if (!isMirror)
            {
                pts[0] = pointList[0];
                pts[2] = pointList[5];
            }
            else if (isMirror)
            {
                pts[0] = pointList[5];
                pts[2] = pointList[0];
            }
            pts[1] = pointList[3];
            pts[3] = pointList[7];
            if (drawMultiFactor != 1)
            {
                Point tempPt = Point.Empty;
                int   n      = pts.Length;
                for (int i = 0; i < n; i++)
                {
                    tempPt = pts[i];
                    tempPt.Offset(tempPt.X * drawMultiFactor - tempPt.X, tempPt.Y * drawMultiFactor - tempPt.Y);
                    pts[i] = tempPt;
                }
            }
            switch (direction)
            {
            case CrossEle.DirectionCross.first:
                rc = new Rectangle(pts[0].X, pts[3].Y, pts[2].X - pts[0].X, pts[1].Y - pts[3].Y);
                break;

            case CrossEle.DirectionCross.second:
                rc = new Rectangle(pts[1].X, pts[0].Y, pts[3].X - pts[1].X, pts[2].Y - pts[0].Y);
                break;

            case CrossEle.DirectionCross.third:
                rc = new Rectangle(pts[2].X, pts[1].Y, pts[0].X - pts[2].X, pts[3].Y - pts[1].Y);
                break;

            case CrossEle.DirectionCross.four:
                rc = new Rectangle(pts[3].X, pts[2].Y, pts[1].X - pts[3].X, pts[0].Y - pts[2].Y);
                break;

            default:
                break;
            }
            GraphicsPath path = new GraphicsPath();

            path.AddRectangle(rc);
            Region region = new Region(path);

            if (region.IsVisible(wrapper))
            {
                return(0);
            }
            else
            {
                return(-1);
            }
        }