1. 程式人生 > >PIE SDK向量資料編輯事件的監聽

PIE SDK向量資料編輯事件的監聽

 

1.功能簡介

    通過IEditEvents介面,開發者可以監聽到Editor物件的相關的事件,並且做出反應。包括Editor中開始編輯、結束編輯等操作,下面對向量資料的編輯事件的監聽功能進行介紹。

2.功能實現說明

2.1實現思路及原理說明

第一步

前提處於編輯狀態,在編輯的開始和結束的時候進行觸發的操作事件

2.2 核心介面與方法

介面/類

方法/屬性

說明

 

 

IEditEvents

OnStartEditOperation;

開始編輯委託事件

OnStopEditOperation

結束編輯委託事件

 

IEditor

GetEditState();

獲取編輯狀態

StartEditOperation(string strDescription);

開始編輯操作

StopEditOperation()

結束編輯操作

2.3示例程式碼

專案路徑

百度雲盤地址下/PIE示例程式/04資料操作/07向量資料編輯事件的監聽

資料路徑

 自定義即可

視訊路徑

百度雲盤地址下/PIE示例程式/04資料操作/07向量資料編輯事件的監聽.avi

示例程式碼

  1      //要素編輯器
  2         private
IEditor m_Editor = Editor.Instance; 3 //滑鼠按下起點 4 private IPoint m_StartPoint = null; 5 //要素 6 private IFeature m_Feature = null; 7 //識別符號 8 private int m_Flag = 0; 9 //地圖初始化繫結編輯監聽事件 10 private void FormMain_Load(object sender, EventArgs e) 11 { 12 //初始化繫結編輯監聽事件 13 IEditEvents editEvents = Editor.Instance; 14 editEvents.OnStartEditOperation += editEvents_OnStartEditOperation; 15 editEvents.OnStopEditOperation += editEvents_OnStopEditOperation; 16 } 17 //委託事件 18 public void editEvents_OnStartEditOperation() 19 { 20 MessageBox.Show("開始繪製"); 21 } 22 public void editEvents_OnStopEditOperation() 23 { 24 MessageBox.Show("完成繪製"); 25 } 26 27 /// <summary> 28 /// 開始編輯 29 /// </summary> 30 /// <param name="sender"></param> 31 /// <param name="e"></param> 32 private void ToolStripMenuItem_StartEdit_Click(object sender, EventArgs e) 33 { 34 if (m_Editor.GetEditState() == EditState.StateNotEditing) 35 { 36 MessageBox.Show("開始編輯"); 37 m_Editor.StartEditing(); 38 } 39 } 40 41 /// <summary> 42 /// 結束編輯 43 /// </summary> 44 /// <param name="sender"></param> 45 /// <param name="e"></param> 46 private void ToolStripMenuItem_StopEdit_Click(object sender, EventArgs e) 47 { 48 if (m_Editor.GetEditState() == EditState.StateEditing) 49 { 50 if (MessageBox.Show("結束編輯前是否儲存編輯資料", "確認", MessageBoxButtons.YesNo, MessageBoxIcon.Question) == DialogResult.OK) 51 { 52 m_Editor.SaveEditing();//儲存編輯 53 } 54 m_Editor.StopEditing(true);//停止編輯 55 } 56 } 57 /// <summary> 58 /// 地圖控制元件滑鼠移動事件 59 /// </summary> 60 /// <param name="sender"></param> 61 /// <param name="e"></param> 62 63 private void mapControlMain_MouseDown(object sender, MouseEventArgs e) 64 { 65 if (e.Button != System.Windows.Forms.MouseButtons.Left) return; 66 67 if (m_Editor.GetEditState() == EditState.StateEditing) 68 { 69 m_StartPoint = mapControlMain.FocusMap.ToMapPoint(e.Location); 70 List<ILayer> layerList = new List<ILayer>(); 71 int iLayerCount = mapControlMain.FocusMap.LayerCount; 72 if (iLayerCount > 0) 73 { 74 ILayer layer = mapControlMain.GetLayer(iLayerCount - 1); 75 layerList.Add(layer); 76 if (layer.IsValid()) 77 { 78 if (layer.LayerType != LayerType.LayerTypeFeatureLayer) return; 79 80 IGeometry geometry = null; 81 switch (m_Flag) 82 { 83 case 2: 84 mapControlMain.ActiveView.FocusMap.ClearSelectionFeatures(); 85 m_Editor.StartEditOperation("開始編輯"); 86 geometry = mapControlMain.TrackPolygon() as IGeometry; 87 geometry.SpatialReference = mapControlMain.SpatialReference; 88 89 IFeatureClass featureClass = (layer as IFeatureLayer).FeatureClass; 90 m_Feature = featureClass.CreateNewFeature(); //建立Feature 91 m_Feature.Geometry = geometry; 92 featureClass.AddFeature(m_Feature); //新增Feature 93 // featureClass.Save(); //儲存 94 m_Editor.StopEditOperation(); 95 mapControlMain.PartialRefresh(ViewDrawPhaseType.ViewAll);//不能少 96 m_Flag = 0; //一定要加 97 break; 98 default: 99 break; 100 } 101 } 102 } 103 } 104 } 105 106 /// <summary> 107 /// 繪製面狀要素 108 /// </summary> 109 /// <param name="sender"></param> 110 /// <param name="e"></param> 111 private void toolStripButton_DrawPolygon_Click(object sender, EventArgs e) 112 { 113 m_Flag = 2; 114 }
View Code

2.4示例截圖