循序渐进 SuperMap iDesktop 8C 插件开发

2024-02-25 11:18

本文主要是介绍循序渐进 SuperMap iDesktop 8C 插件开发,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

作者: 小卒

发现很多用户在使用SuperMap iDesktop 8C时,由于行业需求的不同,使得他们不仅仅满足于现有的桌面环境,想进行扩展开发定制更适用自己项目的功能和插件,但是好多都是小白级别的,对于插件开发一头雾水,不知从何下手。接下来我就简单的谈谈如何进行SuperMap iDesktop 8C的插件开发。
1、认识 SuperMap iDesktop 8C
虽然一些SuperMap用户了解SuperMap iDesktop 8C,但是我在这里还是需要简单介绍下SuperMap iDesktop 8C,对于插件开发的学习,了解SuperMap iDesktop 8C是很有必要的。SuperMap iDesktop 8C 是一款企业级插件式桌面GIS应用与开发平台,可以高效的进行各种GIS数据处理、分析、二三维制图及发布等操作。基于它可以快速搭建自己的桌面GIS应用平台。 SuperMap iDesktop 8C 是通过 SuperMap iObjects .NET 8C 、桌面核心库和 .NET Framework 4.0 构建的插件式 GIS 应用,能够满足用户的不同需求。 SuperMap iDesktop 8C 分为 x64(64位)和 x86(32位)两个产品。
这里写图片描述
对于SuperMap iDesktop 8C来说,可以设置自己的工作环境,工作环境保存的路径为SuperMap iDesktop 8C的安装目录\WorkEnvironment\Default中的config文件中,对于插件开发,搭建好的环境必须要保存在该目录下,在SuperMap桌面中才可以看到,所搭建好的工作环境,比如新添加的按钮、下拉框等等。但是这个只是一个框架,不会实现功能,其要实现功能,还需要一个运行库(.DLL)文件,该文件存放在SuperMap iDesktop 8C的安装目录\Bin\Plugins下对应的文件夹中。综上所述,插件的配置,必须要有两个文件:config文件和运行库(.DLL)文件。
2、配置插件
我们时常拿一些别人做好的插件,来应用在自己的工程中,对于SuperMap iDesktop 8C如何配置插件:一般我们拿到的是dll和config文件,我们只需要将其放在上面所讲的位置即可,有时我们拿到的只是一个dll文件,这时我们需要编写config文件,然后将其放在对象的路径即可。
3、开发基础-关键对象
•Applicaton
是应用程序的定义。是组成桌面的基础。
Application 类对象管理的内容包括:工作空间(Workspace),用于管理应用程序内的插件的插件管理器(PluginManager),代码段编译执行器(IScript),应用程序的主窗口(IFormMain),应用程序的启动界面(ISplashForm)以及应用程序的输出信息方面的管理。
这里写图片描述
图:Application 类结构图
Application 类中提供了两个全局对象,分别为 Application.ActiveApplication 和 Application.ActiveForm,用于获取应用程序当前活动的 Application 和当前活动的窗口。
•插件相关对象模型
每一个应用程序都包含了一个插件管理器(PluginManager),用于管理应用程序内的插件。
这里写图片描述
图:插件相关对象模型
•窗体相关对象模型
窗体部分的对象模型主要提供的功能包括:多文档的支持、多种类型窗口的支持、子窗口的管理、各个窗口如何对外提供功能、浮动窗口的支持和管理以及主题外观设计等。在窗体设计上,SuperMap iDesktop 8C提供一个统一的基础接口IForm
这里写图片描述
图:窗体相关对象模型
•Ribbon 控件相关对象模型
SuperMap iDesktop 8C实现了界面和功能的分离,各类Ribbon 控件的生成由内部实现。
这里写图片描述
图:Ribbon 控件相关对象模型
4、注册/反注册桌面开发环境
有些客户时常问,为什么我的VS新建项目时没找到“SuperMap Desktop Plugin”。
这里写图片描述
这主要是因为没有注册桌面开发环境,SuperMap iDesktop 8C 产品提供了一个注册工具,该工具可以在 Visual Studio 中集成一系列桌面开发需要使用的环境。注册工具在产品中的位置为:“安装目录/Tools/SuperMap.Tools.RegisterTemplate.exe”。详细内容查看联机帮助中的注册/反注册桌面开发环境
5、快速入门
开发思路:分析功能需求—确定扩展方式—界面设计—确定使用的模块-对象-接口—生成插件相关文件
现在我们以 Visual Studio 2012 为例进行介绍,首先我们做一个简单的输出数据集范围的程序:在【数据】选项卡-【数据集】组中增加一个功能按钮“输出数据集范围”,把当前选中的数据集范围,输出到输出窗口中:
这里写图片描述
1.首先启动 Visual Studio 2012新建工程。
执行“文件”->“新建项目”弹出下图窗口,“项目类型”选择“Visual C#”,“模板”选择“SuperMap Desktop Plugin”。设置“名称”,并选择一个工程存放路径,然后单击“确定”按钮新建工程。
这里写图片描述
2.更改项目属性
用SuperMap Deskpro Plugin模板新建的项目,默认的项目属性均已配置好,包括项目输出路径、调试状态下启用的外部程序和编译时配置文件复制到的位置等,一般情况下不需要修改。但本例中将要介绍用SUperMap iDesktop 8C的“工作环境设计”功能配置界面,这样便不需要使用.config文件配置界面。请按如下步骤取消.config文件的作用。
1)、选择工程的属性,弹出对话框
2)、选择“生成”选项卡,设置输出路径为SuperMap iDesktop 8C的安装目录\Bin\Plugins下对应的文件夹中
3)、选择生成事件选项卡,将“后期生成事件命令行(0):”中已有的字符串清空,单击工具栏上的的保存按钮保存配置信息。(这个里面的内容是生成工程时自动在SuperMap iDesktop 8C的安装目录\WorkEnvironment\Default中生成对应的config文件。)
这里写图片描述
3.添加引用
本例中需要用到SuperMap iDesktop 8C的组件,因此需要在写代码前先将SuperMap iDesktop 8C组件的引用添加到项目中,添加方法为右击“解决方案资源管理器”窗口中的“引用”项,在弹出的快捷菜单中选择“添加引用”。
这里写图片描述
4.实现Run函数
Run函数是插件程序启动后的入口程序,即程序的入口点
新建类MyCtrlAction,在该类中重载public override void Run()方法,即当控件事件被触发时,将调用对象的Run() 方法,添加代码如下:

