循序渐进 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

相关文章

基于Python开发电脑定时关机工具

《基于Python开发电脑定时关机工具》这篇文章主要为大家详细介绍了如何基于Python开发一个电脑定时关机工具,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录1. 简介2. 运行效果3. 相关源码1. 简介这个程序就像一个“忠实的管家”,帮你按时关掉电脑,而且全程不需要你多做

Java中的Opencv简介与开发环境部署方法

《Java中的Opencv简介与开发环境部署方法》OpenCV是一个开源的计算机视觉和图像处理库,提供了丰富的图像处理算法和工具,它支持多种图像处理和计算机视觉算法,可以用于物体识别与跟踪、图像分割与... 目录1.Opencv简介Opencv的应用2.Java使用OpenCV进行图像操作opencv安装j

基于Qt开发一个简单的OFD阅读器

《基于Qt开发一个简单的OFD阅读器》这篇文章主要为大家详细介绍了如何使用Qt框架开发一个功能强大且性能优异的OFD阅读器,文中的示例代码讲解详细,有需要的小伙伴可以参考一下... 目录摘要引言一、OFD文件格式解析二、文档结构解析三、页面渲染四、用户交互五、性能优化六、示例代码七、未来发展方向八、结论摘要

在 VSCode 中配置 C++ 开发环境的详细教程

《在VSCode中配置C++开发环境的详细教程》本文详细介绍了如何在VisualStudioCode(VSCode)中配置C++开发环境,包括安装必要的工具、配置编译器、设置调试环境等步骤,通... 目录如何在 VSCode 中配置 C++ 开发环境:详细教程1. 什么是 VSCode?2. 安装 VSCo

IDEA常用插件之代码扫描SonarLint详解

《IDEA常用插件之代码扫描SonarLint详解》SonarLint是一款用于代码扫描的插件,可以帮助查找隐藏的bug,下载并安装插件后,右键点击项目并选择“Analyze”、“Analyzewit... 目录SonajavascriptrLint 查找隐藏的bug下载安装插件扫描代码查看结果总结Sona

C#图表开发之Chart详解

《C#图表开发之Chart详解》C#中的Chart控件用于开发图表功能,具有Series和ChartArea两个重要属性,Series属性是SeriesCollection类型,包含多个Series对... 目录OverviChina编程ewSeries类总结OverviewC#中,开发图表功能的控件是Char

鸿蒙开发搭建flutter适配的开发环境

《鸿蒙开发搭建flutter适配的开发环境》文章详细介绍了在Windows系统上如何创建和运行鸿蒙Flutter项目,包括使用flutterdoctor检测环境、创建项目、编译HAP包以及在真机上运... 目录环境搭建创建运行项目打包项目总结环境搭建1.安装 DevEco Studio NEXT IDE

Python开发围棋游戏的实例代码(实现全部功能)

《Python开发围棋游戏的实例代码(实现全部功能)》围棋是一种古老而复杂的策略棋类游戏,起源于中国,已有超过2500年的历史,本文介绍了如何用Python开发一个简单的围棋游戏,实例代码涵盖了游戏的... 目录1. 围棋游戏概述1.1 游戏规则1.2 游戏设计思路2. 环境准备3. 创建棋盘3.1 棋盘类

这15个Vue指令,让你的项目开发爽到爆

1. V-Hotkey 仓库地址: github.com/Dafrok/v-ho… Demo: 戳这里 https://dafrok.github.io/v-hotkey 安装: npm install --save v-hotkey 这个指令可以给组件绑定一个或多个快捷键。你想要通过按下 Escape 键后隐藏某个组件,按住 Control 和回车键再显示它吗?小菜一碟: <template

Hadoop企业开发案例调优场景

需求 (1)需求:从1G数据中,统计每个单词出现次数。服务器3台,每台配置4G内存,4核CPU,4线程。 (2)需求分析: 1G / 128m = 8个MapTask;1个ReduceTask;1个mrAppMaster 平均每个节点运行10个 / 3台 ≈ 3个任务(4    3    3) HDFS参数调优 (1)修改:hadoop-env.sh export HDFS_NAMENOD