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(); }
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); }
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); } }