namespace DesktopPlugin1
{class MyCtrlAction : CtrlAction{override public void Run(){//获得选择的数据集Dataset sedataset = SuperMap.Desktop.Application.ActiveDatasets[0];string datasetname = sedataset.Name;//获得数据集的范围Rectangle2D dsBounds = sedataset.Bounds;string boundsleft = Math.Round(Convert.ToDecimal(dsBounds.Left), 4).ToString();string boundsright = Math.Round(Convert.ToDecimal(dsBounds.Right), 4).ToString();;string boundstop = Math.Round(Convert.ToDecimal(dsBounds.Top), 4).ToString();string boundsbuttom =Math.Round(Convert.ToDecimal( dsBounds.Bottom),4).ToString();//输出数据集范围SuperMap.Desktop.Application.ActiveApplication.Output.Output(datasetname +
"数据集范围:left=" + boundsleft + "right=" + boundsright+ "top=" + boundstop + "bottom=" + boundsbuttom);}}
}

5.配置桌面环境
1)首先我们打开SuperMap iDesktop 8C,点击自定义界面设计选项卡中的工作环境设计。
这里写图片描述
2)右击功能区下的“数据”选项卡,新建控件组,在该控件组下右键“新建按钮”。然后选择插件、动态库、绑定类等等。单击“确定”按钮结束工作环境配置。
这里写图片描述
配置好的config文件内容如下:

<?xml version="1.0" encoding="utf-8"?>
<plugin xmlns="http://www.supermap.com.cn/desktop" name="DesktopPlugin1" author="DesktopPlugin1" url="www.supermap.com.cn"description="DesktopPlugin1 Plugin" helpLocalRoot="" helpOnlineRoot="">
<runtime assemblyName="./Plugins/DesktopPlugin1/DesktopPlugin1.dll" className="DesktopPlugin1.DesktopPlugin" loadOrder="2000" enabled="True" />
<!--Ribbon上自定义各种控件-->
<toolbox>
<ribbon>
<tabs>
<tab index="3" id="DataProcess" label="数据" formClass="" visible="true">
<group index="5" id="RibbonGroup" label="数据集" image="" visible="true">
<button index="0" label="数据集范围" visible="true" checkState="false" assemblyName="Plugins\DesktopPlugin1\DesktopPlugin1.dll"onAction="DesktopPlugin1.MyCtrlAction" size="Small" image="" style="ImageAndText" shortcutKey="" screenTip="" screenTipImage="" helpURL="" />
</group>
</tab>
</plugin>

