ArcObjects SDK开发 022 开发框架搭建-FrameWorkUI包设计

1、CommandUIs部分

这部分主要是定义承载Command和Tool的具体UI。如下图所示。

ArcObjects SDK开发 022 开发框架搭建-FrameWorkUI包设计

以CommandUI结尾的这几个类都是继承了Framework.Engine里面的ICommandUI接口,这样我们定义的Command和Tool就可以和这些UI绑定到一起了。

其中BarButtonItemCommandUI是DEV库中普通的按钮,BarCheckItemCommandUI是DEV库中由选中状态的按钮,MenuItemCommandUI是菜单按钮,一般右键菜单项会用这个UI,ToolStripMenuItemCommandUI是Winform下右键菜单项,在TocControl图层树中的右键菜单会采用这个按钮项。

ArcObjects SDK开发 022 开发框架搭建-FrameWorkUI包设计

2、Controls部分

主要定义了常用的UI。如下图所示。

ArcObjects SDK开发 022 开发框架搭建-FrameWorkUI包设计

ArcObjects SDK开发 022 开发框架搭建-FrameWorkUI包设计

3、常用命令和工具

ArcObjects SDK开发 022 开发框架搭建-FrameWorkUI包设计

我们看下最常用的地图放大工具的定义。

public class MapZoomInTool : MapTool {     private readonly ESRI.ArcGIS.SystemUI.ITool _EsriTool = null;     public MapZoomInTool(MapApplication pMapApplication)         : base(pMapApplication)     {         this._EsriTool = new ControlsMapZoomInToolClass();         this.SetIcon(CommandIconSize.IconSize16, "MapTools/Res/MapZoomIn16.png");     }      /// <summary>     /// 激活执行的函数     /// </summary>     public override void OnActive()     {         base.OnActive();         (this._EsriTool as ESRI.ArcGIS.SystemUI.ICommand).OnCreate(this.MapApplication.ActiveControl);         this.MapApplication.ActiveControl.CurrentTool = this._EsriTool;     }      /// <summary>     /// 工具失活执行的函数     /// </summary>     public override void OnDeActivate()     {         base.OnDeActivate();         this.MapApplication.ActiveControl.CurrentTool = null;     }      /// <summary>     /// 鼠标按下执行的函数     /// </summary>     /// <param name="button"></param>     /// <param name="shift"></param>     /// <param name="x"></param>     /// <param name="y"></param>     public override void OnMouseDown(int button, int shift, int x, int y)     {         if (button == 4)         {             this.MapApplication.AxControlPan();         }         base.OnMouseDown(button, shift, x, y);     } }

这就意味着,只要继承实现了MapApplication这个类,就可以直接使用该工具。例如我们的系统首页,定义了一个MapApplication实例,那么可以在此基础上初始化地图放大工具。

我们系统里面其他功能也要用这个工具的时候,也可以初始化一个MapApplication,或者实现一个继承MapApplication的类。例如系统中的出图模板设计功能。

ArcObjects SDK开发 022 开发框架搭建-FrameWorkUI包设计

这个功能里面,我们继承MapApplication,定义了LayoutDesignApplication。如下图所示。

public class LayoutDesignApplication : MapApplication {     /// <summary>     /// 版式设计主程序类     /// </summary>     /// <param name="pAxMapControl"></param>     /// <param name="pAxPageLayoutControl"></param>     public LayoutDesignApplication(AxMapControl pAxMapControl, AxPageLayoutControl pAxPageLayoutControl)         : base(pAxMapControl, pAxPageLayoutControl)     {         this.LayoutDesign = new LayoutDesign();     }      /// <summary>     /// 当前打开的 模板文件路径     /// </summary>     public string ShmFilePath { get; set; } = "";      /// <summary>     /// 版式设计对象     /// </summary>     public LayoutDesign LayoutDesign { get; private set; } = null;      /// <summary>     /// 当前打开地图的元数据     /// </summary>     public GeoChemMetaData GeoChemMetaData { get; private set; }      /// <summary>     /// 得到页面布局对象     /// </summary>     public IPageLayout PageLayout     {         get         {             return this.PageLayoutControl.PageLayout;         }     }     /// <summary>     /// 加载属性面板的UI     /// </summary>     public Border PropertyBorder { get; set; } = null; }

添加工具的代码如下。

this.UI_Tool_Bar.Items.Add(new BarButtonItemCommandUI(new OpenMxdCommand(this._LayoutDesignAplication))); this.UI_Tool_Bar.Items.Add(new BarButtonItemCommandUI(new OpenShmCommand(this._LayoutDesignAplication))); this.UI_Tool_Bar.Items.Add(new BarButtonItemCommandUI(new AddDataCommand(this._LayoutDesignAplication))); this.UI_Tool_Bar.Items.Add(new BarButtonItemCommandUI(new SaveShmCommand(this._LayoutDesignAplication))); this.UI_Tool_Bar.Items.Add(new BarButtonItemCommandUI(new SaveAsShmCommand(this._LayoutDesignAplication)));  this.UI_Tool_Bar.Items.Add(new BarItemLinkSeparator()); this.UI_Tool_Bar.Items.Add(new BarButtonItemCommandUI(new MapFrameCommand(this._LayoutDesignAplication))); this.UI_Tool_Bar.Items.Add(new BarButtonItemCommandUI(new MapGridCommand(this._LayoutDesignAplication)));  this.UI_Tool_Bar.Items.Add(new BarItemLinkSeparator()); this.UI_Tool_Bar.Items.Add(new BarButtonItemCommandUI(new ResTableCommand(this._LayoutDesignAplication))); this.UI_Tool_Bar.Items.Add(new BarButtonItemCommandUI(new ClassTableCommand(this._LayoutDesignAplication))); this.UI_Tool_Bar.Items.Add(new BarButtonItemCommandUI(new ClassHistogramCommand(this._LayoutDesignAplication))); this.UI_Tool_Bar.Items.Add(new BarButtonItemCommandUI(new HistogramMapCommand(this._LayoutDesignAplication))); this.UI_Tool_Bar.Items.Add(new BarButtonItemCommandUI(new NorthArrowCommand(this._LayoutDesignAplication))); this.UI_Tool_Bar.Items.Add(new BarButtonItemCommandUI(new ScaleBarCommand(this._LayoutDesignAplication))); this.UI_Tool_Bar.Items.Add(new BarButtonItemCommandUI(new LegendCommand(this._LayoutDesignAplication))); this.UI_Tool_Bar.Items.Add(new BarButtonItemCommandUI(new TitleCommand(this._LayoutDesignAplication))); this.UI_Tool_Bar.Items.Add(new BarButtonItemCommandUI(new PointTextTool(this._LayoutDesignAplication))); this.UI_Tool_Bar.Items.Add(new BarButtonItemCommandUI(new PictureCommand(this._LayoutDesignAplication))); this.UI_Tool_Bar.Items.Add(new BarButtonItemCommandUI(new NeatlineItemCommand(this._LayoutDesignAplication)));  this.UI_Tool_Bar.Items.Add(new BarItemLinkSeparator()); SelectTool myPLDSelectTool = new SelectTool(this._LayoutDesignAplication); this.UI_Tool_Bar.Items.Add(new BarCheckItemCommandUI(myPLDSelectTool)); this._LayoutDesignAplication.SelectTool = myPLDSelectTool;  this.UI_Tool_Bar.Items.Add(new BarCheckItemCommandUI(new PageZoomInTool(this._LayoutDesignAplication))); this.UI_Tool_Bar.Items.Add(new BarCheckItemCommandUI(new PageZoomOutTool(this._LayoutDesignAplication))); this.UI_Tool_Bar.Items.Add(new BarCheckItemCommandUI(new PagePanTool(this._LayoutDesignAplication))); this.UI_Tool_Bar.Items.Add(new BarButtonItemCommandUI(new PageZoomInFixedCommand(this._LayoutDesignAplication))); this.UI_Tool_Bar.Items.Add(new BarButtonItemCommandUI(new PageZoomOutFixedCommand(this._LayoutDesignAplication))); this.UI_Tool_Bar.Items.Add(new BarButtonItemCommandUI(new PageZoomWholePageCommand(this._LayoutDesignAplication))); this.UI_Tool_Bar.Items.Add(new BarButtonItemCommandUI(new PageZoom100PercentCommand(this._LayoutDesignAplication))); this.UI_Tool_Bar.Items.Add(new BarButtonItemCommandUI(new PageZoomBackCommand(this._LayoutDesignAplication))); this.UI_Tool_Bar.Items.Add(new BarButtonItemCommandUI(new PageZoomForwardCommand(this._LayoutDesignAplication))); this.UI_Tool_Bar.Items.Add(new BarItemLinkSeparator()); this.UI_Tool_Bar.Items.Add(new BarButtonItemCommandUI(new ViewExportPicCommand(this._LayoutDesignAplication)));

 

再例如,布点的这个模块。

ArcObjects SDK开发 022 开发框架搭建-FrameWorkUI包设计

我们继承MapApplication定义了DeployApplication,如下图所示。

public class DeployApplication : MapApplication {     private Project _Project = null;     private object _SelectObjectOnProjectTree = null;     private IFeature _SelectPointFeature = null;      /// <summary>     /// 采样点布置主App     /// </summary>     /// <param name="pAxMapControl"></param>     /// <param name="pAxPageLayoutControl"></param>     public DeployApplication(AxMapControl pAxMapControl, AxPageLayoutControl pAxPageLayoutControl)         : base(pAxMapControl, pAxPageLayoutControl)     {         this.EngineEditor = new EngineEditorClass();     }      /// <summary>     /// ArcEngine编辑类     /// </summary>     public EngineEditorClass EngineEditor { get; private set; }      /// <summary>     /// 当前工程对象     /// </summary>     public Project Project     {         get         {             return this._Project;         }         set         {             this._Project = value;             this.OnProjectChanged?.Invoke(this, new EventArgs());         }     }      /// <summary>     /// 得到或设置树上选择的对象     /// </summary>     public object SelectObjectOnWorkZoneTree     {         get { return this._SelectObjectOnProjectTree; }         set         {             this._SelectObjectOnProjectTree = value;             this.OnSelectObjectOnProjectTreeChanged?.Invoke(this, new EventArgs());         }     }      /// <summary>     /// 得到或设置当前选中的采样点要素     /// </summary>     public IFeature SelectPointFeature     {         get         {             return this._SelectPointFeature;         }         set         {             this._SelectPointFeature = value;             this.OnSelectPointFeatureChanged?.Invoke(this, new EventArgs());         }     }      /// <summary>     /// 触发Map25Sheet信息变化事件     /// </summary>     public void FireMap25SheetInfoChangedEvent()     {         this.OnMap25SheetInfoChanged?.Invoke(this, new EventArgs());     }      /// <summary>     /// 当工程发生变化触发的事件     /// </summary>     public event EventHandler<EventArgs> OnProjectChanged;      /// <summary>     /// 当在树上选中的对象发生变化触发的事件     /// </summary>     public event EventHandler<EventArgs> OnSelectObjectOnProjectTreeChanged;      /// <summary>     /// 当选择的采样点元素发生变化触发的事件     /// </summary>     public event EventHandler<EventArgs> OnSelectPointFeatureChanged;      /// <summary>     /// 当Map25Sheet的信息发生变化后触发的函数     /// </summary>     public event EventHandler<EventArgs> OnMap25SheetInfoChanged; }

添加工具如下。

//初始化Application this._DeployApplication = new DeployApplication(myAxMapControl, myAxPageLayoutControl); this._DeployApplication.MainWindow = this; this._DeployApplication.OnProjectChanged += Application_OnWorkZoneChanged; this._DeployApplication.OnSelectObjectOnProjectTreeChanged += _Application_OnSelectObjectOnWorkZoneTreeChanged; this._DeployApplication.OnSelectPointFeatureChanged += Application_OnSelectPointFeatureChanged; this._DeployApplication.OnMap25SheetInfoChanged += Application_OnMap25SheetInfoChanged;  this.UI_Tool_Bar.Items.Add(new BarButtonItemCommandUI(new ProjectNewCommand(this._DeployApplication))); ProjectOpenCommand myWorkZoneOpenCommand = new ProjectOpenCommand(this._DeployApplication); this.UI_Tool_Bar.Items.Add(new BarButtonItemCommandUI(myWorkZoneOpenCommand)); this.UI_Tool_Bar.Items.Add(new BarButtonItemCommandUI(new FrameworkUI.Files.AddDataCommand(this._DeployApplication))); this.UI_Tool_Bar.Items.Add(new BarItemLinkSeparator()); this.UI_Tool_Bar.Items.Add(new BarCheckItemCommandUI(new FrameworkUI.MapTools.MapZoomInTool(this._DeployApplication))); this.UI_Tool_Bar.Items.Add(new BarCheckItemCommandUI(new FrameworkUI.MapTools.MapZoomOutTool(this._DeployApplication))); FrameworkUI.MapTools.MapPanTool myMapPanTool = new FrameworkUI.MapTools.MapPanTool(this._DeployApplication); this.UI_Tool_Bar.Items.Add(new BarCheckItemCommandUI(myMapPanTool)); this._DeployApplication.CrruteTool = myMapPanTool; this.UI_Tool_Bar.Items.Add(new BarButtonItemCommandUI(new FrameworkUI.MapTools.MapZoomInFixedCommand(this._DeployApplication))); this.UI_Tool_Bar.Items.Add(new BarButtonItemCommandUI(new FrameworkUI.MapTools.MapZoomOutFixedCommand(this._DeployApplication))); this.UI_Tool_Bar.Items.Add(new BarButtonItemCommandUI(new FrameworkUI.MapTools.MapFullExtentCommand(this._DeployApplication))); this.UI_Tool_Bar.Items.Add(new BarButtonItemCommandUI(new FrameworkUI.MapTools.MapZoomBackCommand(this._DeployApplication))); this.UI_Tool_Bar.Items.Add(new BarButtonItemCommandUI(new FrameworkUI.MapTools.MapZoomForwardCommand(this._DeployApplication))); this.UI_Tool_Bar.Items.Add(new BarItemLinkSeparator()); this.UI_Tool_Bar.Items.Add(new BarCheckItemCommandUI(new FrameworkUI.MapTools.MeasureTool(this._DeployApplication))); this.UI_Tool_Bar.Items.Add(new BarItemLinkSeparator()); this.UI_Tool_Bar.Items.Add(new BarCheckItemCommandUI(new Map5SheetSelectTool(this._DeployApplication))); this.UI_Tool_Bar.Items.Add(new BarCheckItemCommandUI(new FrameworkUI.MapTools.FeaturesClearSelectCommand(this._DeployApplication) { Caption = "Clear Select" })); this.UI_Tool_Bar.Items.Add(new BarButtonItemCommandUI(new MapSheetLabelCommand(this._DeployApplication))); this.UI_Tool_Bar.Items.Add(new BarButtonItemCommandUI(new SamplePointLabelCommand(this._DeployApplication))); this.UI_Tool_Bar.Items.Add(new BarButtonItemCommandUI(new Map5TerrainViewCommand(this._DeployApplication))); this.UI_Tool_Bar.Items.Add(new BarItemLinkSeparator()); this.UI_Tool_Bar.Items.Add(new BarButtonItemCommandUI(new Map25AutoPointCommand(this._DeployApplication))); this.UI_Tool_Bar.Items.Add(new BarButtonItemCommandUI(new Map25ClearPointCommand(this._DeployApplication))); this.UI_Tool_Bar.Items.Add(new BarItemLinkSeparator()); this.UI_Tool_Bar.Items.Add(new BarButtonItemCommandUI(new EditorStartCommand(this._DeployApplication))); this.UI_Tool_Bar.Items.Add(new BarCheckItemCommandUI(new EditorEditTool(this._DeployApplication))); this.UI_Tool_Bar.Items.Add(new BarCheckItemCommandUI(new EditorNewPointTool(this._DeployApplication))); this.UI_Tool_Bar.Items.Add(new BarButtonItemCommandUI(new EditorSaveCommand(this._DeployApplication))); this.UI_Tool_Bar.Items.Add(new BarButtonItemCommandUI(new EditorStopCommand(this._DeployApplication))); this.UI_Tool_Bar.Items.Add(new BarItemLinkSeparator()); this.UI_Tool_Bar.Items.Add(new BarButtonItemCommandUI(new Map25LoadUnitCommand(this._DeployApplication))); this.UI_Tool_Bar.Items.Add(new BarButtonItemCommandUI(new Map25EncodeCommand(this._DeployApplication))); this.UI_Tool_Bar.Items.Add(new BarButtonItemCommandUI(new Map25ExportCommand(this._DeployApplication)));

发表评论

相关文章