/// <summary> /// 执行命令 /// </summary> public void RunCommond() { if (marker == null) { return; } element.HightLight(true); Utils.bPublishEvent = false; gmapControl.OnMarkerEnter += gmapControl_OnMarkerEnter; gmapControl.DoubleClick += gmapControl_DoubleClick; gmapControl.KeyDown += gmapControl_KeyDown; }
/// <summary> /// 鼠标双击事件 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void gmapControl_DoubleClick(object sender, EventArgs e) { ReleaseCommond(); selectedElment.HightLight(false); foreach (var item in elementList) { item.HightLight(false); } }
/// <summary> /// 面点击事件 /// </summary> /// <param name="item"></param> /// <param name="e"></param> void gmapControl_OnPolygonClick(GMapPolygon item, System.Windows.Forms.MouseEventArgs e) { selectedElment = mapLogic.GetElement(item.Tag.ToString()); if (selectedElment == null) { return; } selectedElment.HightLight(!selectedElment.IsHightLight); }
//弹起 private void mapControl_eventLButtonUp(object sender, _DHOSOFTMapControlEvents_eventLButtonUpEvent e) { mapControl.eventLButtonUp -= mapControl_eventLButtonUp; if (e.x == startPoint.X && e.y == startPoint.Y) { return; } string objXml = ""; if (startPoint.X < e.x) { if (startPoint.Y < e.y) { //左右下 objXml = mapControl.pickupByRect(startPoint.X, startPoint.Y, e.x, e.y); } else { //左右上 objXml = mapControl.pickupByRect(startPoint.X, e.y, e.x, startPoint.Y); } } else { if (startPoint.Y < e.y) { //右左下 objXml = mapControl.pickupByRect(e.x, startPoint.Y, startPoint.X, e.y); } else { //右左上 objXml = mapControl.pickupByRect(e.x, e.y, startPoint.X, startPoint.Y); } } if (string.IsNullOrEmpty(objXml)) { return; } this.ClearSelectElements();//先清理列表 XmlDocument xmlDoc = new XmlDocument(); xmlDoc.LoadXml(objXml); XmlNode nodes = xmlDoc.SelectSingleNode("root"); foreach (XmlLinkedNode note in nodes.ChildNodes) { IMFElement element = this.mapLogic.GetElement(note.Attributes[0].Value + ""); element.HightLight(true); this.AddElementtoList(element); } RegistCommondExecutedEvent(); }
// Marker点击事件 private void gmapControl_OnMarkerClick(GMapMarker item, MouseEventArgs e) { IMFElement element = item as IMFElement; if (element == null) { return; } // 如果已经高亮,那判断是否是框选的高亮,如果是,则取消高亮,从而防止更改外部的高亮操作 if (element.IsHightLight) { if (elementList.Contains(element)) { element.HightLight(false); elementList.Remove(element); } return; } if (bIsMultiSelect) // 多选 { if (!elementList.Contains(element)) { elementList.Add(element); element.HightLight(true); } } else // 单选 { foreach (IMFElement ele in elementList) { ele.HightLight(false); } elementList.Clear(); element.HightLight(true); elementList.Add(element); } RegistCommondExcuteEvent(); }
/// <summary> /// 点点击事件 /// </summary> /// <param name="item"></param> /// <param name="e"></param> void gmapControl_OnMarkerClick(GMapMarker item, System.Windows.Forms.MouseEventArgs e) { IMFElement element = mapLogic.GetElement(item.Tag.ToString()); if (element == null) { return; } IMFElement el = elementList.Find(o => o.ElementName == element.ElementName); if (element.IsHightLight && el == null) { //他人高亮的 return; } element.HightLight(!element.IsHightLight); if (selectedElment != null) { if (selectedElment != null && element.ElementName != selectedElment.ElementName) { ClearNotSelecteMark(); } } else { ClearNotSelecteMark(); } if (element.IsHightLight) //已经高亮了 { elementList.Add(element); } else//没有高亮 { elementList.Remove(element); } selectedElment = element; if (CommondExecutedEvent != null) { MessageEventArgs msg = new MessageEventArgs() { ToolType = ToolTypeEnum.Select }; CommondExecutedEvent(this, msg); } //gmapControl.Focus(); }
//区域选择完成事件 private void gmapControl_OnSelectionChange(global::GMap.NET.RectLatLng Selection, bool ZoomToFit) { if (flag) { return; } if (ZoomToFit) { return; } foreach (var item in elementList) { item.HightLight(false); } elementList.Clear(); markerList = gmapControl.Overlays[0].Markers.ToList(); foreach (var item in markerList) { if (Selection.Contains(item.Position) && gmapControl.DisableAltForSelection) //包含在矩形内 { IMFElement element = item as IMFElement; IMFElement el = elementList.Find(o => o.ElementName == element.ElementName); if (elementList.Count > -1 && element.IsHightLight && el == null) { continue; } else { element.HightLight(true);//让选中的目标高亮 if (el == null) { elementList.Add(element); } } } } if (CommondExecutedEvent != null) { CommondExecutedEvent(this, null); } mapLogic.Refresh(); flag = false; }
/// <summary> /// 向列表中添加选中的图元 /// </summary> /// <param name="element"></param> private void AddElementtoList(IMFElement element) { lock (elementObj) { tip: if (selectElements != null) { if (!selectElements.Contains(element)) { element.HightLight(true); selectElements.Add(element); } } else { selectElements = new List <IMFElement>(); goto tip; } } }