黄子雄 黄树贤
(广州杰赛科技股份有限公司 广东 广州 510310)
传输线路勘察设计工作输出的图纸成果中,比较核心的一份是线路施工图。线路施工图是设计方交给施工方进行通信线路工程建设主要的图纸。通信线路图的制作一般采用CAD软件,以CAD矢量格式绘制,完成后需要打印输出到纸张装订。通信线路的施工图整幅尺寸通常很大,如用高于比例尺1∶10 000进行缩小打印输出,就不能清晰看到设计细节,这就使得施工图纸在打印输出时需要先对图纸进行切图分幅,再按顺序打印。实践中打印输出一般使用1∶3 000到1∶8 000比例尺,输出到A3、A4、A5等尺寸的纸张上。设计人员除了完成线路施工图的设计绘制外,需要花费大量的时间,对绘制好的整幅施工图纸进行切图分幅。为求达到每幅图纸符合格式、大小、美观等交付要求,设计人员需要在CAD矢量图上反复进行图纸元素框选、复制、粘贴到打印图框、调整图框等操作。同时还需调整每个打印图框的顺序及打印图框的顺序信息,使打印按正确的顺序打印输出,步骤繁琐,非常耗费时间精力,效率低下。
鉴于此,本文提出了一种基于CAD软件的扩展功能,对CAD矢量格式施工图自动分幅切图的方法,从而免除繁琐的手工操作,可以快速、准确地对通信线路施工图纸进行自动切图分幅。同时,本文还探讨研究了该方法在AutoCAD软件上的具体实现。
要实现自动分幅,实际上是通过编写程序扩展原CAD软件功能,使CAD绘图软件能根据预先设定的规则、算法对大幅矢量图进行切图分幅,再套到预置有打印格式的打印图框上,最后对每幅切图的顺序信息按打印序列进行设置。目前CAD软件普遍都具备二次开发的支持能力,尤其以管线施工图最常用的设计软件AutoCAD为例,它支持Lisp、C、C++、VBA、C#等多种开发语言,并提供丰富的扩展手段。自R17版本后,AutoCAD提供了对Mircosoft.NET架构非常全面的支持。使用Mircosoft.NET框架的任何一种语言,均可以对AutoCAD的各项功能进行全面的控制,采用面向对象的API可以访问、控制、管理CAD矢量图的各种元素对象,是非常理想的AutoCAD二次开发方式。
通信线路施工图的内容绘制时,主要由路由节点、连线、附着物及周边环境等的矢量图元元素组成。其中路由节点(如机房、电杆、手井、光交箱等),在实际施工图中会通过CAD图元的属性被标上从小到大的位置编号,这样就可以确定线路起始点、终点(包括分叉)的方向,从而确定施工图的路由走向。
进行二次开发扩展自动化功能时,程序代码可以访问到每个图元及它的位置属性,获得位置编号,这样就可以实现分幅切图后打印次序的确定及顺序信息的生成。
1) 通过整幅施工图上下左右顶点获得一个包含所有CAD矢量元素的平面矩形,定义名称为源施工图CAD矢量图矩形(下称源图矩形)。
2) 通过要输出打印的纸张大小,确定打印图框大小,并可确定此打印图框上用于展示矢量图的有效展示区域,程序以此展示区域的大小生成一系列小矩形,定义名称为截图框,并给予编号以进行排序识别。
3) 不断复制截图框并从左上顶点开始,从左到右、从上到下,平铺到源图矩形上,直到覆盖整个源图矩形,使得源图矩形的CAD矢量元素分别落到了每个截图框上。
4) 通过程序判断,剔除掉不含任何矢量元素的截图框,剩余的截图框(含有矢量元素)即为初步获得的分幅切图。
5) 程序通过施工图代表路由顺序节点的编号大小,赋予剩余截图框的排序编号,以此确定出截图框的顺序。
6) 允许人机交互,由设计人员判断截图框内含矢量图元素的丰满程度,对截图框高度或宽度进行调整(调小)。
7) 程序根据调整结果,可以自动对2个以上的、连续的截图框合并为1个标准大小的截图框,进一步获得最终的分幅切图。
8) 程序根据第7步确定的标准截图框的数量,生成相应数量的打印图框,打印图框由指北针、信息表及展示区域组成,其中展示区域对应截图框的分幅切图的矢量图形。
9) 程序依次将每个截图框内容对应地复制到打印图框的展示区域,并设置打印图框信息表的内容。这样就完成了整个施工图自动分幅的过程,获得了有顺序的、信息完整的、可直接输出的打印图框——也就是分幅出图需要的最终结果。
图1展示了自动分幅步骤。
图1 分幅切图步骤
获取整幅CAD矢量施工图矩形平面(即源图矩形)的算法比较简单,只需找到四个顶点就可以确定一个矩形。
遍历源CAD矢量图,以获取整个CAD矢量图中所有的矢量元素的坐标点(X,Y),对所有坐标点的X坐标及Y坐标进行比较,分别获得X坐标及Y坐标的最小、最大值,确定了源图矩形的四个顶点的坐标,获得源图矩形的宽度: 最小的X坐标和Y坐标minX、minY。即矢量图左上坐标A(minX,maxY),右上坐标B(maxX,maxY),右下坐标C(maxX,minY),左下坐标D(minX,minY)。源图矩形宽度sWidth为 maxX-minX,源图矩形高度sHeight为 maxY-minY。
多个截图框平铺后的长度和宽度需要完全覆盖源图矩形,这样才能完全分割源图矩形的所有矢量元素。
因此算法说明如下:如果(源图矩形宽度mod截图框宽度)>0,则:列数=源图矩形宽度/截图框宽度+1,否则:列数=矢量图宽度/截图区域宽度;同理,如果(源图高度mod截图框高度)> 0,则:行数=矢量图高度/截图区域高度+ 1,否则:行数=矢量图高度/截图区域高度。
截图框排序是为了最终输出分幅打印图框上的编号,并由此确定打印时的顺序符合整幅施工图的路由走向,是非常重要的操作。其详细方法为:首先,依次遍历每个截图框内所有的路由节点元素并获得位置编号,选取位置编号最小的值代表该截图框的顺序号。然后,对所有截图框按其顺序号进行排序,顺序号越小,截图框排序越靠前。最后,将没有获得顺序号的截图框排在最后。
截图框合并是使连续多个(两个或以上)经过调整(调小)的截图框合并为一个标准大小的截图框,其目的是将多个矢量内容较少的分幅合并为一个分幅,减少分幅的输出打印,同时增加图纸的可阅读性和美观度。根据图纸输出经验,一般横向内容会多于纵向走向的内容。因此,合并算法采用垂直合并优先的方式。两种合并方式的具体内容如下:
垂直合并:当连续两个或以上截图框的高度相加小于或等于标准截图框高度乘以切图缩放系数,则将连续的截图框内容从上到下复制到一个标准截图框中。此标准截图框的顺序号取合并连续的截图框中的最小编号,同时,将合并连续截图框的顺序号全置为-1,后续操作将不再使用。优先采用垂直合并后,对相同的截图框不再需要横向合并。
横向合并:当连续两个或以上截图框的宽度相加小于或等于标准截图框高度乘以切图缩放系数,则将连续截图框内容从左到右复制到一个标准截图框中,此标准截图框的顺序号取合并连续的截图框中的最小编号,同时,将合并连续截图框的顺序号全置为-1。
上面算法用到的缩放系数,是用于控制合并后内容的比例尺大小的一个范围参数。例如,标准比例尺为1∶3 600,即1张A4纸横向呈现约1 km,如使用0.8的缩放系数,则比例尺变为1∶4 500,1张A4纸横向呈现约1.25 km。
AutoCAD从2010的版本起,提供了丰富的MicroSoft.NetAPI,主要封装在acdbmgb.dll、acmgd.dll及AcCoreMgd.dll(2014版)中。.Net中编写AutoCAD插件(AddIn)程序,是采用DLL项目的方式,只需在项目中引用这些相关dll,就可以通过.NetAPI访问AutoCad提供的封装的外包类。实际C#代码中,还需要添加命名空间使用的语句,例如:
using Autodesk.AutoCAD.ApplicationServices;
using Autodesk.AutoCAD.DatabaseServices;
//用于当前画图矢量图形的存储
using Autodesk.AutoCAD.Runtime;
//用于对接二次开发接口,进行插件初始化
using Autodesk.AutoCAD.Geometry;
//构建矢量图形的基础类,如圆、矩形、多边形等
对于CAD矢量图纸的程序,一般过程都是获取CAD数据库,依次打开块表、块表记录,对实体进行增删改查的操作,在操作完后关闭相关的块表、块表记录。
作为AutoCAD的插件,必须实现Autodesk.AutoCAD.Runtime的 IExtensionApplication接口及其包含的Initialize与Terminate两个函数。其实质是便于AutoCAD软件进行插件的发现、加载和清除。
另外,要达到菜单交互的效果,还需要引用AcCui.dll来实现自定义的插件菜单,以下为在AutoCad菜单栏加入一个面板的代码:
Using Autodesk.AutoCAD.Windows.PaletteSet
PaletteSet myPaletteSet=new PaletteSet(″我的面板″);
基于上文的原理和算法,结合AutoCAD.NetAPI的二次开发能力,使用Visual Studio 2013 C#语言作为开发工具,在AutoCAD 2014实现了施工图上自动分幅切图的插件。其主要功能是通过点选该插件上的菜单,可以打开已设计好的整幅施工图,并通过插件菜单完成自动生成截图框切割图纸、截图框排序、调整(交互)、合并及打印图框的生成。除截图框需要人工做简单调整外,整个分幅切图的过程基本能自动、快捷地完成。插件及截图如图2、图3所示。
图2 自动分幅切图插件实现
图3 自动分幅效果
为检验自动分幅切图工具的效果,从某规划设计院选取了几个有详细进行步骤工时记录的管线规划设计项目。这些项目发生在2015年6月到2017年6月,共计有约72个路由段施工图设计任务,总长度约2 500 km,都记录了分幅出图步骤所使用的工时。
在72个设计任务中,随机抽取了20个作为测试样本。对这20个样本采用自动分幅切图工具对CAD矢量施工图进行分幅切图,并记录耗时。表1为对20个样本采用传统方式和采用自动分幅切图工具分幅耗时的对比。
表1 传统手工分幅与工具自动分幅耗时对比
从表1可以清晰看到,采用自动分幅切图的平均耗时约为传统手工分幅切图耗时的1/5,大幅节省了施工图分幅出图的时间。
本文针对通信管线规划设计生产过程中,施工图纸分幅切图手工操作效率低的问题,提出了一种可以对CAD矢量格式的大版幅通信线路施工图进行自动分幅并输出到标准图框进行打印的方法,并基于AutoCAD进行了实现研究。经过实际的检验测试表明,该方法可以大幅改进传统手工效率低的问题,提升施工图纸的制作效率。研究的下一步工作,可以考虑将此方法的应用推广到通信管线的相近领域,如水利、电力等的施工图使用。