protected override void OnMouseMove(MouseEventArgs e) { base.OnMouseMove(e); if (tracking) { selectedEntity.Move(new Point(e.X - _stratPoint.GetPoint().X, e.Y - _stratPoint.GetPoint().Y)); if (typeof(Connector).IsInstanceOfType(selectedEntity)) { for (int k = 0; k < shapes.Count; k++) { shapes[k].HitConnector(e.Location); } } } else if (_leftMouse) { _viewOriginPoint = new DiagramPoint(_viewOriginPoint.GetPoint().X + e.X - _stratPoint.GetPoint().X, _viewOriginPoint.GetPoint().Y + e.Y - _stratPoint.GetPoint().Y); } int entityTYpe = -1;//0:ShapeBase;1:ShapeBase.connectors;2:connections;3:connections.From;4:connections.To. Entity hoveredentity = shapes.Cast <Entity>().FirstOrDefault(f => f.Hit(e.Location)); if (hoveredentity == null) { hoveredentity = connections.Cast <Connection>().FirstOrDefault(f => { if (f.Hit(e.Location)) { entityTYpe = 2; return(true); } if (f.From.Hit(e.Location)) { entityTYpe = 3; return(true); } if (f.To.Hit(e.Location)) { entityTYpe = 4; return(true); } return(false); }); } if (entityTYpe == 3) { hoveredentity = ((Connection)hoveredentity).From; } if (entityTYpe == 4) { hoveredentity = ((Connection)hoveredentity).To; } UpdateHovered(hoveredentity); _stratPoint = e.Location; Invalidate(true); }
/// <summary> /// Tests if the mouse hits this connector /// </summary> /// <param name="p"></param> /// <returns></returns> public override bool Hit(Point p) { p.X = p.X - this.site.ViewOriginPoint.GetPoint().X; p.Y = p.Y - this.site.ViewOriginPoint.GetPoint().Y; Point a = p; Point b = point.GetPoint(); b.Offset(-7, -7); //a.Offset(-1,-1); Rectangle r = new Rectangle(a, new Size(0, 0)); Rectangle d = new Rectangle(b, new Size(15, 15)); return(d.Contains(r)); }