坐标标注和散点高程标注功能的CAD实现 | ![]() |
坐标标注和散点标注是测绘工作人员经常使用的绘图功能。原版的计算机辅助设计(computer aided design, CAD)不具备XY坐标同时标注功能,虽然网上也有很多零散的插件,但是格式千差万别。测绘人员使用较多的、具备坐标标注统一格式的商用软件是南方CASS,但CASS中的坐标标注不能选择图层、颜色和标注文字的样式和高度等属性[1]。散点高程标注功能因各设计院和施工单位的需求不同,对应的格式要求也不尽相同,目前没有统一的格式和商用软件。鉴于上述原因,进行这两项功能的应用性开发。
1 坐标标注1) 设计思路。坐标标注首先要具备设置图层、颜色、标注样式和文字高度以及标注坐标的精度等参数设置。参数设置完成后,进入标注功能界面判断象限,选择所要标注的位置点,再选择标注信息所在位置判断象限,执行标注功能。
2) 界面设置。根据设计思路,将图层名称、图层颜色、文字样式和文字高度以及标注坐标精度等参数统一考虑,进行初始参数对话框设计。
3) 标注象限的判断和处理。在选择标注点位置和标注信息位置后,会形成标注象限。按照阅读习惯,程序设置如下:若标注方位角位于第1和第4象限,那么坐标信息会在右侧显示;位于第2和第3象限,坐标信息在左侧显示。涉及象限判断,方位角的解算必不可少。根据正切函数的特性,计算得到的角度需要进行CAD坐标差dx和dy的符号判断和处理[2]:①当dx>0,dy>0时,结果不处理;②当dx>0或dx < 0,dy < 0时,结果加180°处理;③当dx < 0,dy>0时,结果加360°处理。
为了防止分母为0(dy=0)的特殊情况出现,加入了“If dy=0 Then dy=0.000 001”代码,防止溢出错误。同时也考虑了dx=0的情况,加入了“If dx=0 Then fw1=PI”进行方位角的处理。
标注横线的长度处理。标注时,根据选择坐标位置、标注精度、以及标注文字高度的不同,XY的坐标标注信息文字长度不一致,所以不能用固定的长度来绘制中间的隔离横线。因此,利用应用程序接口(application program interface,API)中的GetBoundingBox函数[3],来巧妙地处理横线长度。
选定所要标注的点位,根据获取的坐标值,按照设定好的标注参数(如高度、精度)进行X、Y的文本输出。通过GetBoundingBox函数,获取X、Y标注文本框的最大和最小坐标值。利用最大和最小差值,可分别得到X和Y标注文本的长度,取其长者绘制隔离横线,在不同象限,隔离横线绘制的方向也随之不同。
2 散点高程标注在管线测量和特征物测量时,经常需要用到散点高程标注等数据,提前测量并整理出散点高程数据文件。其格式为:“点号, 高程(11, 3.929)”,含义是11号点,高程为3.929 m。
1) 界面设计。根据工程使用方要求,对散点标高和散点标号的排列位置在上、下、左、右、左前、右前共6种组合方式可供选择。
根据工程使用方的要求,首先,开发散点高程标注功能需要考虑标注的起始散点号(默认为数据文件第一个点号)。为防止重复标注,预留了一个数据文件阅览窗口,以便选择起始点号。其次,有图层参数的设置(散点标高图层和标号图层)和对应的图层颜色设置,默认分别新建图层sdbg、sdbh,分别对应颜色白色、红色。最后,标注文字的高度和样式也可根据实际比例尺和工程需求进行设置[4]。
2) 关键处理。以块为基准插入进行散点标注的点标识。假如之前CAD执行过此功能或有相同命名的图块存在,可能会出现未知错误。为了防止此类错误发生,在每次开启该功能后首先遍历块库是否存在同名块,有则删除后新建[5];没有则直接定义。
3 工程应用1) 坐标标注。根据某调查工程使用要求,对该项目区中的房角点进行坐标标注。为了测试效果,对同一点用不同精度和不同文字高度的坐标标注对比。经使用,均能很好地执行并准确表示坐标,且大小能自适应缩放,满足了工程需求[6, 7],效果如图 1所示。
![]() |
图 1 坐标标注工程应用图 Fig.1 Coordinate Annotation Engineering Application Diagram |
2) 散点高程标注。某市政工程,管线测量中窨井盖已在室内编号完成,井盖标高在野外实测并整理成相应数据文件[8]。对其中部分窨井盖采用不同对齐方式和字高,并对该功能进行测试,均能准确表达,满足工程的专项功能需求。散点高程标注应用效果如图 2所示。
![]() |
图 2 散点标高标注应用 Fig.2 Application of Scatter Mark |
4 结束语
坐标标注和散点高程标注功能的设计和开发,满足了专项工程的使用需求。同时,坐标标注功能相对市面上的插件和商用软件,参数设置更加全面,具备良好的通用性和延展性[9]。散点高程标注功能虽是专项性功能开发,但也为后续类似的工程应用打下了基础。
[1] |
刘凯. AutoCAD坐标标注在工程图中的应用[J]. 软件导刊, 2015, 14(1): 52-53. |
[2] |
赵焰平. 基于AutoLISP的点坐标标注[J]. 机械工程师, 2010(9): 111-112. DOI:10.3969/j.issn.1002-2333.2010.09.051 |
[3] |
胡现辉, 马少君, 潘国荣. 用VB在AutoCAD中绘制地形图程序开发[J]. 北京测绘, 2007(4): 48-49. DOI:10.3969/j.issn.1007-3000.2007.04.014 |
[4] |
王怀球, 蒋月姣. AutoCAD中用VBA进行二次开发在工程测量中的应用[J]. 数字技术与应用, 2011(5): 119-120. |
[5] |
胡祝敏, 刘星, 艾鸿敏. CAD二次开发在宗地数据处理中的应用[J]. 测绘工程, 2014, 23(5): 62-65. DOI:10.3969/j.issn.1006-7949.2014.05.016 |
[6] |
方成龙. 利用CAD二次开发程序计算超欠挖的研究[J]. 测绘地理信息, 2014, 39(1): 67-68. |
[7] |
关昆, 刘小飞. CAD规划成果空间数据的自动化入库实现[J]. 测绘地理信息, 2012, 37(6): 40-42. |
[8] |
王鹏, 范亚男, 赵言. 探地雷达在城市管线测量中的应用研究[J]. 测绘地理信息, 2013, 38(6): 30-32. |
[9] |
李志超, 余杉钰, 章波, 等. 基于.NET API的CAD二次开发技术在工程中的应用[J]. 制造业自动化, 2013, 35(15): 122-124. DOI:10.3969/j.issn.1009-0134.2013.15.038 |