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.除了自定义工具按钮,怎么添加一个工具条呢?~~~~
知者请不吝赐教。
visual studio2010中C#生成的,ArcGIS二次开发的basetool的dll,注册为COM组件tlb文件,并在arcmap中加载使用的更多相关文章
- ArcGIS二次开发AO软件安装破解教程
最近在做ArcGIS二次开发时,采用C#中的WPF技术,在调研中发现ArcGIS 10.3及以上版本支持WPF技术,但是关于ArcGIS10.3的破解教程甚少,自己尝试了不少方法都失败了,淘@宝@商家 ...
- ArcGIS二次开发入门(一)
作者:朱金灿 来源:http://blog.csdn.net/clever101 公司培训ArcGIS二次开发(C#作为开发语言),自己回家动手实践了一下. 1. 首先是二次开发环境的安装(AE 10 ...
- webpack生成的css文件background-image url图片无法加载
之前在使用webpack3构建基于less预处理的项目时,在对指定的元素使用background-image: url(xxx)来设置背景图片时,本地开发是ok的,但是在项目编译产出后背景图片就找不到 ...
- win7,vs2010,asp.net项目中修改外部js文件,在调试时加载的还是旧文件
win7,vs2010,asp.net项目中修改外部js文件,在调试时加载的还是旧文件 我杀过 w3wp.exe和asp.net_state的进程,重启 iis admin的服务,都还是不行. 只是把 ...
- maven工程中防止mapper.xml文件被漏掉、未加载的方法
maven工程中防止mapper.xml文件被漏掉.未加载的方法 就是在pom.xml文件中添加以下内容 <!-- 如果不添加此节点mybatis的mapper.xml文件都会被漏掉. --&g ...
- 【ArcGIS二次开发】CreateFeature报错(HRESULT E_FAIL)
在VS2010下基于ArcGIS 10.1做二次开发时遇到个奇怪的问题,对于MXD工程文档中已经存在的图层,获取其FeatureClass可以调用CreateFeature()函数生成要素,但是对于通 ...
- ArcGIS 二次开发增加工具栏按钮时,给按钮图标设置失败
在类的构造函数中通过下面的代码获得的bitmap为null: string bitmapResourceName = GetType().Name + ".bmp"; base.m ...
- ArcGIS二次开发的几种方式
1.ArcEngine开发 二次开发的常用方式,开发提供接口齐全,功能强大,比较成熟.但是,开发的软件使用需要指定版本的运行环境才能运行. 2.Addin开发 二次开发与ArcMap嵌入,开发方便,可 ...
- ArcGIS 二次开发总结
个人总结 1. Enterprise10.7新特性 新增共享实例,可以将不常用服务分配共享实例,减少服务器压力.仅支持ArcGIS pro发布的地图服务,且仅开启feature access,kml, ...
随机推荐
- p4180 次小生成树
传送门 分析: 次小生成树的求法有两种,最大众的一种是通过倍增LCA找环中最大边求解,而这里我介绍一种神奇的O(nlogn) 做法: 我们先建立最小生成树,因为我们用kruskal求解是边的大小已经按 ...
- c#入门学习-Action和Func的使用
我的理解就是:Action和Func就是官方声明好的代理using System; namespace funcActionDemo{ class MainClass { p ...
- CentOS常用软件安装方法
软件包介绍 源码包(脚本安装包) 二进制包(RPM包,系统默认包) 源码包 优点 开源,如果有足够的能力,可以修改源代码 编译安装,更加适合自己的系统,稳定高效 缺点 安装步骤较多,容易出错 编译过程 ...
- java模拟简易按键精灵
很多小伙伴们都有过抢课的经历,有时候抢不到自己想上的课,只能盼望有人退选,可是很多时候别人退选了,但是很快又被别人抢走了,我们不可能时刻盯着电脑, 这时候如果有一个抢课的程序岂不是很棒.. 出于这个目 ...
- XML之DTD
前言 上篇我们知道了,XML的应用范围还是很广的,那么无规矩不成方圆,如果我们每个人写XML的风格不一致,那么读起来是不是很费劲呢?所以格式良好的XML就渐渐的被我们所需要. 内容 格式良好指:拥有正 ...
- linux_下IP、网关、DNS地址配置
设置Linux网络的方法有两种: 第一种:修改配置文档(需要重启网络配置,永远生效)一.修改IP地址[aeolus@db1 network-scripts]$ vi ifcfg-eth0DEVICE= ...
- Hadoop集群配置免密SSH登录方法
Hadoop集群包含1个主节点和3个从节点,需要实现各节点之间的免密码登录,下面介绍具体的实现方法. 一.Hadoop集群环境 二.免密登录原理 每台主机authorized_keys文件里面包含的主 ...
- SP1716 GSS3
题意翻译 \(n\) 个数,\(q\) 次操作 操作\(0\) \(x\) \(y\)把\(A_x\) 修改为\(y\) 操作\(1\) \(l\) \(r\)询问区间\([l, r]\)的最大子段和 ...
- 黑马SSM项目练习中的Oracle操作
- rgb值转换成16进制
由于jQuery获取css中的background有时候是rgb值,所以往往需要一个转换函数. 以前觉得难,还写个博客记录,现在觉得好容易. let testColor = "rgb(20, ...