在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 }