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

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

话说,认识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.除了自定义工具按钮,怎么添加一个工具条呢?~~~~

知者请不吝赐教。

visual studio2010中C#生成的,ArcGIS二次开发的basetool的dll,注册为COM组件tlb文件,并在arcmap中加载使用的更多相关文章

  1. ArcGIS二次开发AO软件安装破解教程

    最近在做ArcGIS二次开发时,采用C#中的WPF技术,在调研中发现ArcGIS 10.3及以上版本支持WPF技术,但是关于ArcGIS10.3的破解教程甚少,自己尝试了不少方法都失败了,淘@宝@商家 ...

  2. ArcGIS二次开发入门(一)

    作者:朱金灿 来源:http://blog.csdn.net/clever101 公司培训ArcGIS二次开发(C#作为开发语言),自己回家动手实践了一下. 1. 首先是二次开发环境的安装(AE 10 ...

  3. webpack生成的css文件background-image url图片无法加载

    之前在使用webpack3构建基于less预处理的项目时,在对指定的元素使用background-image: url(xxx)来设置背景图片时,本地开发是ok的,但是在项目编译产出后背景图片就找不到 ...

  4. win7,vs2010,asp.net项目中修改外部js文件,在调试时加载的还是旧文件

    win7,vs2010,asp.net项目中修改外部js文件,在调试时加载的还是旧文件 我杀过 w3wp.exe和asp.net_state的进程,重启 iis admin的服务,都还是不行. 只是把 ...

  5. maven工程中防止mapper.xml文件被漏掉、未加载的方法

    maven工程中防止mapper.xml文件被漏掉.未加载的方法 就是在pom.xml文件中添加以下内容 <!-- 如果不添加此节点mybatis的mapper.xml文件都会被漏掉. --&g ...

  6. 【ArcGIS二次开发】CreateFeature报错(HRESULT E_FAIL)

    在VS2010下基于ArcGIS 10.1做二次开发时遇到个奇怪的问题,对于MXD工程文档中已经存在的图层,获取其FeatureClass可以调用CreateFeature()函数生成要素,但是对于通 ...

  7. ArcGIS 二次开发增加工具栏按钮时,给按钮图标设置失败

    在类的构造函数中通过下面的代码获得的bitmap为null: string bitmapResourceName = GetType().Name + ".bmp"; base.m ...

  8. ArcGIS二次开发的几种方式

    1.ArcEngine开发 二次开发的常用方式,开发提供接口齐全,功能强大,比较成熟.但是,开发的软件使用需要指定版本的运行环境才能运行. 2.Addin开发 二次开发与ArcMap嵌入,开发方便,可 ...

  9. ArcGIS 二次开发总结

    个人总结 1. Enterprise10.7新特性 新增共享实例,可以将不常用服务分配共享实例,减少服务器压力.仅支持ArcGIS pro发布的地图服务,且仅开启feature access,kml, ...

随机推荐

  1. OpenGL — GLFW — 颜色

    OpenGL - GLFW - 颜色 参考教程:https://learnopengl-cn.readthedocs.io/zh/latest/02%20Lighting/01%20Colors/ 既 ...

  2. 25、转录本(transcript)组成(gtf文件的第三列)

    转录本(transcript)长度范围  到 --3216021---- 3UTR                       stop_codon                      CDS3 ...

  3. day1_2_3

    DD烧写命令(mfgtools-without-rootfs.tar.gz) ubuntu minicom svn 应用层进程阻塞调试 多机共享 securecrt的远程登录以及调试 tengxunt ...

  4. 怀旧系列(3)----Pascal

    Pascal语言是高中时代2000年左右为了参加计算机竞赛学习的一门语言(Turbo Pascal7.0).据说这么语言的结构化非常好,非常适合青少年形成一定的编程思想.但是现在的角度想想都是扯淡,现 ...

  5. URAL 2018 The Debut Album (DP)

    题意:给出n长度的数列,其实1的连续个数不超过a,2的连续个数不超过b. 析:dp[i][j][k] 表示前 i 个数,以 j 结尾,并且连续了k个长度,要用滚动数组,要不然MLE. 代码如下: #p ...

  6. <转>哥舒意:关于米奇的三个真相 (米奇·阿尔博姆)

    http://book.douban.com/review/6436827/   <时光守护者>的故事也不算复杂,虽然有三条线同时进行,但是三条线的情节都条理分明,而且这次他使用了类似于奇 ...

  7. 拦截导弹 (NYOJ—79) 最长字串问题 (NYOJ—17)

    这是到动态规划的题目,属于有顺序的0 1 背包问题: 代码: #include<stdio.h> #include<string.h> ][]; //d[i][j] ]; in ...

  8. 多个VSTO解决方案间传输变量

    参照微软官方文档,为需要公开参数的解决方案添加公开接口.不过稍显遗憾的是,不能传输List泛型 https://docs.microsoft.com/zh-cn/visualstudio/vsto/c ...

  9. cf873F(xjb+二分)

    题目链接:http://codeforces.com/problemset/problem/837/F 题意:给出一个大小为 n 的数组 a 和一个数 k,每次操作后的到一个 a' 数组,a'i 为 ...

  10. JML契约式设计——第三单元学习小结

    一.前言 本单元作业都是关于JML(Java Modeling Language),JML是一种契约式设计(Design by Contract)的语言,契约式设计的主要目的是希望程序员能够在设计程序 ...