zoukankan      html  css  js  c++  java
  • PIE SDK图层树右键菜单与命令绑定

    1.   功能简介

        上一节已经介绍过图层树如何和地图和制图关联,图层树右键菜单主要是基于TocControl控件进行对菜单节点进行控制,TocControl主要作用是显示当前加载的图层有哪些、采用什么样的符号等,目的是使用户对当前加载的数据和结构有一个总体的把握。

        图层树与命令关联绑定是将具体的代码进行封装转换为Command或者Tool,为了简化代码,便于调用,调试,使用简单。

    2.   功能实现说明

    2.1 . 实现思路及原理说明

    一、     界面设计

        在界面添加控件ConTextMenuStrip,新建两个ToolStripMenuItem,以添加数据和删除图层为例;

     

    二、     功能实现

        图层树的右键菜单的弹出,首先需要右键图层树,触发tocControlMain_MouseClick 点击事件;

     1  /// <summary>
     2 /// 右键菜单事件
     3 /// </summary>
     4 /// <param name="sender"></param>
     5 /// <param name="e"></param>
     6 private void tocControlMain_MouseClick(object sender, MouseEventArgs e)
     7 {          
     8 if (e.Button == MouseButtons.Right)//右键
     9  {  
    10     IMap pMap = null;
    11     m_Layer = null;
    12     PIETOCNodeType nodeType = PIETOCNodeType.Null;
    13     object unk = null;
    14     object data = null;
    15 
    16     this.tocControlMain.HitTest(e.X, e.Y, ref nodeType, ref pMap, ref m_Layer, ref unk, ref data);
    17     //判断点击的节点是哪个类型,弹出指定的右键菜单
    18    if (nodeType == PIETOCNodeType.Map)
    19 {
    20     //控制菜单项的显示隐藏
    21     this.ToolStripMenuItem_LoadData.Visible = true;//显示加载数据菜单选项
    22     this.ToolStripMenuItem_DeleteLayer.Visible = false;//不显示删除图层菜单选项
    23 }
    24 else
    25 {
    26     //控制菜单项的显示隐藏
    27     this.ToolStripMenuItem_LoadData.Visible = false;//不显示加载数据
    28     this.ToolStripMenuItem_DeleteLayer.Visible = true;//显示删除图层菜单选项
    29 }  
    30   this.contextMenuStrip1.Show(this.tocControlMain, new Point(e.X, e.Y)); //右键菜单显示
    31   }
    32 }
    33 
    34  /// <summary>
    35 /// 右键菜单加载数据事件
    36 /// </summary>
    37 /// <param name="sender"></param>
    38 /// <param name="e"></param>
    39 private void ToolStripMenuItem_LoadData_Click(object sender, EventArgs e)
    40 {
    41     // 获得要打开Shape数据的路径
    42     OpenFileDialog openFileDialog = new OpenFileDialog();
    43     openFileDialog.Title = "选择打开数据";
    44     openFileDialog.Filter = "Shape Files|*.shp;*.000|Raster Files|*.tif;*.tiff;*.dat;*.bmp;*.img;*.jpg|HDF Files|*.hdf;*.h5|NC Files|*.nc";
    45     if (openFileDialog.ShowDialog() != DialogResult.OK) return;
    46 
    47     // 打开图层
    48     String filePath = openFileDialog.FileName;
    49     ILayer layer = PIE.Carto.LayerFactory.CreateDefaultLayer(filePath);
    50     if (layer == null) return;
    51 
    52     // 添加图层到地图并刷新
    53     mapControlMain.FocusMap.AddLayer(layer);
    54     mapControlMain.ActiveView.PartialRefresh(PIE.Carto.ViewDrawPhaseType.ViewAll);
    55 }
    56 
    57 /// <summary>
    58 /// 右键菜单删除图层事件
    59 /// </summary>
    60 /// <param name="sender"></param>
    61 /// <param name="e"></param>
    62 private void ToolStripMenuItem_DeleteLayer_Click(object sender, EventArgs e)
    63 {          
    64    if (m_Layer == null) return;
    65 mapControlMain.FocusMap.DeleteLayer(m_Layer);
    66 mapControlMain.ActiveView.PartialRefresh(ViewDrawPhaseType.ViewAll);
    67 }

    拓展:图层树的命令绑定

        图层树右键菜单的选项的具体实现功能方式:一种是直接将代码写在事件里面,(如上面的添加数据和删除图层事件),有时候代码量会很大;另一种是直接封装代码成命令Command或者是Tool,在菜单选项中直接调用命令即可,很明显后者比较轻便且快捷

        以修改删除图层事件为例:

     1 /// <summary>
     2 /// 右键菜单删除图层事件
     3 /// </summary>
     4 /// <param name="sender"></param>
     5 /// <param name="e"></param>
     6 private void ToolStripMenuItem_DeleteLayer_Click(object sender, EventArgs e)
     7 {          
     8     //方法一
     9     //if (m_Layer == null) return;
    10     //mapControlMain.FocusMap.DeleteLayer(m_Layer);
    11     //mapControlMain.ActiveView.PartialRefresh(ViewDrawPhaseType.ViewAll);
    12 
    13     //方法二
    14     ICommand cmd = new Command.DeleLayerCommand();
    15     cmd.OnCreate(mapControlMain);
    16 cmd.OnClick();
    17 }

    2.2 .示例代码

    项目路径

    百度云盘地址下/PIE示例程序/11.图层树功能/ PIEDemo_SetBuddy

    数据路径

    百度云盘地址下/PIE示例数据/栅格数据/ World/World.tif

    视频路径

    百度云盘地址下/PIE视频教程/11.图层树功能/02.图图层树右键操作.avi

    2.3 .示例截图

  • 相关阅读:
    Jmeter四种参数化方式
    微信公众号开发--服务器接入
    IIS调试程序
    vs连接GitHub
    vs2013 卸载
    Edge,IE浏览器 兼容模式设置
    XML非法字符的处理
    SQL Server Union联合查询
    SQL Server NULL的正确用法
    SQL Server Like 与 通配符
  • 原文地址:https://www.cnblogs.com/PIESat/p/10167047.html
Copyright © 2011-2022 走看看