/// <summary> /// 鼠标左键双击 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> void mapControl_eventLButtonDbClick(object sender, _DHOSOFTMapControlEvents_eventLButtonDbClickEvent e) { if (!isControl && listPoints.Count >= 2) { if (!string.IsNullOrEmpty(tempName)) { mapControl.MgsDelObject(tempName); } //if (listPoints.Count < 2) return; Kml kml = new Kml(); KmlLineString line = new KmlLineString(); line.PositionList = listPoints; line.Color = System.Drawing.Color.Red; line.Width = 3; kml.Placemark.Name = "mgis_line" + Utils.ElementIndex; kml.Placemark.Graph = line; IMFElement element = null; layer.AddElement(kml, out element); lineElement = element as IMFLine; RegistCommondExecutedEvent(); ReleaseCommond();//修改 陈静 listPoints.Clear(); isFinish = true; } }
/// <summary> /// 鼠标移动,实时绘制 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> void mapControl_eventMouseMove(object sender, _DHOSOFTMapControlEvents_eventMouseMoveEvent e) { //if (isMouseDown && !isShift) //{ // double circleRadius = MapFrame.Core.Common.Utils.GetDistance(centerPoint, new MapLngLat(e.dLong, e.dLat)); // circleElement.UpdatePosition(circleRadius); //} if (isMouseDown && !isControl) { if (!string.IsNullOrEmpty(tempName)) { mapControl.MgsDelObject(tempName); } float[] vertex = new float[4]; IntPtr ptrVert = Marshal.AllocHGlobal(sizeof(float) * 4); vertex[0] = (float)centerPoint.Lng; vertex[1] = (float)centerPoint.Lat; vertex[2] = (float)e.dLong; vertex[3] = (float)e.dLat; Marshal.Copy(vertex, 0, ptrVert, vertex.Length); tempName = mapControl.MgsDrawLine(16, (ulong)(ptrVert.ToInt64()), 2); Marshal.FreeHGlobal(ptrVert); } }
/// <summary> /// 移除图元 /// </summary> /// <param name="element">图元对象</param> /// <param name="layerName">图元名称</param> /// <returns></returns> public bool RemoveElement(Core.Interface.IMFElement element, string layerName) { Circle_Mgis circleMgis = element as Circle_Mgis; return(mapControl.MgsDelObject(circleMgis.ElementName) == 1 ? true : false); //return mapControl.destroyMoveObject(Convert.ToUInt64(circleMgis.ElementPtr)) == 1 ? true : false; }
/// <summary> /// 绘制新的线图元 /// </summary> /// <param name="listPoints"></param> /// <returns></returns> private bool DrawNewLine(List <MapLngLat> listPoints) { int count = listPoint.Count(); if (count < 2) { return(false); } float[] vertex = new float[count * 2]; IntPtr ptrVert = Marshal.AllocHGlobal(sizeof(float) * count * 2); for (int i = 0; i < count; i++) { vertex[2 * i] = (float)listPoint[i].Lng; vertex[2 * i + 1] = (float)listPoint[i].Lat; } Marshal.Copy(vertex, 0, ptrVert, vertex.Length); mapControl.MgsDelObject(symbolName);//先删除掉原始线图元 int temp = mapControl.MgsDrawLineSymByJBID(symbolName, 10, (ulong)(ptrVert.ToInt64()), count); mapControl.MgsUpdateSymColor(symbolName, bOutLineColor.R, bOutLineColor.G, bOutLineColor.B, bOutLineColor.A); mapControl.MgsUpdateSymLineWidth(symbolName, this.width); mapControl.update(); //再添加一个新的线图元 //int result = mapControl.MgsDrawLineByJBID(symbolName, 10, (ulong)(ptrVert.ToInt64()), count); Marshal.FreeHGlobal(ptrVert); return(temp == 0 ? true : false); }
/// <summary> /// 键盘按下事件 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> void mapControl_eventKeyDown(object sender, _DHOSOFTMapControlEvents_eventKeyDownEvent e) { if (e.nChar == 27) { if (!isFinish) { if (!string.IsNullOrEmpty(tempName)) { mapControl.MgsDelObject(tempName); } isFinish = true; } else { ReleaseCommond(); } } else if (e.nChar == 17) { isControl = true; mapControl.IMGS_WorkStation_SelectTool("GIS_TOOL_MAP_MOVE_HOSOFT"); } }
/// <summary> /// 绘制更新的图元 /// </summary> /// <param name="listPoint"></param> private void DrawNewCircle(List <MapLngLat> listPoint) { float[] vertex = new float[4]; IntPtr ptrVert = Marshal.AllocHGlobal(sizeof(float) * 4); vertex[0] = (float)listPoint[0].Lng; vertex[1] = (float)listPoint[0].Lat; vertex[2] = (float)listPoint[1].Lng; vertex[3] = (float)listPoint[1].Lat; Marshal.Copy(vertex, 0, ptrVert, vertex.Length); mapControl.MgsDelObject(symbolName);//先删除掉原始线图元 //再添加一个新的线图元 mapControl.MgsDrawLineSymByJBID(symbolName, 16, (ulong)(ptrVert.ToInt64()), 2); mapControl.MgsUpdateSymColor(symbolName, bOutLineColor.R, bOutLineColor.G, bOutLineColor.B, bOutLineColor.A); mapControl.MgsUpdateSymFillColor(symbolName, bFillColor.R, bFillColor.G, bFillColor.B, bFillColor.A); mapControl.MgsUpdateSymLineWidth(symbolName, this.width); Update();//刷新 Marshal.FreeHGlobal(ptrVert); }
/// <summary> /// 删除指定线图元 /// </summary> /// <param name="element">线图元</param> /// <param name="layerName">图元名称</param> /// <returns></returns> public bool RemoveElement(Core.Interface.IMFElement element, string layerName) { Line_Mgis lineMgis = element as Line_Mgis; return(mapControl.MgsDelObject(lineMgis.ElementPtr) == 0 ? true : false); }
/// <summary> /// 删除图元 /// </summary> /// <param name="element"></param> /// <param name="layerName"></param> /// <returns></returns> public bool RemoveElement(Core.Interface.IMFElement element, string layerName) { Polygon_Mgis polygonMgis = element as Polygon_Mgis; return(mapControl.MgsDelObject(polygonMgis.ElementPtr) == 0 ? true : false); }
/// <summary> /// 删除指定文字图元 /// </summary> /// <param name="element"></param> /// <param name="layerName"></param> /// <returns></returns> public bool RemoveElement(Core.Interface.IMFElement element, string layerName) { IMFText textMgis = element as IMFText; return(mapControl.MgsDelObject(textMgis.ElementPtr) == 0 ? true : false); }