6.编译并运行程序,如下图所示
这里写图片描述
到这一步,恭喜您已经成为SuperMap iDesktop 8C的初级开发者。
6、曲径通幽处
既然通过上面的入门,我们了解了一个简单插件的实现,接下来我们通过一个范例,来展示在地图、场景窗口中添加logo,而当打开属性窗口时该按钮为灰色。
首先要明白当打开窗体不一样时,按钮是否可用也不一样,这就需要重载函数CtrlAction.Enable(实现ICtrlAction 接口的 Enable() 方法,查看 ICtrlAction.Caller 属性获取的控件对象是否可用)方法和FormControlEvents. Activated 方法(响应子窗体激活后的事件实现)。代码如下:

//控件对象是否可用
public override bool Enable(){ return isenable;}//响应子窗体激活后的事件实现
public override void Activated(object sender, EventArgs e){ formmap = SuperMap.Desktop.Application.ActiveForm as IFormMap;formscene = SuperMap.Desktop.Application.ActiveForm as IFormScene;formtabular = SuperMap.Desktop.Application.ActiveForm as IFormSuperTabular;if (formtabular != null){isenable = false;}if (formmap != null || formscene != null){isenable = true;}}

结果如下:
这里写图片描述
插件小常识:
A.右键菜单
有客户时常问,我如何点击地图右键的时候,弹出我自己的菜单,归根结底还是config配置的问题,让我们来看一个范例:功能还是入门程序的功能,有两种方法:
1.可以通过配置桌面环境的方法来实现,首先点击“工作环境设计”,然后找到“右键菜单”下的“地图窗口_地图”,在“地图浏览”右键添加“数据集范围”的按钮,再设置动态库和绑定类,设置完成保存。如图所示:
这里写图片描述
2.打开工作环境设计窗体,找到“右键菜单”下的“地图窗口_地图”,再点击“地图浏览”节点,可以看到对应的插件是“mapView”。
这里写图片描述
这时就关闭SuperMap iDesktop 8C,在SuperMap iDesktop 8C的安装目录\WorkEnvironment\Default中找到SuperMap.Desktop.MapView.config文件,打开编辑:
这里写图片描述
可以看到“地图窗口”的索引是12,我们要将其右键菜单添加到该contextmenu中,所要编写的内容如上图红色框中内容所示,其中assemblyName=“绑定的动态库dll”,onAction=“绑定类”。最后保存配置,运行结果如下图:
这里写图片描述

这里写图片描述
B.菜单栏的显示
像有些菜单栏在打开或者激活某个类型的窗口时才弹出,比如打开地图窗口时菜单栏多了如图所示的模块,
这里写图片描述
这就需要在config中设值formclass=“SuperMap.Deskpro.FormMap”。
这里写图片描述
激活场景窗口时弹出飞行管理菜单:
这里写图片描述
C.在插件开发时如何使新建的窗体和SuperMap iDesktop 8C风格保持一致?
在新建窗体时,需要窗体继承UIForm,即可使新建的窗体和Deskpro.NET风格保持一致。比如添加定位点的窗口,该窗口的风格与主窗口的一致:

public partial class FormLocationto : SuperMap.Desktop.UI.UIForm

这里写图片描述
D.在插件开发的过程中,如何获取Ribbon上文本框的内容?
可以通过RibbonManager属性获取到Ribbon控件管理器,然后通过文本框控件索引或者文本框绑定的执行类的类型来获取文本框控件,然后获取到文本框中的内容。
E.SuperMap iDesktop 8C 插件开发时,如何获取Ribbon标签页上的按钮?
通过Application.ActiveApplication.MainForm.RibbonManager.Item的两个重载可以获得所需要的按钮。
F.自定义启动程序
用户不同,可以设置对不同的用户进行插件使用权限的控制。如viewer用户登录成功,则仅加载基础插件,不加载各种高级插件; admin用户登录成功,则加载所有插件。 可以查看联机帮助“自定义启动程序”。范例路径为:SuperMap iDesktop 8C的安装目录\SampleCode\CustomStartUp。

