收藏 分销(赏)

ArcMap扩展开发方法与步骤.doc

上传人:s4****5z 文档编号:8941814 上传时间:2025-03-08 格式:DOC 页数:10 大小:274KB
下载 相关 举报
ArcMap扩展开发方法与步骤.doc_第1页
第1页 / 共10页
ArcMap扩展开发方法与步骤.doc_第2页
第2页 / 共10页
点击查看更多>>
资源描述
ArcMap扩展开发方法与步骤 吕志勇 2011-5-25 ArcMap扩展开发是指在直接通过编写插件,扩展ArcMap.exe的功能。下面以VS为例,说明如何进行ToolBar,Command,Tool,Menu的开发与扩展: ToolBar 一、 新建项目,选择Class Library(ArcMap)(必须先安装desktop才可以出现此选择项: 二、 在建立的工程项目中的“资源管理器“中的项目上进行右键单击,选择”添加类“,如图所示: 三、 在添加的类中:选择“添加Base ToolBr“,并更改自己的类名 四、 选择ToolBar要添加在哪里:选择Desktop arcmap 五、 点“OK“之后,便会自己动产生台下代码: 详细代码: using System; using System.Collections.Generic; using System.Text; using System.Runtime.InteropServices; using ESRI.ArcGIS.ADF.CATIDs; using ESRI.ArcGIS.ADF.BaseClasses; using ESRI.ArcGIS.SystemUI; namespace TestPlugToolBar { /// <summary> /// Summary description for ArcGISToolbar1. /// </summary> [Guid("43e374c8-9468-48b2-9a72-bcbf0a3097d9")] [ClassInterface(ClassInterfaceType.None)] [ProgId("TestPlugToolBar.ArcGISToolbar1")] public sealed class ArcGISToolbar1 : BaseToolbar { #region COM Registration Function(s) [ComRegisterFunction()] [ComVisible(false)] static void RegisterFunction(Type registerType) { // Required for ArcGIS Component Category Registrar support ArcGISCategoryRegistration(registerType); // // TODO: Add any COM registration code here // } [ComUnregisterFunction()] [ComVisible(false)] static void UnregisterFunction(Type registerType) { // Required for ArcGIS Component Category Registrar support ArcGISCategoryUnregistration(registerType); // // TODO: Add any COM unregistration code here // } #region ArcGIS Component Category Registrar generated code /// <summary> /// Required method for ArcGIS Component Category registration - /// Do not modify the contents of this method with the code editor. /// </summary> private static void ArcGISCategoryRegistration(Type registerType) { string regKey = string.Format("HKEY_CLASSES_ROOT\\CLSID\\{{{0}}}", registerType.GUID); MxCommandBars.Register(regKey); } /// <summary> /// Required method for ArcGIS Component Category unregistration - /// Do not modify the contents of this method with the code editor. /// </summary> private static void ArcGISCategoryUnregistration(Type registerType) { string regKey = string.Format("HKEY_CLASSES_ROOT\\CLSID\\{{{0}}}", registerType.GUID); MxCommandBars.Unregister(regKey); } #endregion #endregion public ArcGISToolbar1() { // // TODO: Define your toolbar here by adding items // //AddItem("esriArcMapUI.ZoomInTool"); //BeginGroup(); //Separator //AddItem("{FBF8C3FB-0480-11D2-8D21-080009EE4E51}", 1); //undo command //AddItem(new Guid("FBF8C3FB-0480-11D2-8D21-080009EE4E51"), 2); //redo command } public override string Caption { get { //TODO: Replace bar caption return "My C# Toolbar"; } } public override string Name { get { //TODO: Replace bar ID return "ArcGISToolbar1"; } } 以上代码的主要功能:对建立的ToolBar进行注册,对ToolBar的属性如:名称,名字属性设置。 Ø 运行程序,会在相应的debug/Release下产生一个:DLL文件。并且会自动启动arcmap.exe。(如果不用代码对产生的插件DLL进行注册,也可以手动注册,具体注册方法如下: Ø 该阶段开发人员常常需要将组件编译成发布版,并将“dll”复制到其他机器上进行各种测试。 为满足这样的需求,开发人员可以在测试机器上使用“regasm.exe ”通过.Net 的“dll” 文件生成一个同名的“tlb ”类型库文件,这种“tlb ”文件就可以像COM 的“dll”一样加ArcGIS 使用。这样操作的前提条件是这台测试机器上至少安装有.Net Framework、ArcGIS Desktop 以及相应的补丁包。 具体的操作分为如下两步: 1、在“运行”中敲入“cmd”进入命令行 2、 转 到 “ regasm.exe” 文 件 所 在 目 录 下 (“C:\WINDOWS\Microsoft.NET\Framework\v1.1.4322”)敲入“regasm PATH\*.dll /tlb: *tlb”, 例如“regasm D:\Program Files\ArcGIS\EditTools.dll /tlb:EditTools.tlb”。这样,系统会在与“dll” 相同的目录下生成一个“tlb ”文件并已自动注册。该操作正确执行结果就象COM 的“dll” 文件注册后一样,你可以在ArcGIS 相应的工具扩展中找到该工具了,如果未找到,也可以 通过“Add From File…”方法添加生成的“tlb ”文件添加该组件。 说明: 1、这种注册方法虽不需要“组件调试阶段”代码中的那些[ComRegisterFunction()]函数 也能顺利执行,但强烈建议保留这些函数,如果没有这些函数将导致“系统部署阶段”注册 失败。 2、建议开发人员将“C:\WINDOWS\Microsoft.NET\Framework\v1.1.4322”路径加入系 统环境的“Path”中,这样就可以直接敲入“regasm”命令,而不用每次注册组件的时候都 要手动进入“regasm”路径下 3、敲入“regasm”和空格后,可以直接将有待注册的“dll”文件拖动到命令行窗口, 系统会自动加入命令行,而不用用户亲自敲入“dll”文件的路径和文件名 4、可通过“regasm –u PATH\*.dll /tlb: *tlb ”命令来注销该组件 5、建议不要在不同地方注册包含相同类的“dll”,否则很可能会产生类似于COM 的 “Dll Hell”的情况,导致ArcGIS 识别和使用的组件很可能不是用户所期望的组件,造成不 必要的麻烦。 六、 注册成功后,打开arcMap,工具栏出单击,就会显示出刚才所产生的toolbar:如图所示,对其进行勾选,工具栏就会显示在上面。 七、 到目前为止,一个名称(Caption)为“要素融合工具“的工具栏建立成功。下面就是如何开发Command,并添加到这个空栏中了!! Command Command与Tool的主要区别在于:Command可以产生人机交互,而tool才不能产生人机交互,因此:放大(zoomIn)则称为Tool,而若放大时放输入参,放大多少倍,刚是一个Command..产生Command前面建立工程的方法一样,只是在“添加类“时略有不同: 添加类时,选择“baseCommand“,如图所示: 并下一步,选择“Desktop ArcMap Command“: 确定之后,会自动产生如下代码: 以上代码主要功能为:注册DLL插件与设置此Command的Category分类归属,名称,标题,onClick事件所对应的操作等等; public MyCommand()//构造函数 { // // TODO: Define values for the public properties // base.m_category = "MyCommands"; //分类 base.m_caption = "放大"; //对外显示的名字。 base.m_message = "对地图进行放大"; //消息 base.m_toolTip = "放大"; //提示 base.m_name = " MyCommands _ZoomIn"; //unique id, non-localizable (e.g. "MyCategory_ArcMapCommand") try { // // TODO: change bitmap name if necessary // string bitmapResourceName = GetType().Name + ".bmp"; base.m_bitmap = new Bitmap(GetType(), bitmapResourceName); } catch (Exception ex) { System.Diagnostics.Trace.WriteLine(ex.Message, "Invalid Bitmap"); } 运行代码后,在工具栏处,右键选择customize,找到自己命名的“cagetory“名称,会显示自己在该归类下创建的命令。将其拖放到”我的工具条”上面,即完成命令添加到相应的工具条上面。 在自定义的工具条上的相应Command右键单击,可以对该命令进行相应的设置: 注意:插件的注册与反注册。 RegAsm TestPlugToolBar.dll /u Pause RegAsm TestPlugToolBar.dll /codebase pause
展开阅读全文

开通  VIP会员、SVIP会员  优惠大
下载10份以上建议开通VIP会员
下载20份以上建议开通SVIP会员


开通VIP      成为共赢上传
相似文档                                   自信AI助手自信AI助手

当前位置:首页 > 包罗万象 > 大杂烩

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        抽奖活动

©2010-2025 宁波自信网络信息技术有限公司  版权所有

客服电话:4009-655-100  投诉/维权电话:18658249818

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :微信公众号    抖音    微博    LOFTER 

客服