zoukankan      html  css  js  c++  java
  • visual studio2010中C#生成的,ArcGIS二次开发的basetool的dll,注册为COM组件tlb文件,并在arcmap中加载使用

    写了个标题好长啊~~~~

    这两天又认识了一个新玩意,记录一下下,啦啦啦~~~~~

    话说,认识arcgis快十年了,从桌面版到engine的二次开发,其实不过才认识到它的冰山一角,

    它总是能带来很多还未知的东西,实话说,就是如此的热爱着它,因为从来都觉得遨游其中,没有边界~~~~~

    arcengine二次开发,这个玩意现在已经不流行了,但是其奥妙和乐趣依然无穷~~~~

    言归:

    一. 之前写的basetool,basecommand等类都是在独立的系统中运行的,没有单独注册成过组件在桌面版arcmap中加载使用过,这种basetool结构:

        public AddPolygonSymbol1()

        public override void OnCreate(object hook)

        public override void OnClick()

        public override void OnMouseDown(int Button, int Shift, int X, int Y)

        .........等等

        private IMapControlDefault m_pMapControl = null;

        一直通过m_pMapControl在OnCreate(object hook)传递其当前MapControl,如this.m_pMapControl = hook as IMapControlDefault;

        but,改为要在arcmap中引用的工具,需要做一下几点:

    二. 修改basetool,basecommand类中传递hook的方法,

         private IApplication m_application;     

          public override void OnCreate(object hook)
          {
                m_application = hook as IApplication;

                if (hook is IMxApplication)

                        base.m_enabled = true;
                else
                        base.m_enabled = false; 

           }并对应修改代码中的其他地方,如

           IMxDocument mxDocument = application.Document as IMxDocument; // Dynamic Cast
           IActiveView activeView = mxDocument.ActiveView;

           总之就是得到mapcontrol下的那些东西啊。

          类修改完成之后,可以注册生成tlb文件了。

    三.  做法,1.在代码中添加注册的代码,我直接拷贝的示例中的代码,其他方法未知,要自己生成一个新的guid就ok;

                    

                  2.在visual studio中,项目右键属性,生成,勾选“为COM互操作注册”

                    

                  3.在项目的AssemblyInfo.cs中修改[assembly: ComVisible(true)]为ture;

                     

              然后重新生成就ok了,在debug下面会找到.tlb文件,就是想要的那个东西了:

                    

             此步参考出处:http://www.cnblogs.com/carekee/articles/2227480.html

    四. 在arcmap中加载此工具的tlb文件,然后使用。

         加载方法:点红框框中那个小箭头,任意一个都可以

         

         然后在customise对话框中,选择从文件添加:

        

       添加完后,可以看到commands选项卡下面的walkthroughs下面多了自己定义的工具,

       此处“walkthroughs”在代码构造函数中的的base.m_category = "Walkthroughs"定义的;

       加上之后就可以用了,这里我添加的是一个AddPolygonSymbol1工具,

       

    另,本人一向达到目的后就不求甚解, basetool其实之前一直在用,

    却不懂得注册成工具在桌面版中使用,因为对com组件这些玩意其实不甚了解,

    所以都是只知皮毛,浅尝辄止。

    问题:

    1.com组件注册的方法,在vs中那些代码是不是可以自动生成?

    2.自定义生成的工具,添加图片没有成功, GetType().Name这些玩意不知道到底是怎么读的;

    3.加载到arcmap上的工具怎么去掉啊~~~

    4.除了自定义工具按钮,怎么添加一个工具条呢?~~~~

    知者请不吝赐教。

       

  • 相关阅读:
    PHP读写XML文件的四种方法
    如何在linux系统中设置静态ip地址
    Memcached和Memcache安装(64位win7)
    Mysql存储过程和函数区别介绍
    随笔
    Vue 中使用axios传参数,后端收不到数据
    vs2019创建mvc连接mysql
    dapper多表查询
    Java并发编程:volatile关键字解析
    Mysql Innodb 间隙锁浅析
  • 原文地址:https://www.cnblogs.com/fatherZyl/p/5912052.html
Copyright © 2011-2022 走看看