zoukankan      html  css  js  c++  java
  • 图层符号选择器的实现

    http://www.gissky.net/Article/1562.htm

    在上一讲中,我们实现了右键菜单(ContextMenu)的添加与实现,在最后我预留给下一讲的问题是TOCControl控件图层拖拽的实现。后来发现此功能的实现异常简单,只要在TOCControl的属性页中,勾选“Enable Layer Drag and Drop”即可。

    这一讲,我们要实现的是图层符号选择器,与ArcMap中的Symbol Selector的类似。本讲较前几讲而言,些许有些复杂,不过只要仔细琢磨,认真操作,你就很容易实现如下所示的符号选择器。因为本讲篇幅较长,故我将其分成两个阶段,本文是第一阶段。

    图1

    在AE开发中,符号选择器有两种实现方式。

    一是在程序中直接调用ArcMap中的符号选择器,如下所示:

     

    图2

    二是自定义符号选择器,如图1所示。

    由于第一种方式前提是必须安装ArcGIS Desktop,其界面还是英文的,而对二次开发来说,大部分用户希望应该是中文界面。因此开发人员通常选择第二种方式,本讲也着重讲解第二种方式。

    通过对《ArcGIS Engine+C#实例开发教程》前六讲的学习,我已经假定你已经基本熟悉C#语言和VS2005的操作,故在下面的教程中,我不准备说明每一步骤的具体操作方法,而只是说明操作步骤,以节省时间和篇幅。


    1.        直接调用ArcMap中的符号选择器

    (1)添加ESRI.ArcGIS.DisplayUI的引用。

    分别在解决方案管理器和代码中添加引用。

    (2)添加TOCControl的Double_Click事件。

    (3)实现TOCControl的Double_Click事件。

    因为种方法不是本讲的重点,故不对代码进行分析,有兴趣的读者请自行理解或结合后面的内容理解。代码如下:

     private void axTOCControl1_OnDoubleClick(object sender, ITOCControlEvents_OnDoubleClickEvent e)
    {

        esriTOCControlItem toccItem = esriTOCControlItem.esriTOCControlItemNone;

        ILayer iLayer = null;

        IBasicMap iBasicMap = null;

        object unk = null;

        object data = null;

        if (e.button == 1)

        {

            axTOCControl1.HitTest(e.x, e.y, ref toccItem, ref iBasicMap, ref iLayer, ref unk,

                ref data);

            System.Drawing.Point pos = new System.Drawing.Point(e.x, e.y);

            if (toccItem == esriTOCControlItem.esriTOCControlItemLegendClass)

            {

                ESRI.ArcGIS.Carto.ILegendClass pLC = new LegendClassClass();

                ESRI.ArcGIS.Carto.ILegendGroup pLG = new LegendGroupClass();

                if (unk is ILegendGroup)

                {

                    pLG = (ILegendGroup)unk;

                }

                pLC = pLG.get_Class((int)data);

                ISymbol pSym;

                pSym = pLC.Symbol;

                ESRI.ArcGIS.DisplayUI.ISymbolSelector pSS = new

                    ESRI.ArcGIS.DisplayUI.SymbolSelectorClass();

                bool bOK = false;

                pSS.AddSymbol(pSym);

                bOK = pSS.SelectSymbol(0);

                if (bOK)

                {

                    pLC.Symbol = pSS.GetSymbolAt(0);

                }

                this.axMapControl1.ActiveView.Refresh();

                this.axTOCControl1.Refresh();

            }

        }

    }
     


    (4)编译运行即可。


    本篇文章来源于 GIS空间站 转载请以链接形式注明出处 网址:http://www.gissky.net/Article/1562.htm

     

  • 相关阅读:
    zabbix基于docker安装
    配置Windows实例NTP服务
    linux 上使用yum 安装openjdk1.8
    【Spring Boot-技巧】API返回值去除为NULL的字段
    【微服务】之七:轻松搞定SpringCloud微服务-API权限控制
    【微服务】之六:轻松搞定SpringCloud微服务-API网关zuul
    【DevOps】团队敏捷开发系列--开山篇
    【微服务】之五:轻松搞定SpringCloud微服务-调用远程组件Feign
    【微服务】之四:轻松搞定SpringCloud微服务-负载均衡Ribbon
    【微服务】之三:从零开始,轻松搞定SpringCloud微服务-配置中心
  • 原文地址:https://www.cnblogs.com/wangzihao/p/1832447.html
Copyright © 2011-2022 走看看