1.功能簡介編輯器
經過IEditEvents接口,開發者能夠監聽到Editor對象的相關的事件,而且作出反應。包括Editor中開始編輯、結束編輯等操做,下面對矢量數據的編輯事件的監聽功能進行介紹。ide
2.功能實現說明spa
2.1實現思路及原理說明code
第一步orm |
前提處於編輯狀態,在編輯的開始和結束的時候進行觸發的操做事件視頻 |
2.2 核心接口與方法對象
接口/類blog |
方法/屬性教程 |
說明接口 |
IEditEvents |
OnStartEditOperation; |
開始編輯委託事件 |
OnStopEditOperation |
結束編輯委託事件 |
|
IEditor |
GetEditState(); |
獲取編輯狀態 |
StartEditOperation(string strDescription); |
開始編輯操做 |
|
StopEditOperation() |
結束編輯操做 |
項目路徑 |
百度雲盤地址下/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 } |