在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、用ToolboxWorkspace创建GPToolbox对象。

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

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

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

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

运行效果:

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

  

完整代码:

 using System;
using System.Collections.Generic;
using System.Text;
using ESRI.ArcGIS.esriSystem;
using ESRI.ArcGIS.Geodatabase;
using ESRI.ArcGIS.DataSourcesGDB;
using ESRI.ArcGIS.Geoprocessing; namespace esriTestConsole
{
class Program
{
private static LicenseInitializer m_AOLicenseInitializer = new esriTestConsole.LicenseInitializer(); [STAThread()]
static void Main(string[] args)
{
//ESRI License Initializer generated code.//这是创建ArcGIS控制台项目时自动生成的
m_AOLicenseInitializer.InitializeApplication(new esriLicenseProductCode[] { esriLicenseProductCode.esriLicenseProductCodeEngine, esriLicenseProductCode.esriLicenseProductCodeEngineGeoDB, esriLicenseProductCode.esriLicenseProductCodeBasic, esriLicenseProductCode.esriLicenseProductCodeStandard, esriLicenseProductCode.esriLicenseProductCodeAdvanced },
new esriLicenseExtensionCode[] { esriLicenseExtensionCode.esriLicenseExtensionCodeNetwork, esriLicenseExtensionCode.esriLicenseExtensionCodeSpatialAnalyst });
//ESRI License Initializer generated code.
try
{
ToolboxWorkspaceFactory toolBoxWSF = new ToolboxWorkspaceFactoryClass();
IToolboxWorkspace toolBoxWS = (IToolboxWorkspace)toolBoxWSF.OpenFromFile("F:\\Root\\Tools", );
IGPToolbox toolbox = toolBoxWS.OpenToolbox("MagmaDistribution.tbx");
//输出toolbox的路径信息
Console.WriteLine("IGPToolBox的PathName:" + toolbox.PathName);
//从IGPToolbox的ToolNames属性获得toolbox里4个tool的名字。
ESRI.ArcGIS.Geoprocessing.IEnumGPToolName toolName = toolbox.ToolNames;
IGPToolName gpn = toolName.Next();
while (gpn != null)
{//循环输出tool的名字
Console.WriteLine(gpn.DisplayName);
gpn = toolName.Next();
}
}
catch (Exception ex)
{
Console.WriteLine(ex.Message);
}
////Do not make any call to ArcObjects after ShutDownApplication()
finally
{
Console.WriteLine("输入任意字符退出程序:");
Console.Read();
m_AOLicenseInitializer.ShutdownApplication();
}
}
}
}
05-07 15:37