希望这篇博文对大家插件开发的学习有所帮助!

这篇关于循序渐进 SuperMap iDesktop 8C 插件开发的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!


原文地址:
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.chinasem.cn/article/745304

相关文章

MyBatis分页插件PageHelper深度解析与实践指南

《MyBatis分页插件PageHelper深度解析与实践指南》在数据库操作中,分页查询是最常见的需求之一,传统的分页方式通常有两种内存分页和SQL分页,MyBatis作为优秀的ORM框架,本身并未提... 目录1. 为什么需要分页插件?2. PageHelper简介3. PageHelper集成与配置3.

Maven 插件配置分层架构深度解析

《Maven插件配置分层架构深度解析》:本文主要介绍Maven插件配置分层架构深度解析,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧... 目录Maven 插件配置分层架构深度解析引言:当构建逻辑遇上复杂配置第一章 Maven插件配置的三重境界1.1 插件配置的拓扑

Idea插件MybatisX失效的问题解决

《Idea插件MybatisX失效的问题解决》:本文主要介绍Idea插件MybatisX失效的问题解决,详细的介绍了4种问题的解决方法,具有一定的参考价值,感兴趣的可以了解一下... 目录一、重启idea或者卸载重装MyBATis插件(无需多言)二、检查.XML文件与.Java(该文件后缀Idea可能会隐藏

一文教你如何解决Python开发总是import出错的问题

《一文教你如何解决Python开发总是import出错的问题》经常朋友碰到Python开发的过程中import包报错的问题,所以本文将和大家介绍一下可编辑安装(EditableInstall)模式,可... 目录摘要1. 可编辑安装(Editable Install)模式到底在解决什么问题?2. 原理3.

Python+PyQt5开发一个Windows电脑启动项管理神器

《Python+PyQt5开发一个Windows电脑启动项管理神器》:本文主要介绍如何使用PyQt5开发一款颜值与功能并存的Windows启动项管理工具,不仅能查看/删除现有启动项,还能智能添加新... 目录开篇:为什么我们需要启动项管理工具功能全景图核心技术解析1. Windows注册表操作2. 启动文件

使用Python开发Markdown兼容公式格式转换工具

《使用Python开发Markdown兼容公式格式转换工具》在技术写作中我们经常遇到公式格式问题,例如MathML无法显示,LaTeX格式错乱等,所以本文我们将使用Python开发Markdown兼容... 目录一、工具背景二、环境配置(Windows 10/11)1. 创建conda环境2. 获取XSLT

Android开发环境配置避坑指南

《Android开发环境配置避坑指南》本文主要介绍了Android开发环境配置过程中遇到的问题及解决方案,包括VPN注意事项、工具版本统一、Gerrit邮箱配置、Git拉取和提交代码、MergevsR... 目录网络环境:VPN 注意事项工具版本统一:android Studio & JDKGerrit的邮

Python开发文字版随机事件游戏的项目实例

《Python开发文字版随机事件游戏的项目实例》随机事件游戏是一种通过生成不可预测的事件来增强游戏体验的类型,在这篇博文中,我们将使用Python开发一款文字版随机事件游戏,通过这个项目,读者不仅能够... 目录项目概述2.1 游戏概念2.2 游戏特色2.3 目标玩家群体技术选择与环境准备3.1 开发环境3

Go语言开发实现查询IP信息的MCP服务器

《Go语言开发实现查询IP信息的MCP服务器》随着MCP的快速普及和广泛应用,MCP服务器也层出不穷,本文将详细介绍如何在Go语言中使用go-mcp库来开发一个查询IP信息的MCP... 目录前言mcp-ip-geo 服务器目录结构说明查询 IP 信息功能实现工具实现工具管理查询单个 IP 信息工具的实现服

使用Python开发一个带EPUB转换功能的Markdown编辑器

《使用Python开发一个带EPUB转换功能的Markdown编辑器》Markdown因其简单易用和强大的格式支持,成为了写作者、开发者及内容创作者的首选格式,本文将通过Python开发一个Markd... 目录应用概览代码结构与核心组件1. 初始化与布局 (__init__)2. 工具栏 (setup_t