在前面一篇博客中,我们对IWorkspaceEdit接口做了介绍,通过IWorkspaceEdit接口,我们实现了对要素的添加,而在编辑介绍的那篇博文中,我还提到了另外一个接口IEngineEditor。
IEngineEditor接口被EngineEditorClass实现,而EngineEditor对象相当于我们在ArcMap中编辑的时候用到的Editor工具条,回想下我们要在一个线图层中添加一条新的要素,我们往往是按照下面的步骤
1)start editing
2)将targetlayer 设置为我们要编辑的图层
3)设置task 为create new feature
4)然后使用草图工具开始编辑。
其实这4个分别对应了四个接口,而这4个接口都被直接或间接被EngineEditorClass实现。这4个接口分别是:
IEngineEditor
IEngineEditLayer
IEngineEditSketch
还有一个间接的
ITask
task是一个任务流,ArcGIS 中的这个task就是对一系列操作的封装,也就是用草图工具所做的一系列动作(mousedown,mousemove等)。
这个示例中我定义了一个给等高线批量赋值的task。
主要代码如下:
IWorkspaceFactory pWsF = new ShapefileWorkspaceFactory();
IFeatureWorkspace pFtWs = pWsF.OpenFromFile(@"E:\arcgis\Engine\数据", 0) as IFeatureWorkspace;
IFeatureClass pFClass = pFtWs.OpenFeatureClass("ctour9_Clip");
IFeatureLayer pFtLayer = new FeatureLayerClass();
pFtLayer.Name = "等高线";
pFtLayer.FeatureClass = pFClass;
axMapControl1.AddLayer(pFtLayer as ILayer);
axMapControl1.Refresh();
//启动编辑
pEngineEditor = new EngineEditorClass();
pEngineEditor.StartEditing(pFtWs as IWorkspace, axMapControl1.Map);
pEngineEditor.StartOperation();
//设置目标图层
IEngineEditLayers pEditLayer = pEngineEditor as IEngineEditLayers;
pEditLayer.SetTargetLayer(pFtLayer, 0);
// 设置任务
pEngineEditor.CurrentTask = new CalculatContourTask() as IEngineEditTask;
//草图工具
ICommand pSketch = new ControlsEditingSketchToolClass();
pSketch.OnCreate(axMapControl1.Object);
axMapControl1.CurrentTool = pSketch as ITool;