• ArcEngine要素编辑遇到的一些问题


    1、如何开启编辑

    IMap myMap = this._Aplication.ActiveView.FocusMap;
    IWorkspace myWorkspace = (myMap25Sheet.PointFeatureLayer as IDataset).Workspace;
    this._Aplication.EngineEditor.EnableUndoRedo(true);
    this._Aplication.EngineEditor.StartEditing(myWorkspace, myMap);
    this._Aplication.EngineEditor.StartOperation();

    2、如何设置要编辑的目标图层
    IEngineEditLayers myEngineEditLayers = this._Aplication.EngineEditor as IEngineEditLayers;
    myEngineEditLayers.SetTargetLayer(myMap25Sheet.PointFeatureLayer, 0);

    3、编辑的不符合规则,如何回退

    IWorkspaceEdit myWorkspaceEdit = this._Application.EngineEditor.EditWorkspace as IWorkspaceEdit;
    bool myHasUndo = false;
    myWorkspaceEdit.HasUndos(ref myHasUndo);
    if (myHasUndo == true)
    {
    IMap myMap = this._Application.ActiveView.FocusMap;
    ((IActiveView)myMap).PartialRefresh(esriViewDrawPhase.esriViewGeoSelection, null, null);
    myMap.ClearSelection();
    ((IActiveView)myMap).PartialRefresh(esriViewDrawPhase.esriViewGeoSelection, null, null);
    myWorkspaceEdit.UndoEditOperation();
    this._Application.ActiveView.Refresh();
    }

    注意,一定要调用清空选择那块的代码,不然回退后,刷新下地图,又会重新回来,发现这个问题花了好长时间。

    4、如何控制只能选择和编辑一个要素

    private void EngineEditor_OnSelectionChanged()
            {
                Map25Sheet myMap25Sheet = this._Application.WorkZone.ActiveMap25Sheet;
                if (myMap25Sheet == null)
                {
                    this._Application.SamplePointInfoUI.SetPointFeature(null);
                    return;
                }
                IFeatureLayer myFeatureLayer = myMap25Sheet.PointFeatureLayer;
                IFeatureSelection myFeatureSelection = myMap25Sheet.PointFeatureLayer as IFeatureSelection;
                if (myFeatureSelection.SelectionSet.Count == 0)
                {
                    this._Application.SamplePointInfoUI.SetPointFeature(null);
                    return;
                }
                int myID = myFeatureSelection.SelectionSet.IDs.Next();
                if (myFeatureSelection.SelectionSet.Count > 1)
                {
                    myFeatureSelection.Clear();
                    myFeatureSelection.SelectionSet.Add(myID);
                }
                this._Application.SamplePointInfoUI.SetPointFeature(myFeatureLayer.FeatureClass.GetFeature(myID));
                this._Application.ActiveView.PartialRefresh(esriViewDrawPhase.esriViewGeoSelection, null, null);
            }
    EngineEditor的OnSelectionChanged事件,在这控制下即可。

     5、如何只编辑一个图层

    控制其他图层不能不能被选择即可。

    myFeatureLayer.Selectable = false;

    6、ArcEngine中没有保存函数,如何保存编辑

    先停止编辑,调用停止的时候,把是否保存参数设置为true,然后再重新开启即可。

  • 相关阅读:
    【原】ListView的BeginUpdate()和EndUpdate()的用处
    【原】Telerik radwindow 在IE10下偶尔报 unable to get value of the property 'toLowerCase' 的解决办法
    【原】从头学习设计模式(一)——单例模式
    【原】从头学习设计模式(二)——简单工厂模式
    【原】通过JS打开IE新tab(非Window)的解决方案
    【原】高效GTD云工具 ——高效管理你的时间
    【原】安装Win7和Ubuntu双系统后,Win7耳机无声音的解决办法
    【原】从头学习设计模式(三)——工厂方法模式
    【原】备忘:Oracle 中创建存储过程及调用测试一例
    【转】DBA的性格
  • 原文地址:https://www.cnblogs.com/mytudousi/p/14462940.html
Copyright © 2020-2023  润新知