public override TargetView CreateTargetView(Target taget) { lock (_locker) { //if (displayer is TextDisplayer) //{ // if(taget is TargetDot) // return new DoNothingTargetView(); //} CoordinateTargetView view; if (taget == null) { return(null); } if (taget.GetType() == typeof(TargetDot)) { view = new CoordinateTargetDotView(taget, _sectorDrawer[taget.SectorIndex], ((GraphicTrackDisplayer)displayer).Factory, ((GraphicTrackDisplayer)displayer).coordinateSystem); } else { view = new CoordinateTargetTrackView(taget, _sectorDrawer[taget.SectorIndex], ((GraphicTrackDisplayer)displayer).Factory, ((GraphicTrackDisplayer)displayer).coordinateSystem); } return(view); } }
private void DisplayControl_MouseClick(object sender, MouseEventArgs e) { if (e.Button == MouseButtons.Left) { return; } bool stopFindingDot = false; lock (_locker) { //鼠标点击事件转发给每个视图对象处理,倒叙遍历,因为遍历过程中会有航迹的删除和添加 for (int i = _DotViews.Length - 1; i >= 0; i--) { for (int j = _DotViews[i].Count - 1; j >= 0; j--) { if (_DotViews[i][j].HandleMouseClick(e.Location)) //点击位置附近有多个目标时,只选取一个目标 { stopFindingDot = true; break; } } if (stopFindingDot) { break; } } for (int i = _TrackViews.Length - 1; i >= 0; i--) { for (int j = _TrackViews[i].Count - 1; j >= 0; j--) { if (_TrackViews[i][j].HandleMouseClick(e.Location)) { return; } } } //运行到此处说明没有点击位置没有任何目标,为MouseTargetTracker生成一个目标点 CoordinateTargetDotView view = GenerateGraphicTargetDotViewFromMouseLocation(e.Location); view.HandleMouseClick(e.Location); } }