Esempio n. 1
0
 public void ReSet(BMapControl c)
 {
     _linesDist           = 0;
     _drawCompleteToolTip = new InfoToolTip();
     IsCompleted          = false;
     LstMarkPoint.Clear();
     c.Refresh();
 }
Esempio n. 2
0
        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);
                }
            }
        }