WinForm 控件的二次开发在管线规划报批中的应用

2023-02-05 13:57时煜姝
经纬天地 2023年6期
关键词:电子报树形插件

朱 律,时煜姝,徐 晗

(1.上海市测绘院,上海 200063;2.自然资源部超大城市自然资源时空大数据分析应用重点实验室,上海 200063)

0 引言

上海市近年来将电子报件纳入现行管线工程规划建设和管理机制,并制定了《上海市管线规划成果数据标准》、《上海市管线工程建设项目规划资源数据标准》等管线工程电子报件数据标准。通过对机制流程进行完善、修订、意见征询和发布,对电子报件进行标准化和规范化,实现了管线数据从CAD 系统转换到GIS 系统,并在基于GIS 系统的管线信息化平台上,实现了对市政管线的统一规划和管理[1]。

从AutoCAD 2006 开始,AutoCAD 增加了.NET API,相较于Lisp、VBA,更加底层、更加灵活;相较于ObjectARX,开发效率更加提高[2]。上海市测绘院按照上海市管线电子报批数据标准规定的图层分层、属性信息、制图格式等要求,在Visual Studio 平台上采用C#.NET 语言开发了基于AutoCAD 系统的管线电子报件插件,支持CAD 的运行版本为AutoCAD 2010。

本文介绍了在工程全覆盖系统管线电子报批插件开发过程中,综合运用树形控件、正则表达式、XRecord 扩展属性等技术实现自定义控件,满足上海市工程全覆盖系统对所有市政管线电子报批的相关要求。

1 适应多种管线图层加载的树形扩展控件

树形控件(TreeView)能很好地在WinForm 窗体中显示信息的分级视图。插件在树形控件基础上进行二次开发,分级加载各类管线不同的CAD 图层资源并显示在控件中,从而形象地展示电子报件数据标准对于各类管线图层的申报要求。当点击树形控件中的不同节点时,通过自动判断节点的类型,可显示相应的节点中不同图层的详细信息。

为方便用户操作,插件创建了一个派生于树形控件(TreeView)的树形控件扩展类(TreeViewEx),在传统的树形控件的基础上扩展了相应功能:

1)在每一个树形控件元素上都设计一个状态图标CheckBox,该状态图标与用户是否选中了该树形控件元素的结果相匹配;

2)若鼠标点击的位置位于树形控件元素的标签位置,则默认将选中元素下所有的子元素显示,再次点击标签则将所有的子元素隐藏;

3)如果某元素有相关子元素,用户点击该元素的CheckBox,则该元素和其子元素均处于Check 状态;同样,如果取消该元素的Check 状态,则其子元素也均转为unCheck 状态。

该控件能很好地在Winform 窗体中显示具体管线图层信息的分级视图,树形扩展控件的实现界面如图1 所示。

图1 包含所有市政管线分类的自定义树形扩展控件

2 基于XReocrd技术的属性录入自定义控件

管线电子报件数据标准中按照管线的不同性质、用途、建设形态等,规定了给水管、排水管、雨水调蓄管道、电力管线、燃气管、通信管线、特种管线、合杆管道、综合管廊和其他管道等10 大类管线。其中电力管线又细分为电力排管、电力隧道、电力电缆、电力架空线4 类;通信管线细分为通信架空线、通信管道、通信直埋光电缆或直埋管3 小类。每类管线和管线附属设施的扩展属性都各不相同。每类管线的属性数量也很多,如综合管廊包含入廊种类等四十余个属性。插件在AutoCAD 的XRecord技术的基础上,通过对WinForm 控件的二次开发,实现了属性录入界面自适应加载各类管线的不同属性。

XRecord 是AutoCAD 提供的扩展纪录对象,它与AutoCAD 早期提供的扩展数据(XData)类似,可为用户提供一种记录和管理一个图形单元的附加数据的途径。与早期的XData 对象相比,XRecord不再有尺寸和秩序的严格要求,而且支持了CAD 全部的群代码。这一改变使利用XRecord 存储元件的参数和元件之间的关系变得可行。相对于使用XData 对象,使用XRecord 对象的优点是它们不仅可以附加到任何特定实体或表对象,也可以附加到文档本身,前者被称为对象扩展词典,后者被称为命名对象词典。此外,XData 对可以存储在实体或表中的数据的大小有一定的限制,而XRecord 对象对数据存储没有任何大小限制。综上所述,插件使用XRecord 对象扩展辞典和命名对象辞典来实现管线属性的录入和批量更新。

2.1 基于XRecord命名对象词典的公共属性录入控件

根据标准,所有管线都包含了项目名称、项目建设单位、工程阶段等公共属性,插件设计了这些属性的录入界面,方便用户将这些信息以XRecord命名对象词典方式存储在CAD 文件根目录中。

管线电子报件插件实现了只要打开CAD,便能自动加载这些公有属性,辅助用户避免对公有属性的重复录入,降低人力和时间成本。首先添加属性信息图形对象的命名对象词典,再将自定义好的属性信息通过ResultBuffer 添加到扩展词典的扩展记录中,最后通过扩展词典的SetAt 方法即可完成对公共属性的扩展存储。项目名称、项目建设单位等公共属性录入界面如图2 所示。

