基于VB的自动绘制立面图程序的设计
2012-09-22冯宏伟罗宏
冯宏伟,罗宏
(大同市勘察测绘院,山西大同 037000)
1 引言
测绘技术发展到今天,测绘软件琳琅满目,功能也日趋完善。但由于测绘技术发展迅速,服务领域不断扩大,相关规范的出台和修订略显滞后,导致各部门对成果要求也不尽相同。许多针对特定功能的软件还存在空白,许多现有软件也需要持续改进。为了适应这种需要,作为测绘技术人员,有必要掌握一种程序设计语言,并能熟练用于解决测绘生产中的实际问题,这已逐渐成为测绘界共识。
在建筑物采光分析测绘中,需提供大量建筑物的立面图,用于建模和后续采光分析。在以往的生产中,主要依靠在CAD平台下手工成图,包括计算图纸尺寸及比例尺、设置绘图环境、外业数据检核及平差、绘制及编辑图形、尺寸标注及文字注记、打印及叠图装订等多个环节。生产效率低下,且容易出错。因此,开发一种自动绘制立面图的程序显得尤为迫切。
本文以VB 6.0为开发环境,运用ActiveX Automation提供的接口进行AutoCAD的二次开发,重点阐述了利用VB控制AutoCAD实现自动绘制立面图的思路和算法。
2 ActiveX Automation对象模型
AutoCAD是最为流行的计算机辅助绘图软件包,具有强大的图形编辑功能和开放性,DWG文件格式成为二维绘图的事实标准格式,几乎所有商业化测图软件都选择AutoCAD作为开发平台或提供与之交互的接口。
Autodesk公司从AutoCAD R14版本开始提供了ActiveX Automation对象模型。ActiveX Automation是Microsoft基于部件对象模型(COM)体系结构开发的一项技术,通过它可以在多种编程环境中编程访问Auto-CAD图形。
ActiveX Automaion提供给控制程序的可编程对象有:图形对象、类型风格对象、结构对象和图形显示对象,甚至AutoCAD程序本身也被看做对象。用VB语言编程,将AutoCAD当成VB程序中的一个图形窗口,对其进行打开、绘图、编辑、打印、关闭等操作十分方便。
VB是目前开发Windows应用程序最为迅速、简洁的程序设计语言,具有功能强大、易于掌握的特点。用VB控制AutoCAD开发自动绘制立面图的程序,是十分有效的手段和方法。
3 编程思路
在分析总结了大量立面测量实践的基础上,得出如下结论:
(1)立面测量外业数据采集手段比较灵活,常用的有悬高法、无棱镜对边法、无棱镜采点法、钢尺量距等,一般根据实际情况配合使用,但最终得到的都是一系列尺寸(间距)或悬高(高程)数据。
(2)实际中建筑物立面造型各异,绝大多数立面图都可以拆分成:外轮廓线、窗户(包括阳台上的窗户)、底商、屋檐、竖向投影线,起算标高、方位注记、尺寸标注、说明文字、图框等。
(3)窗户是立面图的主要数据,可以将其拆分成一组(多组)“横向间距”和一组(多组)“竖向间距”,便于计算机描述与实现。
参考以上结论,本程序通过读取用户录入的建筑物外立面数据,经程序内部一系列运算之后,最终利用VB控制AutoCAD实现自动绘制立面图。
图1 流程图
4 界面设计
一个应用程序的界面往往决定了该程序的易用性与可操作性,本程序界面设计遵循以下原则:
(1)以用户为中心:在系统的设计过程中,设计人员要抓住用户的特征,发现用户的需求。
(2)顺序原则:即按照处理事件顺序、访问查看顺序等设计人机对话界面。
(3)功能原则:即按对象应用环境及场合具体使用功能要求,设计人机交互界面,满足特定功能。
(4)一致性原则:界面细节美工设计的一致性使运行人员看界面时感到舒适,一致性还能减少他们的操作失误。
(5)频率原则:即按照管理对象的对话交互频率高低,设计人机界面的层次顺序和对话窗口的显示位置等。
(6)重要性原则:即按照管理对象在系统中的重要性和全局性水平,设计人机界面的主次和对话窗口的位置和突显性。
(7)面向对象原则:即按照操作人员的特征,设计与之相适应和友好的人机界面。宜以弹出式窗口显示提示、引导和帮助信息,提高用户的交互水平和效率。
图2 窗户录入界面
图3 部件录入界面
图4 注记成图界面
5 关键技术实现
5.1 窗户的录入
所有窗户用一组(多组)“横向间距”和一组(多组)“竖向间距”描述。
“横向间距”外挂属性,用“0”和“非0”分别表示“墙体宽度”和“窗户宽度”。“横向间距”表示“窗户宽度”时,其属性数值代表所对应的“竖向间距”组号,实现了“横向间距”与“竖向间距”的关联,从而达到描述窗户的目的。
每组“竖向间距”的间距总数可以不同,但均要求大于等于3个且为奇数,行号从小到大对应实地从顶至底。奇数行代表“墙体高度”,偶数行代表“窗户高度”。即首尾间距均代表“墙体高度”,如一层窗户下沿紧接地面,或顶层窗户上沿紧接屋檐,则首尾间距输入0值。
考虑到竖向间距录入时,外业数据可能为悬高(高程)数据,程序设计了悬高(高程)数据录入窗口,录入“竖向悬高”实时自动计算“竖向间距”。自动绘图时只读取“竖向间距”,实现了“竖向悬高”与“竖向间距”的兼容。
所有表格录入窗口均可动态增删表格的行列数,既减少了内存占用,又实现了表格行、列数的无限制。
5.2 间距严密平差
当窗户的“横向间距”或“竖向间距”多于一组时,各组数据数值之和应相同。不相同时,程序将自动严密平差,平差算法类似于水准平差。
当用户键入了“立面总长”或“立面总高”时,程序以键入值为标准值进行平差,否则以各组“横向间距”或“竖向间距”数值之和的平均值作为标准值进行平差。
各种信息系统和平台主要通过云计算等技术实现对海量数据的处理分析,从而快速形成估价报告等各类产品,故估价机构及人员的工作重心也会转移到数据的采集、分析和管理等,估价师也得以从机械重复的作业方式中解放,转向新型综合咨询业务的专研,提升自身技能的同时也为估价机构的细化、深化发展奠定技术基础。
当各组“横向间距”或“竖向间距”数值之和与标准值之差的绝对值大于限差时,程序中断执行并提示用户纠错。限差支持用户设定。
5.3 计算图纸尺寸和比例尺
程序预置 6种比例,分别为:50、100、150、200、250、300,并支持自动比例。
程序预置52种图幅,并支持自动图幅。主要考虑立面图的特点、打印机配备和叠图装订方便,限于篇幅在此不一一罗列。
程序计算图纸尺寸和比例尺的算法分四种情况:自动图幅自动比例、自动图幅手动比例、手动图幅自动比例、手动图幅手动比例。
无合适预置比例时,首先计算满足要求的“最小比例尺”,之后取比“最小比例尺”小的且为10的倍数的比例尺作为选定比例尺。
无合适预置图幅时,首先计算满足要求的“最小图纸尺寸”,之后取比“最小图纸尺寸”大的且为10 mm的倍数图纸尺寸作为选定图纸尺寸。
5.4 辅助判定竖向投影线
建筑物平面图中的突出或凹入部分,在立面图中表现为一条较长的竖线,作者暂把它称为竖向投影线。
前面提到:“横向间距”外挂属性,用“0”和“非0”分别表示“墙体宽度”和“窗户宽度”。“横向间距”表示“窗户宽度”时,其属性数值代表所对应的“竖向间距”组号。
我们一般在第2组“竖向间距”中输入阳台上窗户的尺寸,其余组输入主体上窗户尺寸,这样有利于下面竖向投影线的辅助判定工作。
经分析竖向投影线的规律发现:竖向投影线多出现在“墙-墙”、“窗户-墙-阳台”或“阳台-墙-窗户”、“墙-阳台”或“阳台-墙”等处。对应的“横向间距”外挂属性为:“0-0”、“1-0-2”或“2-0-1”、“0-2”或“2-0”。
由此,程序开发了3种辅助判定方式:00判定、102或201判定、02或20判定,实现了竖向投影线位置的辅助判定。
辅助判定适用于现实中大多数情况,但不排除例外。为此,竖向投影线位置还支持用户键入和修改。
5.5 智能尺寸标注
在定义尺寸标注样式之后,首先标注横向间距,之后标注竖向间距,相同的间距只标注一组。
在标注竖向间距时,先标注外轮廓线两侧间距。当间距多于一组,且仅标注两侧间距无法代表所有间距组时,程序将遍历所有窗户与窗户之间的间隙宽度,优先标注在间隙较宽处。程序自动记录已占用间隙,防止多组间距标注位置冲突。
通过获取尺寸标注数值,及其相邻标注数值,计算字符位数及宽度,并判断标注文字是否压盖,实现尺寸标注文字智能移位。
5.6 工程文件
精心设计了工程文件的数据格式,支持保存工程和打开工程及另存为功能。
外业可使用PDA记录,无需开发专用软件,使用记事本即可,内业可下载txt格式工程文件。通过本程序读入txt格式工程文件,实现测绘无纸化和内外业一体化。
工程文件为明码文件,方便用户编辑修改和存档。
5.7 完善的防错录及查错功能
通过对数字、字母、小数点、负号等字符的录入限制,使所有可录入数据的表格或文本框均实现了防错录功能。
即使录错,程序实时显示竖向各列总高及各列平均总高、横向总长,通过查看分析可快速发现错误。并且在绘制立面图之前,程序会对录入的数据进行全面检查,并提示可能的错误原因。
5.8 其他辅助功能
(1)自动绘制叠图参考线和注明图幅尺寸,方便用户打印裁图及装订。
绘制叠图参考线的算法:经分析日常采光分析测绘报告中立面图的一般叠法,以标准A4纸装订为准,在立面图内外图廓之间绘制短线,虚线代表正折,实线代表反折。
(2)通过控制绘图选项,灵活搭配绘制立面各部件,结合支持绘图基点功能,实现对复杂立面的多次叠加绘制,例如错层等情况。
(3)设置绘图环境,包括图层、颜色、线宽、文字样式、尺寸标注样式等,均由代码控制执行,不依赖于CAD模板,可移植性强。
图5 立面图成果略图
6 结语
掌握利用VB控制提供ActiveX Automation接口的软件(如 Excel、Word、Access、AutoCAD 等)的技术,可大大缩短软件开发周期,对于解决测绘生产中的实际问题十分有效。
本文结合作者测量实践及实际开发经验,介绍了利用VB控制AutoCAD实现自动绘制立面图的思路和算法,旨在抛砖引玉。因源代码较长(约8 000行),限于篇幅故没有罗列。
[1]张晋西.Visual Basic与AutoCAD二次开发[M].北京:清华大学出版社,2002
[2]许谡.Visual Basic应用与开发案例教程[M].清华大学出版社,2005
[3]王峰,陈杰.软件测试的艺术[M].北京:机械工业出版社,2006
[4]Microsoft公司.Microsoft Visual Basic 6.0控件参考手册[M].北京:希望电子出版社,1999
[5]Microsoft公司.Microsoft Visual Basic 6.0语言参考手册[M].北京:希望电子出版社,1998
[6]Microsoft公司.Microsoft Visual Basic 6.0程序员指南[M].北京:希望电子出版社,1998