/// <summary> /// 把一个mark按照网格的大小,分配到具体的网格中 /// </summary> /// <param name="map">地图容器,需要该地图容器中已经装载基础图层</param> /// <param name="mark"></param> /// <param name="gridstep">单位为像素,网格大小(int),网格设计为gridstep*gridstep</param> /// <returns></returns> protected bool calGrid(MapContainerBase map, ImyMark mark, double gridstep) { if (map == null) { MessageBox.Show("没有地图!"); return(false); } if (mark == null) { MessageBox.Show("没有标注!"); return(false); } if (mark.X < map.WinViewBound.XMin || mark.X > map.WinViewBound.XMax || mark.Y < map.WinViewBound.YMin || mark.Y > map.WinViewBound.YMax) { //MessageBox.Show("mark没在当前视图范围内"); return(false); } if (gridstep > map.CurShowScale * (map.WinViewBound.XMax - map.WinViewBound.XMin) || gridstep > map.CurShowScale * (map.WinViewBound.YMax - map.WinViewBound.YMin)) { MessageBox.Show("网格步长太长"); return(false); } int col = new int(); int row = new int(); col = (int)Math.Floor((mark.X - map.WinViewBound.XMin) / (gridstep / map.CurShowScale)); row = (int)Math.Floor((mark.Y - map.WinViewBound.YMin) / (gridstep / map.CurShowScale)); if (temMarkArr[row][col] == null) { temMarkArr[row][col] = new List <ImyMark>(); } temMarkArr[row][col].Add(mark); return(true); }
/// <summary> /// 删除要聚合标注 /// </summary> public bool RemoveMark(ImyMark mark) { if (mark != null && mark.MarkControl != null) { //if (mark.Tag is bool) // mark.EnableDrag = (bool)mark.Tag; m_markList.Remove(mark); m_textBlock.Text = m_markList.Count.ToString(); if (m_markControl != null && m_markControl is Panel) { mark.MarkControl.MouseEnter -= new MouseEventHandler(OnMouseEnter2); mark.MarkControl.MouseLeave -= new MouseEventHandler(OnMouseLeave2); if ((m_markControl as Panel).Children.Remove(mark.MarkControl)) { mark.TargetMark = null; mark.MarkControl.Projection = null; if (mark.MarkControl.Visibility == Visibility.Collapsed) { mark.MarkControl.Visibility = Visibility.Visible; } m_len = m_len - (mark.MarkControl.Width == double.NaN ? 16 : mark.MarkControl.Width) - (mark.MarkControl.Height == double.NaN ? 16 : mark.MarkControl.Height); Init(); (m_markControl as Panel).Children.Remove(m_lineArr[0]); m_lineArr.RemoveAt(0); return(true); } } } return(false); }
/// <summary> /// 添加标注到图层 /// </summary> /// <param name="mark">标注对象</param> /// <param name="zIndex">显示的顺序</param> public void AddMarkAt(ImyMark mark, int zIndex) { AddMark(mark); if (zIndex > -1 && mark != null && mark.MarkControl != null) { Canvas.SetZIndex(mark.MarkControl, zIndex); } ClusterMark(m_markArr, 100); }
/// <summary> /// 移除mark /// </summary> /// <param name="mark">标注对象</param> /// <returns>成功返回“true”,否则返回“false”</returns> public bool RemoveMark(ImyMark mark) { if (mark != null && mark.MarkControl != null) { // mark.Dispose(); m_markArr.Remove(mark); return(base.Children.Remove(mark.MarkControl)); } return(false); }
/// <summary> /// 添加要聚合标注 /// </summary> public void AddMark(ImyMark mark) { if (mark != null && mark.MarkControl != null) { m_markList.Add(mark); if (m_markControl != null && m_markControl is Panel) { (m_markControl as Panel).Children.Add(mark.MarkControl); mark.TargetMark = this; Canvas.SetLeft(mark.MarkControl, Canvas.GetLeft(m_ellipse)); Canvas.SetTop(mark.MarkControl, Canvas.GetTop(m_ellipse)); Canvas.SetZIndex(mark.MarkControl, 1); //mark.Tag = mark.EnableDrag; //mark.EnableDrag = false; mark.MarkControl.Visibility = Visibility.Collapsed; mark.MarkControl.MouseEnter += new MouseEventHandler(OnMouseEnter2); mark.MarkControl.MouseLeave += new MouseEventHandler(OnMouseLeave2); mark.MarkControl.Projection = new PlaneProjection() { CenterOfRotationX = 0.5, CenterOfRotationY = 0.5 }; m_textBlock.Text = m_markList.Count.ToString(); m_len = m_len + (mark.MarkControl.Width == double.NaN ? 16 : mark.MarkControl.Width) + (mark.MarkControl.Height == double.NaN ? 16 : mark.MarkControl.Height); Line line = new Line() { X1 = 10, //m_markControl.ActualWidth > 0 ? m_markControl.ActualWidth / 2 : 0,//m_markControl.Width / 2, Y1 = 10, //m_markControl.Width / 2, X2 = 10, //m_markControl.Width / 2, Y2 = 10, //m_markControl.Width / 2, StrokeThickness = 1, Stroke = new SolidColorBrush(Colors.Black) //, //Visibility = Visibility.Collapsed }; (m_markControl as Panel).Children.Add(line); m_lineArr.Add(line); Init(); } } }
//protected class m_mark //{ // public List<ImyMark> mark1{get;set;} //} #region 公共方法 /// <summary> /// 添加标注到图层 /// </summary> /// <param name="mark">标注对象</param> public void AddMark(ImyMark mark) { if (mark != null && mark.MarkControl != null && !m_markArr.Contains(mark)) { m_markArr.Add(mark); base.Children.Add(mark.MarkControl); if (this.EnableGPUMode) { mark.MarkControl.CacheMode = new BitmapCache() { RenderAtScale = m_renderAtScale } } ; //if (mark.MarkControl.Visibility == Visibility.Collapsed) // mark.MarkControl.Visibility = Visibility.Visible; if (mark.EnableRevisedPos && mark.Visibility == Visibility.Visible) { mark.RevisedPosition(true, EnableMarkHiden); } } }
/// <summary> /// 是否包含特定mark对象 /// </summary> /// <param name="mark">mark对象</param> /// <returns>包含返回“true”,否则返回“false”</returns> public bool Contains(ImyMark mark) { return(base.Children.Contains(mark.MarkControl)); }