图2 基于XRecord 命名对象词典的公共属性录入界面

2.2 基于XRecord对象扩展词典的实体属性录入控件

针对数据庞杂、内容丰富的管线属性,插件将各属性字段编码,以指定顺序用连接符“$”连接,存入一个DXF 组码值,不需要占用多个DXF 组码,再将自定义好的属性值添加到图形对象实体属性信息的ResultBuffer 数据对中,最后将其赋值到选中图形对象的XRecord 扩展记录中[3]。通过定义属性管理文档,从左往右依次设置属性代码、属性项、图层类别编码、控件类别编码、选项集合,可以管理分门别类的各个管线属性。然后通过读取并配置属性管理文档,便可以实现在WinForm 控件中自动加载各类管线的不同属性,便于后续CAD 图元与GIS属性数据的相互连接与管理[4]。

以综合管廊为例,属性录入界面如图3 所示。其中项目名称、项目建设单位、项目编制单位、批文号、工程阶段等公共属性已经实现了利用XRecord 命名对象词典提前录入,打开属性界面便能自动加载。

图3 基于XRecord 对象扩展词典的综合管廊属性录入界面

3 控件内容编辑二次开发

3.1 基于正则表达式的属性编辑控制

除了规定各类管线属性的类型、宽度之外,管线电子报件插件对很多属性内容的录入格式也做出了相关要求,如管径必须是“字母+数字”格式,电力电缆根数、通信光缆根数、孔数、回路数、直埋根数等必须为数字,管位距离必须保留一位小数等。为了使用户在属性界面录入的信息符合标准的格式要求,必须对录入信息进行分析和检测。

正则表达式可以通过属性界面的输入内容与一系列的特殊字符构建的匹配模式进行比较,来判别对象是否符合标准中对录入信息的格式要求。利用正则表达式能解决一般情况下需写一个验证函数才能解决的问题,并且能节省大量的时间,包括编写代码的时间和CPU 运算时间。插件利用正则表达式,来匹配符合该模式的所有属性输入项,达到了检测录入信息有效性的目的[5]。与部分属性格式要求等效的正则表达式如表1 所示。

表1 部分属性的格式要求以及匹配的正则表式

插件对部分属性录入不符合正则表达式要求的提示界面如图4 所示。

图4 基于正则表达式的管线录入属性规范性检查

综上所述,在C#.NET 的属性界面中设置与属性格式要求匹配的正则表达式就能很简洁地实现用户的输入验证,而传统的方法往往更加困难和低效。所以在属性录入界面中如遇到有关用户输入信息验证的应用时,都应该首先考虑用正则表达式,代替编写验证信息的代码。插件利用正则表达式,大大地提升了开发效率。

3.2 下拉列表控件框(ComboBox)实现多选功能扩展

在管线属性的录入过程中,经常会遇到有些属性项可以多选的情况,如综合管廊的入廊种类属性。由于综合管廊里的入廊管类一般不止一种,所以根据实际情况,很多时候都会在电力管线、给水管线、通信管线等选项中进行多重选择。因此,下拉列表控件(ComboBox)自带的单选功能就不能满足多种属性录入的要求,如果使用CheckBox 或者CheckListBox 组件会破坏WinForm 组件程序化加载设计美感和降低效率。

针对上述情况,插件在下拉列表控件(ComboBox)基础上实现了组件扩展(ComboBoxEx):

1)首先设置DrawMode 属性为OwnerDrawFixed,这样才可能让重写的方法起作用;

2)重写OnDropDown 方法,实现下拉框选项的自适应加载,并且将下拉框内容用BringToFront 方法始终显示在界面最前端;

3)重写MouseUp 方法,实现按Ctrl 键即可完成选项多选的功能;

4)重写OnKeyUp 和KeyDown 方法,实现多选完成后按回车键完成选择,并将已选内容全部显示在TextBox 内。下拉列表控件实现多选功能扩展的实现效果如图5 所示。

图5 下拉列表控件实现多选功能扩展

4 结语

本文着重介绍了上海市管线电子报件CAD 插件在开发过程中,为实现管线不同图层加载的可视化分级展示、属性录入内容强控、下拉列表控件支持多选等功能,综合利用正则表达式、XRecord 扩展属性等技术,在AutoCAD 系统平台基于WinForm 原生控件自定义二次开发,开发界面丰富、属性齐全,满足了管线电子报批数据标准对管线电子报件申报DWG 文件的格式要求。

猜你喜欢
电子报树形插件
花光卉影
苹果高光效树形改造综合配套技术
自编插件完善App Inventor与乐高机器人通信
猕猴桃树形培养和修剪技术
休眠季榆叶梅自然开心树形的整形修剪
基于jQUerY的自定义插件开发
电子报的评价与利用
MapWindowGIS插件机制及应用
基于Revit MEP的插件制作探讨