同步調用一旦開始,調用者必須等到方法調用返回後,才能繼續後續的行爲。算法
PIE SDK支持算法功能的執行,下面對算法的同步調用功能進行介紹。ide
AlgoFactory類實現了算法的管理,主要實現瞭如下方法:spa
1) AlgoFactory.Instance().CreateAlgo(A,B)實現算法Algo的建立;須要注意的是:A:「PIE.CommonAlgo.dll」,B: "PIE.CommonAlgo.ImageClipAlgo"。code
2) 設置算法執行的參數;視頻
3) 經過算法的Excute或AlgoFactory.Instance().ExcuteAlgo()方法實現算法的同步調用;blog
第一步教程 |
算法建立CreateAlgoip |
第二步ci |
設置算法執行的參數;同步 |
第三步 |
同步執行ExcuteAlgo |
項目路徑 |
百度雲盤地址下/PIE示例程序/10.算法調用/算法的調用方式/Algo.Execute |
數據路徑 |
百度雲盤地址下/PIE示例數據/柵格數據/04.World/ World.tif |
視頻路徑 |
百度雲盤地址下/PIE視頻教程/10.算法調用/算法的調用方式/算法的同步調用.avi |
示例代碼 |
|
![]() 1 /// <summary> 2 /// 單擊方法 3 /// </summary> 4 public override void OnClick() 5 { 6 //Clip裁剪 7 PIE.CommonAlgo.DataPreImgClip_Exchange_Info info = new PIE.CommonAlgo.DataPreImgClip_Exchange_Info(); 8 9 info.InputFilePath = @"D:\Data\World.tif"; //待裁剪影像 10 PIE.DataSource.IRasterDataset rDataset = PIE.DataSource.DatasetFactory.OpenRasterDataset(info.InputFilePath, PIE.DataSource.OpenMode.ReadOnly); 11 if (rDataset == null) return; 12 int count = rDataset.GetBandCount(); 13 List<int> list = new List<int> { }; 14 for (int i = 0; i < count; i++) 15 { 16 list.Add(i); 17 } 18 info.listBands = list; 19 info.XFactor = 1; 20 info.YFactor = 1; 21 info.bInvalidValue = false; 22 info.OutputFilePath = @"D:\Data\clip_Execute.tif"; //裁剪保存結果 23 info.Type = 0; // (等於0表示經過柵格範圍裁剪) 24 info.XStart = 0; 25 info.XEnd = 500; 26 info.YStart = 0; 27 info.YEnd = 500; 28 info.FileType = "GTiff"; //Tiff數據的FileTypeCode爲「GTiff」,IMG數據的FileTypeCode爲"HFA",其餘格式的爲"ENVI"。; 29 30 //一、初始實例化Instance,算法建立CreateAlgo 31 PIE.SystemAlgo.ISystemAlgo algo = PIE.SystemAlgo.AlgoFactory.Instance().CreateAlgo("PIE.CommonAlgo.dll", "PIE.CommonAlgo.ImageClipAlgo"); 32 if (algo == null) return; 33 34 //二、同步執行Excute 35 PIE.SystemAlgo.ISystemAlgoEvents algoEvents = algo as PIE.SystemAlgo.ISystemAlgoEvents; 36 algo.Name = "影像裁剪"; 37 algo.Params = info; 38 bool OK = algo.Execute(); 39 40 PIE.Carto.ILayer layer = PIE.Carto.LayerFactory.CreateDefaultLayer(@"D:\Data\clip_Execute.tif"); 41 m_HookHelper.FocusMap.AddLayer(layer); m_HookHelper.ActiveView.PartialRefresh(PIE.Carto.ViewDrawPhaseType.ViewAll); 42 } |