您的位置:首页 > 编程语言 > C#

基于插件技术的GIS应用框架(C# + ArcEngine9.3)(七)

2010-08-04 09:18 621 查看
基于插件技术的GIS应用框架(C# + ArcEngine9.3)(七)
--------------------------插件初始化(3)
上一小节,我们介绍了ICommand类型插件和IAxCombobox类型插件的定义及初始化过程,并以编辑任务列表为例详细剖析了列表框插件的定义及初始化,那么如何实现编辑任务列表从而让草图工具发挥作用呢,下面我们就这个问题进行深入探讨。
首先,我们来看框架中关于地图编辑引擎的声明,这个非常重要,这个编辑引擎实际上类似于ArcEngine中接口IEngineEditor的定义,只是其中的功能完全由自己来实现。
IAxMapEngine接口:
namespace AxeMap.AxeMapEngine.Interface
{
public interface IAxMapEngine
{
///事件代理接口,用以发布工作空间事件
IAxWorkspaceEvents WorkspaceEvents { get; }
/// 地图对象
IMap Map { get; }
/// 当前编辑的工作空间
IWorkspace EditWorkspace { get; set; }
/// 当前编辑的选择集
IEnumFeature EditSelection { get; }
/// 选择集的要素数目
int SelectionCount { get; }
/// 当前的编辑任务,由实现IAxCombobox接口的编辑任务列表进行控制
IAxEditTask CurrentEditTask { get; set; }
/// 当前编辑的图层,由实现IAxCombobox接口的编辑图层列表进行控制
IFeatureLayer CurrentFeatureLayer { get; set; }
/// 当前可撤销的操作
string CurrentUndoName { get; }
/// 当前可重复的操作
string CurrentRedoName { get; }
/// 是否有可用的重复操作
bool HasRedos { get; }
/// HasUndos
bool HasUndos { get; }
/// 是否允许拷贝操作
bool CanCopy { get; }
/// CanCut
bool CanCut { get; }
/// CanPaste
bool CanPaste { get; }
/// CanDelSelection
bool CanDeleteSelection { get; }
/// 编辑引擎是否处于编辑状态
bool IsBeingEdited { get; }
/// 是否有未保存的编辑
bool HasEdits { get; }
void UndoOperation();
void RedoOperation();
void EnableUndoRedo();
void DisableUndoRedo();
bool StartEditing();
bool StartOperation();
bool StopEditing(bool bSave);
bool StopOperation(string sAction);
void SaveEdits();
void AbortOperation();
void OnCreate(IAxApplication hook);
///通过传递编辑任务名称来设置编辑引擎的编辑任务
void SetEditTask(string TaskName);
void Copy();
void Cut();
void Paste();
void DeleteSelection()
}
}
上述关于编辑引擎接口的实现类则包含在框架主程序中,而编辑插件对象只需要调用框架主程序中相应的方法即可实现相应的功能,如剪切命令插件的实现:
public void OnClick()
{
_App.MapEngine.Cut();
}
我们可以看到,剪切命令插件只需要调用编辑引擎的 Cut 方法即可完成剪切操作,而编辑引擎中相应的剪方法如下:
public void Cut()
{
int iFeaCnt, iElmCnt;
if (!CanCut) //根据当前编辑图层中是否设置了编辑器引擎的当前编辑图层以及图层中是否有要素被选中并且编辑引擎处于编辑状态来判断是否可以进行剪切操作,代码就不贴了。
{
return;
}
iFeaCnt = _App.FocusMap.SelectionCount;
iElmCnt = (_App.ActiveView as IGraphicsContainerSelect).ElementSelectionCount;
if (iFeaCnt > 0 )
{
CutSelectedFeatures(); //剪切Feature 具体代码就不贴了
}
if (iElmCnt > 0)
{
CutSelectedElements(); //剪切Element
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: