国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

定制ArcEngine要素編輯工具

2019-11-14 14:05:34
字體:
來源:轉載
供稿:網友

來自:http://blog.sina.com.cn/s/blog_4d780fc10101d2d5.html

先初步了解到大概用到的下面的接口和類:

IEngineEditor

IEngineEditTask

IEngineEditLayers

IEngineEditEvents

IEngineEditPRoperties

ControlsEditingSketchToolClass

ControlsEditingEditToolClass

ControlsEditingCopyCommandClass

ControlsEditingPasteCommandClass

ControlsEditingClearCommandClass

現在使用 IEngineEditor、IEngineEditTask、IEngineEditLayers這三個接口,再加上Command命令和Tool可以是實現新建要素、復制、剪切、黏貼、刪除、移動要素。

下面說明一下我實現新建圖形功能的思路:

1、根據workspace和map開啟編輯。

2、設置目標圖層。

3、設置編輯操作的任務類型。

4、激活SletchTool,ControlsEditingSketchToolClass。

5、這時就可以在AxMapControl中畫圖形了。圖形的點線面類型,SletchTool工具會根據目標圖層的類型自動識別。

使用了全局變量IEngineEditor,保證在其他的模塊該變量的值

private IEngineEditor m_EngineEditor = new EngineEditorClass();

  private void btnNewFeature_Click(object sender, EventArgs e)

      {

if(m_engineEditor.EditState==esriEngineEditState.esriEngineStateNotEditing)     

        {

                //Start editing the workspace of the first feature layer found. 

                //設置編輯的WorkSpace和編輯對象圖層    

                ILayer currentLayer = mMap.get_Layer(0);

                if (currentLayer is IFeatureLayer)

                {

                    IFeatureLayer featureLayer = currentLayer as IFeatureLayer;

                    IDataset dataset = featureLayer.FeatureClass as IDataset;

                    IWorkspace workspace = dataset.Workspace;

                    m_engineEditor.StartEditing(workspace, mMap.Map);

                    ((IEngineEditLayers)m_engineEditor).SetTargetLayer(featureLayer, 0);

                    SetCurrentTask(ref   m_engineEditor,  "新建要素");

                }

}

     }

         ///

        /// 設置編輯的任務類型

        ///

        ///

        /// 自己命名的任務名稱

      public static void SetCurrentTask(ref IEngineEditor pEngineEditor, string taskName)

        {

            IEngineEditTask edittask;

            if (pEngineEditor.EditState == esriEngineEditState.esriEngineStateEditing)

            {

                switch (taskName)

                {

                    case "新建要素":

                        edittask = pEngineEditor.GetTaskByUniqueName("ControlToolsEditing_CreateNewFeatureTask");

                        if (edittask != null)

                        {

                            pEngineEditor.CurrentTask = edittask;

                        }

                        break;

                    case "修改圖形":

                        edittask=pEngineEditor.GetTaskByUniqueName("ReshapePolylineEditTask_Reshape Polyline_CSharp");

                        if (edittask != null)

                        {

                            pEngineEditor.CurrentTask = edittask;

                        }

                        break;

                    case "修改要素":

                        edittask= pEngineEditor.GetTaskByUniqueName("ControlToolsEditing_ModifyFeatureTask");

                        if (edittask != null)

                        {

                            pEngineEditor.CurrentTask = edittask;

                        }

                        break;

                }

            }

        }

刪除、復制、黏貼的功能,將m_EngineEditor 置于開啟編輯的狀態后,直接調用下面的命令就好了

ControlsEditingEditToolClass  //用于選擇要素對像

ControlsEditingCopyCommandClass

ControlsEditingPasteCommandClass

ControlsEditingClearCommandClass

 

撤銷和重做的功能

       ///

        /// 撒消編輯

        ///

        /// IMap 地圖對象

        public void MapUndoEdit(IMap m_pMap)

        {

            IEngineEditProperties ep = new EngineEditorClass();

            ILayer m_pCurrentLayer = ep.TargetLayer;

            if (m_pCurrentLayer == null) return;

            IFeatureLayer pFeatureLayer = (IFeatureLayer)m_pCurrentLayer;

            IDataset pDataset = (IDataset)pFeatureLayer.FeatureClass;

            if (pDataset == null) return;

           

            IWorkspaceEdit pWorkspaceEdit = (IWorkspaceEdit)pDataset.Workspace;

            bool bHasUndos = false;

            pWorkspaceEdit.HasUndos(ref bHasUndos);

            if (bHasUndos)

                pWorkspaceEdit.UndoEditOperation();

            IActiveView pActiveView = (IActiveView)m_pMap;

            pActiveView.Refresh();

        }

 

        ///

        /// 重做

        ///

        /// IMap 地圖對象

        public void MapRedoEdit(IMap m_pMap)

        {

            IEngineEditProperties ep = new EngineEditorClass();

            ILayer m_pCurrentLayer = ep.TargetLayer;

            if (m_pCurrentLayer == null) return;

            IFeatureLayer pFeatureLayer = (IFeatureLayer)m_pCurrentLayer;

            IDataset pDataset = (IDataset)pFeatureLayer.FeatureClass;

            if (pDataset == null) return;

            IWorkspaceEdit pWorkspaceEdit = (IWorkspaceEdit)pDataset.Workspace;

            bool bHasUndos = false;

            pWorkspaceEdit.HasUndos(ref bHasUndos);

            if (bHasUndos)

                pWorkspaceEdit.RedoEditOperation();

            IActiveView pActiveView = (IActiveView)m_pMap;

            pActiveView.Refresh();

        }  


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 盈江县| 泸定县| 河北省| 曲松县| 涟水县| 景谷| 泽库县| 义马市| 大兴区| 理塘县| 沧州市| 高青县| 伊川县| 宁安市| 外汇| 蒙自县| 醴陵市| 泰和县| 怀仁县| 望城县| 张家川| 浦江县| 潼关县| 黄龙县| 偃师市| 三亚市| 涡阳县| 武胜县| 玉田县| 馆陶县| 奎屯市| 青河县| 乌鲁木齐县| 绥棱县| 普洱| 望城县| 渝中区| 灵丘县| 抚州市| 沂源县| 平和县|