Exemplo n.º 1
0
        /// <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);
        }
Exemplo n.º 2
0
 /// <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);
 }
Exemplo n.º 3
0
 /// <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);
 }
Exemplo n.º 4
0
 /// <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);
 }
Exemplo n.º 5
0
 /// <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();
         }
     }
 }
Exemplo n.º 6
0
        //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);
                }
            }
        }
Exemplo n.º 7
0
 /// <summary>
 /// 是否包含特定mark对象
 /// </summary>
 /// <param name="mark">mark对象</param>
 /// <returns>包含返回“true”,否则返回“false”</returns>
 public bool Contains(ImyMark mark)
 {
     return(base.Children.Contains(mark.MarkControl));
 }