/// <summary> /// 鼠标点击 /// </summary> /// <param name="c"></param> /// <param name="e"></param> public void OnMouseClick(BMapControl c, MouseEventArgs e) { if (IsVisible) { lock (_dicMarker) { foreach (var m in _dicMarker.Values) { //检测点击Marker if (m != null && m.Contains(e.Location)) { m.OnMouseClick(c, e); if (MarkerClick != null) { MarkerClick(m, e); } } //检测点击ToolTip var tip = m.ToolTip; if (tip != null && !tip.ViewRect.IsEmpty && tip.ViewRect.Contains(e.Location)) { tip.OnMouseClick(c, e); if (ToolTipClick != null) { ToolTipClick(tip); } } } } } }
/// <summary> /// 鼠标点击 /// </summary> /// <param name="c"></param> /// <param name="e"></param> public virtual void OnMouseClick(BMapControl c, MouseEventArgs e) { if (ToolTip != null && ToolTipMode == ToolTipShowMode.MouseClick) { ToolTip.IsOpen = !ToolTip.IsOpen; } }
/// <summary> /// 鼠标离开 /// </summary> /// <param name="c"></param> public virtual void OnMouseLeave(BMapControl c, MouseEventArgs e) { IsMouseOver = false; if (ToolTip != null && ToolTipMode == ToolTipShowMode.MouseOver) { ToolTip.IsOpen = IsMouseOver; } }
public void OnMouseDoubleClick(BMapControl c, MouseEventArgs e) { if (e.Button == MouseButtons.Left && e.Clicks == 2) { //左键双击结束画图 DrawMode = EditMode.None; } }
public void ReSet(BMapControl c) { _linesDist = 0; _drawCompleteToolTip = new InfoToolTip(); IsCompleted = false; LstMarkPoint.Clear(); c.Refresh(); }
public void OnMouseClick(BMapControl c, MouseEventArgs e) { if (!this.CloseButtonRect.IsEmpty && CloseButtonRect.Contains(e.Location)) { //关闭 IsOpen = false; } }
public override void Draw(BMapControl c, Graphics g) { var p = c.LatLngToPoint(Position); ScreenArea = new Rectangle(p, Size); RefreshRegion = new Region(ScreenArea); g.FillRectangle(FillBrush, ScreenArea); g.DrawRectangle(new Pen(BorderBrush, BorderWidth), ScreenArea); }
public virtual void Draw(BMapControl c, Graphics g) { var p = Marker.ScreenPosition.GetOffSet(Offset.X, Offset.Y); var titleSize = g.MeasureString(Title, this.Font).ToSize(); var contentSize = g.MeasureString(Content, Font).ToSize(); int w = Math.Max(titleSize.Width + TitlePadding.Width * 2, contentSize.Width + ContentPadding.Width * 2); w = (int)Math.Min(w, MaxWidth); int h = (int)Math.Min(titleSize.Height + TitlePadding.Height * 2 + contentSize.Height + ContentPadding.Height * 2 + ArrowSize.Height, MaxHeight); ViewRect = new Rectangle(p.X - (int)w / 2, p.Y - h, w, h); using (GraphicsPath gp = new GraphicsPath()) { BuildPath(gp); RefreshRegion = new Region(gp); if ((IsOpen || Marker.ToolTipMode == ToolTipShowMode.Always) && Marker.ToolTipMode != ToolTipShowMode.Never) { if (Background != null) { g.FillPath(Background, gp); } if (Stroke != null) { g.DrawPath(Stroke, gp); } if (!string.IsNullOrEmpty(Title)) { g.DrawString(Title, new Font(Font, FontStyle.Bold), Foreground, ViewRect.Location.GetOffSet(TitlePadding.Width, TitlePadding.Height)); } //画标题与内容中间的分割线 var pl1 = ViewRect.Location.GetOffSet(0, titleSize.Height + TitlePadding.Height * 2); var pl2 = pl1.GetOffSet(w, 0); g.DrawLine(new Pen(Foreground, 1), pl1, pl2); if (!string.IsNullOrEmpty(Content)) { var pContent = ViewRect.Location.GetOffSet(ContentPadding.Width, titleSize.Height + TitlePadding.Height * 2 + ContentPadding.Height); g.DrawString(Content, Font, Foreground, pContent); } DrawCloseButton(g); } } }
public override void Draw(BMapControl c, Graphics g) { lstPoint = new List <Point>(); foreach (var item in lstPLatLng) { lstPoint.Add(c.LatLngToPoint(item)); } using (var p = new Pen(Brushes.Yellow, 1)) { g.DrawPolygon(p, lstPoint.ToArray()); } }
public void Draw(BMapControl c, Graphics g) { if (IsVisible) { lock (_dicMarker) { foreach (var item in _dicMarker.Values) { if (item.IsVisible) { item.Draw(c, g); } } } } }
public virtual void Draw(BMapControl c, Graphics g) { if (!string.IsNullOrEmpty(Info)) { var size = g.MeasureString(Info, Font); int w = (int)size.Width + InfoPadding.Width * 2; int h = (int)size.Height + InfoPadding.Height * 2; var pen = new Pen(Foreground, 1); var p = ShowPoint; var pRT = ShowPoint.GetOffSet(w + 20, -(h + 20)); if (c.ClientRectangle.Right < pRT.X) { //屏幕右边越界 if (c.ClientRectangle.Top > pRT.Y) { //屏幕上面越界 g.DrawLine(pen, p, p = p.GetOffSet(-20, 20)); g.DrawLine(pen, p, p = p.GetOffSet(-w, 0)); RefreshRegion = new Region(new Rectangle(ShowPoint.X - 20 - w, ShowPoint.Y, w + 20, h + 20)); } else { g.DrawLine(pen, p, p = p.GetOffSet(-20, -20)); g.DrawLine(pen, p, p = p.GetOffSet(-w, 0)); p.Offset(0, -h); RefreshRegion = new Region(new Rectangle(ShowPoint.X - 20 - w, ShowPoint.Y - 20 - h, w + 20, h + 20)); } } else { if (c.ClientRectangle.Top > pRT.Y) { //屏幕上面越界 g.DrawLine(pen, p, p = p.GetOffSet(20, 20)); g.DrawLine(pen, p, p.GetOffSet(w, 0)); //p.Offset(0, 0); RefreshRegion = new Region(new Rectangle(ShowPoint.X, ShowPoint.Y, w + 20, h + 20)); } else { g.DrawLine(pen, p, p = p.GetOffSet(20, -20)); g.DrawLine(pen, p, p.GetOffSet(w, 0)); p.Offset(0, -h); RefreshRegion = new Region(new Rectangle(ShowPoint.X, ShowPoint.Y - 20 - h, w + 20, h + 20)); } } //g.DrawLine(pen, p, p = p.GetOffSet(20, -20)); //g.DrawLine(pen, p, p.GetOffSet(w, 0)); //p.Offset(0, -h); var rect = new Rectangle(p, new Size(w, h)); g.FillRectangle(Background, rect); p.Offset(InfoPadding.Width, InfoPadding.Height); g.DrawString(Info, Font, Foreground, p); } }
public void OnMouseMove(BMapControl c, MouseEventArgs e) { _curMousePoint = e.Location; switch (DrawMode) { case EditMode.DrawLine: if (LstMarkPoint.Count == 1) { var p1 = c.LatLngToPoint(LstMarkPoint[0]); c.Invalidate(DrawHelper.GetLineRegion(p1, _lastMousePoint)); c.Update(); } break; case EditMode.DrawLines: if (LstMarkPoint.Count > 0) { var p1 = c.LatLngToPoint(LstMarkPoint.Last()); c.Invalidate(DrawHelper.GetLineRegion(p1, _lastMousePoint)); c.Update(); } break; case EditMode.DrawRect: if (LstMarkPoint.Count == 1) { var p1 = c.LatLngToPoint(LstMarkPoint[0]); c.Invalidate(DrawHelper.GetLineRegion(p1, _lastMousePoint)); //c.Invalidate(DrawHelper.GetLineRegion(p1, _curMousePoint)); c.Update(); } break; case EditMode.DrawPolyon: if (LstMarkPoint.Count > 0) { var p1 = c.LatLngToPoint(LstMarkPoint.Last()); c.Invalidate(DrawHelper.GetLineRegion(p1, _lastMousePoint)); c.Update(); } break; case EditMode.DrawCircle: if (LstMarkPoint.Count == 1) { var p1 = c.LatLngToPoint(LstMarkPoint[0]); var region = DrawHelper.GetCircleRegion(p1, _lastMousePoint); //var region2 = DrawHelper.GetCircleRegion(p1, _lastMousePoint); c.Invalidate(region); //c.Invalidate(region2); c.Update(); } break; case EditMode.DrawPie: if (LstMarkPoint.Count == 1) { var p1 = c.LatLngToPoint(LstMarkPoint[0]); var curLatLng = c.MouseLatLng; var region = DrawHelper.GetCircleRegion(p1, _lastMousePoint); c.Invalidate(region); c.Update(); } else if (LstMarkPoint.Count == 2) { var p1 = c.LatLngToPoint(LstMarkPoint[0]); var p2 = c.LatLngToPoint(LstMarkPoint[1]); var region = DrawHelper.GetCircleRegion(p1, p2); c.Invalidate(region); c.Update(); //_curMouseToolTip.Info = string.Format("角度:{0:0.00}°", MercatorHelper.GetDistance(LstMarkPoint[0], curLatLng), MercatorHelper.GetBearing(LstMarkPoint[0], curLatLng)); } break; case EditMode.None: default: break; } if (DrawMode != EditMode.None) { //Refresh(); //刷新之前鼠标信息区域 c.Invalidate(_curMouseToolTip.RefreshRegion);//刷掉之前的绘图 _curMouseToolTip.ShowPoint = e.Location; _curMouseToolTip.Info = string.Format("经度:{0:0.0000000}\r\n纬度:{1:0.0000000}", c.MouseLatLng.LngX, c.MouseLatLng.LatY); //c.Invalidate(_curMouseToolTip.RefreshRegion);//刷掉之前的绘图 c.Update(); //var p = _lastMousePoint; //p.Offset(-1, -80); //var rect = new Rectangle(p.X, p.Y, 200, 82); //c.Invalidate(rect); ////刷新当前鼠标信息区域 //p = _curMousePoint; //p.Offset(-1, -80); //var curRect = new Rectangle(p.X, p.Y, 200, 82); //c.Invalidate(curRect); //c.Update(); } _lastMousePoint = e.Location; }
public override void OnMouseClick(BMapControl c, MouseEventArgs e) { }
public UserDrawing(BMapControl map) { mapObj = map; }
public void Draw(BMapControl c, Graphics g) { if (DrawMode != EditMode.None) { Point lastPoint = Point.Empty; if (LstMarkPoint.Count > 0) { lastPoint = c.LatLngToPoint(LstMarkPoint.Last()); } string editModeMsg = string.Empty; switch (DrawMode) { case EditMode.None: break; case EditMode.DrawLine: if (LstMarkPoint.Count == 1) { var p1 = c.LatLngToPoint(LstMarkPoint[0]); DrawDashLine(g, p1, _curMousePoint); } else if (LstMarkPoint.Count == 2) { var p1 = c.LatLngToPoint(LstMarkPoint[0]); var p2 = c.LatLngToPoint(LstMarkPoint[1]); g.DrawLine(DrawPen, p1, p2); _drawCompleteToolTip.ShowPoint = p2; } editModeMsg = "画线模式(测距,测正北角)"; break; case EditMode.DrawLines: if (LstMarkPoint.Count > 0) { var lst = new List <Point>(); //double dist = 0; //var tempLatLng = new PointLatLng(); foreach (var item in LstMarkPoint) { lst.Add(c.LatLngToPoint(item)); } if (lst.Count > 1) { g.DrawLines(DrawPen, lst.ToArray()); } } if (IsCompleted) { _drawCompleteToolTip.ShowPoint = lastPoint; } editModeMsg = "画折线模式(测距)"; break; case EditMode.DrawRect: if (LstMarkPoint.Count == 1) { var p1 = c.LatLngToPoint(LstMarkPoint[0]); DrawDashLine(g, p1, _curMousePoint); DrawPen.DashStyle = DashStyle.Solid; } else if (LstMarkPoint.Count == 2) { var p1 = c.LatLngToPoint(LstMarkPoint[0]); var p2 = c.LatLngToPoint(LstMarkPoint[1]); var rect = DrawHelper.GetRect(p1, p2); g.FillRectangle(FillBrush, rect); g.DrawRectangle(DrawPen, rect); //_drawCompleteToolTip.ShowPoint = p2; } editModeMsg = "画矩形模式"; break; case EditMode.DrawPolyon: if (LstMarkPoint.Count > 1) { List <Point> lstp = new List <Point>(); foreach (var item in LstMarkPoint) { lstp.Add(c.LatLngToPoint(item)); } PolyonPath = new GraphicsPath(); var ps = lstp.ToArray(); if (!IsCompleted) { g.DrawLines(DrawPen, ps); //DrawDashLine(g, lastPoint, _curMousePoint); } else { if (ps.Length > 2) { g.DrawPolygon(DrawPen, ps); } } if (ps.Length > 2) { PolyonPath.AddPolygon(ps); PolyonPath.CloseFigure(); g.FillPolygon(FillBrush, ps); } } editModeMsg = "画多边形模式"; break; case EditMode.DrawCircle: if (LstMarkPoint.Count == 1) { var p1 = c.LatLngToPoint(LstMarkPoint[0]); var rect = DrawHelper.GetEllipseRect(p1, _curMousePoint); DrawPen.DashStyle = DashStyle.DashDot; DrawPen.DashPattern = new float[] { 5, 2 }; g.FillEllipse(FillBrush, rect); g.DrawEllipse(DrawPen, rect); DrawPen.DashStyle = DashStyle.Solid; } else if (LstMarkPoint.Count == 2) { var p1 = c.LatLngToPoint(LstMarkPoint[0]); var p2 = c.LatLngToPoint(LstMarkPoint[1]); var rect = DrawHelper.GetEllipseRect(p1, p2); g.FillEllipse(FillBrush, rect); g.DrawEllipse(DrawPen, rect); //g.FillEllipse(DrawPen.Brush, new Rectangle(p1.GetOffSet(-5, -5), new Size(10, 10)));//画圆心 DrawDashLine(g, p1, p2); _drawCompleteToolTip.ShowPoint = p2; } editModeMsg = "画圆模式"; break; case EditMode.DrawPie: switch (LstMarkPoint.Count) { case 1: { var p1 = c.LatLngToPoint(LstMarkPoint[0]); var curLatLng = c.MouseLatLng; DrawPen.DashStyle = DashStyle.DashDot; DrawPen.DashPattern = new float[] { 5, 2 }; DrawPie(g, p1, _curMousePoint); DrawDashLine(g, p1, _curMousePoint); _curMouseToolTip.Info = string.Format("距离:{0:0.00}米\r\n正北角:{1:0.00}°", MercatorHelper.GetDistance(LstMarkPoint[0], curLatLng), MercatorHelper.GetBearing(LstMarkPoint[0], curLatLng)); } break; case 2: { var p1 = c.LatLngToPoint(LstMarkPoint[0]); var p2 = c.LatLngToPoint(LstMarkPoint[1]); var angle = DrawHelper.GetAngle(p1, p2, _curMousePoint); float angleWidth = 2 * (float)angle; DrawPen.DashStyle = DashStyle.DashDot; DrawPen.DashPattern = new float[] { 5, 2 }; DrawPie(g, p1, p2, angleWidth); DrawDashLine(g, p1, p2); //DrawDashLine(g, p1, _curMousePoint); _curMouseToolTip.Info = string.Format("角度:{0:0.00}°", angleWidth); } break; case 3: { var p1 = c.LatLngToPoint(LstMarkPoint[0]); var p2 = c.LatLngToPoint(LstMarkPoint[1]); var p3 = c.LatLngToPoint(LstMarkPoint[2]); var angle = DrawHelper.GetAngle(p1, p2, p3); float angleWidth = 2 * (float)angle; DrawPen.DashStyle = DashStyle.Solid; DrawPie(g, p1, p2, angleWidth); //g.DrawPie(DrawPen,) _drawCompleteToolTip.ShowPoint = p1; } break; default: break; } editModeMsg = "画扇形模式"; break; default: break; } //画坐标点信息 _curMouseToolTip.Draw(c, g); if (IsCompleted) { //_drawCompleteToolTip.ShowPoint = lastPoint; _drawCompleteToolTip.Draw(c, g);//画完成信息 } else if (!lastPoint.IsEmpty) { switch (DrawMode) { case EditMode.None: break; case EditMode.DrawLine: case EditMode.DrawLines: case EditMode.DrawPolyon: case EditMode.DrawCircle: //case EditMode.DrawPie: //画虚线 DrawDashLine(g, lastPoint, _curMousePoint); break; default: break; } } var pMode = new Point(c.Width / 2 - 50, 10); g.DrawString(editModeMsg, new Font("微软雅黑", 12, FontStyle.Bold), Brushes.White, pMode);//画模式 } }
public void OnMouseClick(BMapControl c, MouseEventArgs e) { if (e.Button == MouseButtons.Left) { if (IsCompleted) { ReSet(c); } switch (DrawMode) { case EditMode.DrawLine: if (LstMarkPoint.Count < 2) { LstMarkPoint.Add(c.PointToLatLng(e.Location)); } else { LstMarkPoint.Add(c.PointToLatLng(e.Location)); } if (LstMarkPoint.Count == 2) { IsCompleted = true; var p1 = LstMarkPoint[0]; var p2 = LstMarkPoint[1]; //c.Invalidate(DrawHelper.GetLineRegion(c.LatLngToPoint(p1), c.LatLngToPoint(p2))); _drawCompleteToolTip.Info = string.Format("距离:{0:0.00} 米\r\n正北角:{1:0.0} °" , MercatorHelper.GetDistance(p1, p2), MercatorHelper.GetBearing(p1, p2)); } break; case EditMode.DrawLines: PointLatLng lastP = null; if (LstMarkPoint.Count > 0) { lastP = LstMarkPoint.Last(); } var curP = c.PointToLatLng(e.Location); LstMarkPoint.Add(curP); //计算距离 if (lastP != null) { _linesDist += MercatorHelper.GetDistance(lastP, curP); } _drawCompleteToolTip.Info = string.Format("总距离:{0:0.00} 米", _linesDist); break; case EditMode.DrawRect: if (LstMarkPoint.Count < 2) { LstMarkPoint.Add(c.PointToLatLng(e.Location)); } if (LstMarkPoint.Count == 2) { IsCompleted = true; //var p1 = LstMarkPoint[0]; //var p2 = LstMarkPoint[1]; ////c.Invalidate(DrawHelper.GetLineRegion(c.LatLngToPoint(p1), c.LatLngToPoint(p2))); //_drawCompleteToolTip.Info = string.Format("面积:{0:0.00} m²\r\n正北角:{1:0.0} °" // , MercatorHelper.GetDistance(p1, p2)* MercatorHelper.GetBearing(p1, p2)); } break; case EditMode.DrawPolyon: LstMarkPoint.Add(c.PointToLatLng(e.Location)); break; case EditMode.DrawCircle: LstMarkPoint.Add(c.PointToLatLng(e.Location)); if (LstMarkPoint.Count == 2) { IsCompleted = true; var p1 = LstMarkPoint[0]; var p2 = LstMarkPoint[1]; _drawCompleteToolTip.Info = string.Format("半径:{0:0.00}米", MercatorHelper.GetDistance(p1, p2)); } break; case EditMode.DrawPie: LstMarkPoint.Add(c.PointToLatLng(e.Location)); if (LstMarkPoint.Count == 3) { IsCompleted = true; var p1 = c.LatLngToPoint(LstMarkPoint[0]); var p2 = c.LatLngToPoint(LstMarkPoint[1]); var p3 = c.LatLngToPoint(LstMarkPoint[2]); _drawCompleteToolTip.Info = string.Format("坐标:{0}\r\n半径:{1:0.00}米\r\n中线方向:{2:0.00}°\r\n角度宽:{3:0.00}°", LstMarkPoint[0], MercatorHelper.GetDistance(LstMarkPoint[0], LstMarkPoint[1]), MercatorHelper.GetBearing(LstMarkPoint[0], LstMarkPoint[1]), 2 * DrawHelper.GetAngle(p1, p2, p3)); } break; case EditMode.None: default: break; } } else if (e.Button == MouseButtons.Right) { IsCompleted = true; } if (DrawMode != EditMode.None) { c.Refresh(); } if (IsCompleted) { if (DrawComplete != null) { DrawComplete(LstMarkPoint); } } }
public void OnMouseMove(BMapControl c, MouseEventArgs e) { if (IsVisible) { if (_dicMarker != null && _dicMarker.Count > 0) { List <MarkerBase> lstMarker = null; lock (_dicMarker) { lstMarker = _dicMarker.Values.ToList(); } if (lstMarker != null) { foreach (var m in lstMarker) { if (m != null && m.IsVisible) { //判断鼠标经过Marker if (!m.IsMouseOver) { if (m.Contains(e.Location)) { m.OnMouseEnter(c, e); RefreshMarker(m); if (MarkerEnter != null) { MarkerEnter(m); } } } else { if (!m.Contains(e.Location)) { //m.IsMouseOver = false; m.OnMouseLeave(c, e); RefreshMarker(m); if (MarkerLeave != null) { MarkerLeave(m); } } } //判断鼠标经过tooltip var tip = m.ToolTip; if (tip != null && tip.IsOpen) { if (!tip.IsMouseOver) { if (tip.ViewRect.Contains(e.Location)) { tip.IsMouseOver = true; RefreshToolTip(tip); } } else { if (!tip.ViewRect.Contains(e.Location)) { tip.IsMouseOver = false; RefreshToolTip(tip); } } } } } } } } }
/// <summary> /// 绘制标记 /// </summary> /// <param name="g"></param> public abstract void Draw(BMapControl c, Graphics g);