4

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

 2 years ago
source link: https://www.cnblogs.com/mytudousi/p/17003741.html
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client

1、CommandUIs部分

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

image1.png

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

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

146887-20221225103955166-914535707.png

2、Controls部分

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

image4.png

146887-20221225103955261-2075278939.png

3、常用命令和工具

image6.png

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

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的类。例如系统中的出图模板设计功能。

146887-20221225103955141-2096874786.png

这个功能里面,我们继承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)));

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

146887-20221225103955221-948078156.png

我们继承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)));

About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK