Visual C++ 開發Geoprocessing 工具
GP工具開發步驟
繼承IGPFunctionFactory和IGPFunction介面 2.實現上述介面中的方法 3.定義UI參數 4.處理UI參數(驗證期處理和執行期調用) 5.如何調用GP工具 GP工具涉及的主要介面 IGPFunctionFactory IGPFunction
1.GP工具的模式 對象建立型模式(原廠模式)只要實現IGPFunctionFactory介面,便可以在ArcGIS軟體啟動時,ArcToolBox載入自 定義的GP工具。自訂的GP工具需要實現IGPFunction介面。一旦實現該介面,ArcToolBox根據名字列出每個自訂GP工具。2.GP工具開發中需要自己實現的方法IGPFunctionFactory主要的三個方法 GetFunction(BSTR Name, IGPFunction * * Function)// Returns the geoprocessing function object with the given name GetFunctionName(BSTR Name, IGPName * * functionname) //Returns the geoprocessing function name object with the given name. GetFunctionNames (IEnumGPName * * functionnames)// Returns an enumeration of function name objects of all the geoprocessing functions managed by this function factory IGPFunction的主要方法get_Name(BSTR * Name)get_ParameterInfo(IArray * * params)get_FullName(IName * * Name)IsLicensed(VARIANT_BOOL * IsLicensed)Validate(IArray * paramvalues, VARIANT_BOOL updateValues, IGPEnvironmentManager * envMgr, IGPMessages * * message)Execute(IArray * paramvalues, ITrackCancel * trackcancel, IGPEnvironmentManager * envMgr, IGPMessages * message)
3.關鍵的操作(主要涉及GPFunction中的方法)(1)UI參數定義-----------get_ParameterInfo(IArray * * params)
Params是儲存每一項自訂的UI參數的動態數組
圖中m_ipParameters變數為IArrayPtr類型,直接傳遞給Params參數 STDMETHOD(get_ParameterInfo)(IArray * * params) { if (params == NULL) return E_POINTER; IArrayPtr ipArray=m_ipParameters; *params=ipArray.Detach(); return S_OK; }這個方法的作用是根據使用者佈建的各類參數來設定GP Function Tool 的UI。如何互動的細節已經被隱藏。使用者只需要設定參數類型,自動的得到參數對應的UI。 可直接定義的參數類型如下(具體查看ao協助IGPDataType Interface)
定義一個double參數 //變數Version------參數類型double
ipGPParameterEdit.CreateInstance(CLSID_GPParameter);ipGPDataType.CreateInstance(CLSID_GPDoubleType);//參數類型 ipGPParameterEdit->putref_DataType(ipGPDataType);ipGPParameterEdit->put_Direction(esriGPParameterDirectionInput);//定義為輸入或輸出ipGPParameterEdit->put_DisplayName(CComBSTR("Input Version of VCT ")); ipGPParameterEdit->put_Name(CComBSTR("Input Version (Just support 2.0)"));//參數名稱ipGPParameterEdit->put_ParameterType(esriGPParameterTypeRequired); //必須輸入參數m_ipParameters->Add(ipGPParameterEdit);
(2)參數驗證--------- Validate()方法自訂型別參數後,通過Validate方法來提示輸入的參數資訊是否正確。 1. 增強客戶體驗 2. 執行較簡單的資料校正 3. 反饋一系列的校正資訊 如何進行參數驗證可以使用IGPUtilities的InternalValidate方法m_ipGPUtilities->InternalValidate (m_ipParameters,paramvalues,updateValues,TRUE,envMgr,&ipGPMessages);
(3)執行---------------Execute()方法最重要的方法之一, 1.根據使用者輸入得到參數對象,包括Featureclass,Table等2.結合擷取參數類型做普通的AO開發3.錯誤資訊的友好提示
If (ipFeatureClass==NULL) { ipMsg.CreateInstance(CLSID_GPMessage); ipMsg->put_Type(esriGPMessageTypeError); ipMsg->put_Description(CComBSTR("Error in Open Featureclass!")); message->Add(ipMsg); return E_FAIL; } else { ipMsg.CreateInstance(CLSID_GPMessage); ipMsg->put_Type(esriGPMessageTypeInformative); ipMsg->put_Description(CComBSTR("/n----succeed to Open FeatureClass !---")); message->Add(ipMsg);Return S_OK; }
部署直接註冊DLL。在ArcToolBox中添加工具到自訂的ArcToolBox目錄中。
總結1.GP工具適用於常用的資料處理工作2.可以實現多個GP工具構建MoudleBuilder完成較複雜的商務程序。