ArcGIS二次开发实践— — 遍历ToolBox中的工具!

在AO中,打开“文件A”的基本流程是:

1、创建对应“文件A”类型的WorkspaceFactory;

2、用WorkspaceFactory创建“文件A”的Workspace,Workspace可以是文件所在文件夹(如本文后面要创建的ToolBox的Workspace),也可以是空间数据库(如果你把文件存到数据库里了或要打开数据库里的数据)。

3、用Workspace打开“文件A”,获得对应类型的“文件A”对象;

----------------------------------------------------好了,开始(这里,我的Toolbox路径为F:\Root\Tools\MagmaDistribution.tbx)。

ArcGIS的每个Toolbox,在windows下都是一个.tbx文件。

通过AO的对象模型图可以知道,在.Net里用GPToolbox对象来代表Toolbox,因此我们首先需要打开事先准备好的.tbx文件,并实创建一个GPToolbox对象来管理它。

1、创建一个ToolboxWorkspaceFactory对象。

2、ToolboxWorkspaceFactory来创建用于打.tbx文件的ToolboxWorkspace。

3、用ToolboxWorkspaceFactory通过.tbx文件的路径创建GPToolbox对象。

这样我们就创建了一个代表ToolBox的对象,代码如下:

1 ToolboxWorkspaceFactory toolBoxWSF = new ToolboxWorkspaceFactoryClass();
2 IToolboxWorkspace toolBoxWS = (IToolboxWorkspace)toolBoxWSF.OpenFromFile("F:\\Root\\Tools", 0);
3 IGPToolbox toolbox = toolBoxWS.OpenToolbox("MagmaDistribution.tbx");

我的MagmaDistribution.tbx里放了3个tool,下面我们来获得这四个tool的名字,并输出到控制台:

 1  //输出toolbox的路径信息
 2                 Console.WriteLine("IGPToolBox的PathName:" + toolbox.PathName);
 3                 //从IGPToolbox的ToolNames属性获得toolbox里3个tool的名字。
 4                 ESRI.ArcGIS.Geoprocessing.IEnumGPToolName toolName = toolbox.ToolNames;
 5                 IGPToolName gpn = toolName.Next();
 6                 while (gpn != null)
 7                 {//循环输出tool的名字
 8                     Console.WriteLine(gpn.DisplayName);
 9                     gpn = toolName.Next();
10                 }

运行效果:

  

完整代码:

 1 using System;
 2 using System.Collections.Generic;
 3 using System.Text;
 4 using ESRI.ArcGIS.esriSystem;
 5 using ESRI.ArcGIS.Geodatabase;
 6 using ESRI.ArcGIS.DataSourcesGDB;
 7 using ESRI.ArcGIS.Geoprocessing;
 8
 9 namespace esriTestConsole
10 {
11     class Program
12     {
13         private static LicenseInitializer m_AOLicenseInitializer = new esriTestConsole.LicenseInitializer();
14
15         [STAThread()]
16         static void Main(string[] args)
17         {
18             //ESRI License Initializer generated code.//这是创建ArcGIS控制台项目时自动生成的
19             m_AOLicenseInitializer.InitializeApplication(new esriLicenseProductCode[] { esriLicenseProductCode.esriLicenseProductCodeEngine, esriLicenseProductCode.esriLicenseProductCodeEngineGeoDB, esriLicenseProductCode.esriLicenseProductCodeBasic, esriLicenseProductCode.esriLicenseProductCodeStandard, esriLicenseProductCode.esriLicenseProductCodeAdvanced },
20             new esriLicenseExtensionCode[] { esriLicenseExtensionCode.esriLicenseExtensionCodeNetwork, esriLicenseExtensionCode.esriLicenseExtensionCodeSpatialAnalyst });
21             //ESRI License Initializer generated code.
22             try
23             {
24                 ToolboxWorkspaceFactory toolBoxWSF = new ToolboxWorkspaceFactoryClass();
25                 IToolboxWorkspace toolBoxWS = (IToolboxWorkspace)toolBoxWSF.OpenFromFile("F:\\Root\\Tools", 0);
26                 IGPToolbox toolbox = toolBoxWS.OpenToolbox("MagmaDistribution.tbx");
27                 //输出toolbox的路径信息
28                 Console.WriteLine("IGPToolBox的PathName:" + toolbox.PathName);
29                 //从IGPToolbox的ToolNames属性获得toolbox里4个tool的名字。
30                 ESRI.ArcGIS.Geoprocessing.IEnumGPToolName toolName = toolbox.ToolNames;
31                 IGPToolName gpn = toolName.Next();
32                 while (gpn != null)
33                 {//循环输出tool的名字
34                     Console.WriteLine(gpn.DisplayName);
35                     gpn = toolName.Next();
36                 }37
38             }
39             catch (Exception ex)
40             {
41                 Console.WriteLine(ex.Message);
42             }
43             ////Do not make any call to ArcObjects after ShutDownApplication()
44             finally
45             {
46                 Console.WriteLine("输入任意字符退出程序:");
47                 Console.Read();
48                 m_AOLicenseInitializer.ShutdownApplication();
49             }
50         }
51     }
52 }
时间: 2024-12-28 05:14:35

