const int dashStyleTimes = 10; //显示边界风格切换的次数,到达10次之后切换边界风格,DashDot->Dash或Dash->DashDot

        public GraphicWaveGateView(WaveGate waveGate, OverViewDisplayer ovd)
        {
            displayer = ovd;
            canvas    = displayer.Canvas;

            this.waveGate = waveGate;

            waveGateBrush = canvas.CreateSolidColorBrush(waveGate.IsSemiAuto ?
                                                         Tools.GetColorFFromRgb(255, 255, 0) :
                                                         Tools.GetColorFFromRgb(245, 222, 179));

            coodinateSystem = displayer.coordinateSystem;

            //Selected = false;

            PolarCoordinate c = new PolarCoordinate
            {
                Az = waveGate.BeginAngle,
                //ProjectedDis = waveGate.BeginDistance;    //之前版本将距离赋给ProjectedDis
                Dis = waveGate.BeginDistance
            };

            innerLeft = coodinateSystem.CoordinateToPoint(c);

            c.Az = waveGate.EndAngle;
            //c.ProjectedDis = waveGate.EndDistance;  //之前版本将距离赋给projectedDis
            c.Dis       = waveGate.EndDistance;
            outterRight = coodinateSystem.CoordinateToPoint(c);

            geometry = coodinateSystem.BuildWaveGateGeometry(innerLeft, outterRight);
        }
        private CoordinateTargetDotView GenerateGraphicTargetDotViewFromMouseLocation(Point mouseLocation)
        {
            PolarCoordinate coordinate =
                ((GraphicTrackDisplayer)displayer).coordinateSystem.PointToCoordinate(Tools.PointToPoint2F(mouseLocation));

            //计算所属扇区
            int    sectorCount = targetProvider.GetSectorCount();
            int    sectorIndex = 0;
            double angleSpan   = ((double)360) / sectorCount;

            for (int index = 0; index < sectorCount; index++)
            {
                if (coordinate.Az >= index * angleSpan && coordinate.Az < (index + 1) * angleSpan)
                {
                    sectorIndex = index;
                    break;
                }
            }//计算所属扇区完成
            TargetDot dot = new TargetDot(coordinate.Az, coordinate.El, coordinate.Dis)
            {
                SectorIndex = sectorIndex
            };
            TargetView view = ((GraphicTrackDisplayer)displayer).targetsManager.CreateTargetView(dot);

            return((CoordinateTargetDotView)view);
        }
        private WaveGate CalWaveGate()
        {
            float r1 = (float)Tools.DistanceBetween(displayer.coordinateSystem.OriginalPoint, mouseDownPosition);
            float r2 = (float)Tools.DistanceBetween(displayer.coordinateSystem.OriginalPoint, mouseDragPosition);

            //拖动距离太小不处理,这个判断主要是排除鼠标点击操作
            if (Math.Abs(r1 - r2) < 5 || Math.Abs(beginAngle - dragAngle) < 1)
            {
                return(null);
            }
            //发送波门位置信息
            Point2F         dragPosition = mouseDragPosition;
            PolarCoordinate c            = displayer.coordinateSystem.PointToCoordinate(mouseDownPosition);
            //float dis1 = c.ProjectedDis;
            float dis1 = c.Dis;

            c = displayer.coordinateSystem.PointToCoordinate(dragPosition);
            //float dis2 = c.ProjectedDis;
            float dis2 = c.Dis;

            float begin = Tools.FindSmallArcBeginAngle(beginAngle, dragAngle);
            float end   = Tools.FindSmallArcEndAngle(beginAngle, dragAngle);

            return(new WaveGate(begin, end, dis1, dis2, isSemiAutoWaveGate));
        }
예제 #4
0
 private void HOnMouseClick(object sender, MouseEventArgs mouseEventArgs)
 {
     if (Control.ModifierKeys == Keys.Control)   //ctrl键按下,添加一个TrackGenerator
     {
         PolarCoordinate coordinate =
             coordinateSystem.PointToCoordinate(Tools.PointToPoint2F(mouseEventArgs.Location));
         TargetManagerAddTrackGeneratorCommand generator = new TargetManagerAddTrackGeneratorCommand(coordinate);
         generator.Execute();
     }
     DisplayControl.Focus();
 }
예제 #5
0
        public void MoveMoveHandler(object sender, MouseEventArgs e)
        {
            Point2F         location   = Tools.PointToPoint2F(e.Location);
            PolarCoordinate coordinate = displayer.coordinateSystem.PointToCoordinate(location);

            azString  = "方位:" + coordinate.Az.ToString("0.0") + "°";
            disString = "距离:" + coordinate.ProjectedDis.ToString("0.0") + "m";
            RectF rect = new RectF(location.X + 10, location.Y + 30, location.X + 60, location.Y + 80);

            coordinateBoard?.Dispose();
            coordinateBoard = displayer.Factory.CreateRoundedRectangleGeometry(new RoundedRect(rect, 5, 5));
        }
예제 #6
0
        public override PolarCoordinate PointToCoordinate(Point2F p)
        {
            PolarCoordinate c = new PolarCoordinate();

            c.Az = Tools.AngleToNorth(OriginalPoint, p);
            float r = (float)Tools.DistanceBetween(OriginalPoint, p);
            float projectedDistance = (float)(r * Range * 2 / CoordinateArea.Width);

            c.ProjectedDis = projectedDistance;
            c.El           = -1;
            //c.Dis = -1;
            c.Dis = c.ProjectedDis;
            c.El  = 0;

            return(c);
        }
예제 #7
0
        public override Point2F CoordinateToPoint(PolarCoordinate coordinate)
        {
            double r = (coordinate.Az / 360) * CoordinateArea.Width; //


            double height = coordinate.Dis * Math.Sin(Tools.DegreeToRadian(coordinate.El)); //正常计算高度代码!!!正式程序运行此行
            //double height = coordinate.El;
            double h = height * CoordinateArea.Height / Range;

            float x1 = OriginalPoint.X + (int)r;
            float y1 = OriginalPoint.Y - (int)h;

            Point2F p = new Point2F(x1, y1);

            return(p);
        }
예제 #8
0
        public override Point2F CoordinateToPoint(PolarCoordinate coordinate)
        {
            double projectedDistance;

            //if (coordinate.ProjectedDis != -1)      //有待优化,取projectedDis的方式不合理
            //    projectedDistance = coordinate.ProjectedDis;
            //else
            //    projectedDistance = coordinate.Dis * Math.Cos(DegreeToRadian(coordinate.El));  //水平面的投影距离

            projectedDistance = coordinate.Dis;     //会导致波门绘制失效

            double r   = (((double)CoordinateArea.Width / 2) / (Range)) * (projectedDistance);
            double sin = Math.Sin(Tools.DegreeToRadian(coordinate.Az));
            double cos = Math.Cos(Tools.DegreeToRadian(coordinate.Az));
            double x1  = r * sin;
            double y1  = r * cos;

            x1 = OriginalPoint.X + x1;
            y1 = OriginalPoint.Y - y1;

            Point2F p = new Point2F((int)x1, (int)y1);

            return(p);
        }
 public TargetManagerAddTrackGeneratorCommand(PolarCoordinate coordinate)
 {
     this.coordinate = coordinate;
 }