ArcGIS二次开发实践— — 遍历ToolBox中的工具!的相关文章

ArcGIS二次开发综述

ArcGIS是一个全面的GIS平台,具有多种二次开发方式,为行业应用提供了丰富多样的定制手段.ArcGIS传统的二次开发方式主要是基于脚本和COM组件技术.随着云计算和移动计算的兴起和大数据的广泛应用,传统开发方式的缺点异常凸显,例如不能跨平台.开发难度大.性能低.无法利用云计算资源等,难以融入到主流的信息浪潮中.本文分析了ArcGIS的二次开发历史和最新的开发方式,讨论了其优缺点,指出未来ArcGIS二次开发的方向应具有可视化.开源.跨平台.云计算等特点.本综述为云计算和大数据背景下高校GIS

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

写了个标题好长啊~~~~ 这两天又认识了一个新玩意,记录一下下,啦啦啦~~~~~ 话说,认识arcgis快十年了,从桌面版到engine的二次开发,其实不过才认识到它的冰山一角, 它总是能带来很多还未知的东西,实话说,就是如此的热爱着它,因为从来都觉得遨游其中,没有边界~~~~~ arcengine二次开发,这个玩意现在已经不流行了,但是其奥妙和乐趣依然无穷~~~~ 言归: 一. 之前写的basetool,basecommand等类都是在独立的系统中运行的,没有单独注册成过组件在桌面版arcma

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

在VS2010下基于ArcGIS 10.1做二次开发时遇到个奇怪的问题,对于MXD工程文档中已经存在的图层,获取其FeatureClass可以调用CreateFeature()函数生成要素,但是对于通过程序代码(AddShapFile())添加到MXD工程中的图层,获取其FeatureClass后再执行CreateFeature()就会报COM错误(Error HRESULT E_FAIL has been returned from a call to a COM component,代码0x

ARCGIS 二次开发可以参考的资源(长期更新)

背景: 今天,被领导教导,说是你刚入职,要尽快把项目做起.言语忠恳,而且说不要再在电脑上练习那些小的测试例子了,要直接切入项目,熟悉项目的开发框架,与设计理念.得到,我的负责人(TB)把他做的项目的资料整理好后,你们两个再沟通,那个项目需要完善的地方,以及增加的工鞥.这个项目已经实施2年了,虽然是单位自己用的软件,但是也不能再耽搁下去了,实在不行,只能找学校的老师,去完成剩下的了.告诫我,自己要尽快的熟悉起CS开发,以便尽快完成系统的最终的设计工作. 正文 所以,本文切知,尽快的熟悉起ArcGI

ProE二次开发 Creo二次开发 模型遍历

详见: http://www.mcadex.com/bbs_1431046_ss20130113/thread_343385_1.html QQ: [email protected] 模型遍历 特征遍历及曲面遍历 ProSolidFeatVisit() ProSolidSurfaceVisit() ... 以上信息仅为部分, 详见: http://www.mcadex.com/bbs_1431046_ss20130113/thread_343385_1.html

CAD二次开发---导入外部文件中的块并输出预览图形(五)

思路: 1)首先要定义一个数据库对象来表示包含块的文件,改数据库对象会被加载到内存中,但不会被显示在CAD窗口中. 2)调用Database类的ReadDwgFile函数将外部文件DWG文件读入到新创建的数据库对象中. 3)最后调用Database类的WblockCloneObjects函数将外部的DWG文件中块对象复制到当前数据库中. 1 /// <summary> 2 /// 外部文件导入块, 3 /// </summary> 4 /// <param name=&quo

NX二次开发-UF_OBJ_cycle_by_name遍历名字

1 使用前自己要看好名字是加在body,还是face,还是curve,或者其他,别加错了. 2 NX9+VS2012 3 4 5 #include <uf.h> 6 #include <uf_obj.h> 7 8 9 UF_initialize(); 10 11 tag_t LineTag = NULL_TAG; 12 UF_OBJ_cycle_by_name("Line123", &LineTag);//遍历名字 13 14 UF_OBJ_set_co

NX二次开发-UFUN将工程图中的点坐标映射到建模绝对坐标UF_VIEW_map_drawing_to_model

1 #include <uf.h> 2 #include <uf_ui.h> 3 #include <uf_draw.h> 4 #include <uf_view.h> 5 #include <uf_curve.h> 6 7 8 9 UF_initialize(); 10 11 //在工程图里创建点 12 double p1[3] = { 106.905267, 139.431151 }; 13 14 //获得图纸页tag 15 int num_

arcgis二次开发遇到System.Runtime.InteropServices.COMException (0x80040228) :异常来自HRESULT:0x80040228

出现此问题只需要在控件上拖入一个LicenseControl就可以了 参考资料:http://yaogu.blog.163.com/blog/static/1849990662012101283256465/