AutoCADVBA在测绘辅助计算中的应用翁韬1方强张勇陈凯(成都市勘察测绘研究院,四川成都610081)摘要简要的叙述了在AutoCADVBA平台下开发测绘辅助计算功能插件的技术方法,并对其中的重难点进行了讨论,以及对这种二次开发技术的前景展望。关键词工程测量;AutoCADVBA;测绘辅助计算;二次开发TheapplicationsofAutoCADVBAinSurveySupplementaryCalculationWengTao,FangQiang,ZhangYong,ChenKai(ChengDuInstituteofSurveyingandInvestigation,SiChuanChengDu610081)Abstract:ThisarticlebrieflydescribedthemethodologyanddevelopmentofasurveysupplementraycalculationpluginundertheAutoCADVABplatform.Thedifficulitiesandimpliacationsduringthedevelopmentwerediscussed.Attheend,thisarticlealsomadeprospectsfortechniquesofthird-partydevelopmentforAutoCADVBA.Keywords:Engineeringsurvey;AutoCADVBA;surveysupplementraycalculation;third-partydevelopment1引言AutoCAD是测绘作业最常用的绘图软件之一,以其操作简单、功能强大和友好的用户界面等优点赢得了广大用户的青睐。然而,作为一款优秀的综合制图软件,经常使用AutoCAD的用户会发现其现有功能的命令并不能完全满足用户需要。比如,用户采用AutoCAD虽然可以方便地获取点、线、面等几何元素的长度和面积,却不能直接计算出各图形元素之间的交点或平移之后的交点坐标并且入库打印报表,导致计算功能和计算结果打印被放在另外的平台下进行,产生了大量的重复劳动,并且效率十分低下。为此,如果将常用的计算及其结果打印功能都设计成AutoCAD插件,只需通过对插件的调用就可以很方便地将这些常用的辅助工作在制图过程中完成。这不仅降低了程序设计的工作量,而且也达到了提高测绘作业效率的目的。2设计目标和原理测绘辅助计算插件以AutoCADVBA为平台结合测绘学、解析几何公式进行二次开发,最终成果不仅可以方便作业人员,提高工作效率,同时还可以保存计算结果入库,将结果保存于AutoCAD的扩展数据,需要打印可随时提取成果打印报表,从而为测绘工作的可持续发展提供强有力的技术支持。(1)利用AutoCAD提供的VBA功能,编制程序进行数据入库,将图形元素信息存储于扩展数据中用于计算。(2)各种情况的计算公式是一定的,只要能根据不同的情况选择不同的计算方式,就能在AutoCAD下自动计算,这不仅降低了测绘内业工作量,而且会提高内业效率。(3)打印模块,编写测绘辅助计算结果打印动态链接库文件,设计各种打印表格。(4)AutoCAD平面图的基础上进行开发,探索和研究各种图形元素之间的不同关系的自动计算。3技术路线MicrosoftVBA是一个面向对象的编程环境,可提供类似VisualBasic(VB)的丰富开发功能。VBA和VB的主要差别是VBA和AutoCAD在同一进程空间中运行,提供的是具有AutoCAD智能的、非常快速的编程环境。通过与测绘作业人员的交流,我们对测绘制图计算中的各种情况进行了归纳总结,把各种可能遇到的复杂情况尽量的简化操作,让作业人员的作业量得到了减轻,同时也使软件的交互更符合作业人员的工作习惯。4设计原则(1)以应用为中心以满足生产应用为原则。(2)前瞻性原则技术更新的频率很快,设计应考虑后续工作的需要。(3)稳定性原则软件的稳定性至关重要,涉及到系统能否连续、安全、无故障运行。(4)扩展性原则在满足现有需求基础上,形成一个可持续发展的体系结构。未来业务的扩展只需在现有体系的基础上,增加新的应用。因此,扩展性须考虑业务的扩展性、性能的扩展性和技术的扩展性。(5)经济性原则最大限度地利用现有条件,采取简单有效的手段,发挥最大效益。5功能设计以及程序实现程序功能设计以实际测绘制图中可能遇到计算的情况为依据,主要包括如下功能(表1):表1主要功能模块表直线相交坐标计算圆曲线要素计算圆相关计算圆与直线相交计算圆与圆相交计算三点求圆直线与弧相交计算直线与转点弧相交直线与两点弧相交切角计算直线类型切角计算一边是直线一边是切线弧切角计算一边是直线一边是两点弧切角计算红线计算直线与直线相交红线计算直线与两点弧相交红线计算直线与切线弧相交红线计算两点弧与两点弧相交红线计算切线弧与切线弧相交红线计算两点弧与切线弧相交红线计算弧相交计算两点弧相交切线弧相交两点弧与切线弧相交缓和曲线坐标反算打印模块以求计算直线交点为例,首先在vba编辑器下制作出数据输入界面,可以根据作业人员的工作习惯进行设计。在选择线获取数据之后通过选择直线起点,是否两点式直线,添加点名来区分两点式直线和点斜式直线,这对于打印输出结果很重要具体交点计算代码如下:PrivateSubCalculate_Click()Dimpnt1(2)AsDouble'直线端点Dimpnt2(2)AsDoubleDimpnt3(2)AsDoubleDimpnts(5)AsDoubleDimcrosspnt12'直线交点IfMe.CheckBox1.Value=TrueThencrosspnt12=l1.IntersectWith(l2,acExtendBoth)'l1和l2的延长的情况下的交点Elsecrosspnt12=l1.IntersectWith(l2,acExtendNone)'l1和l2的不延长情况下的交点EndIfIfUBound(crosspnt12)0ThenMsgBox无交点!Me.TxtIntX=Format(Round(crosspnt12(1),3),0.000)Me.TxtIntY=Format(Round(crosspnt12(0),3),0.000)EndSub设置好计算条件点击计算按钮,计算出结果后可以点击入库按钮将结果存入图形的扩展数据,这样任何时候都可以通过打印库将计算的结果重新调出打印,避免重复计算。下面代码详细描述了将计算结果存储进扩展数据的过程。PublicSubCmdInputPrintBase_Click()’入库按钮IfMe.TxtIntX=ThenExitSubDimtmpStr(0To17)AsStringConstTYPE_STRING=1DimRecNameAsStringDimxRecDataType(0To17)AsIntegerDimxRecDataValue(0To17)AsVariantDimpLineResultRecAsAcadXRecordDimpDicAsAcadDictionaryDimI,JAsIntegerRecName=直线相交计算结果-点(+Me.TxtLine1PntName1+)+交点X(+CStr(Me.TxtIntX)+)Y(+CStr(Me.TxtIntY)+)RecCNT=RecCNT+1SetpDic=ThisDrawing.Dictionaries.Add(测绘辅助计算)SetpDic=ThisDrawing.Dictionaries.Item(测绘辅助计算)SetpLineResultRec=pDic.AddXRecord(RecName)'tmpStr(0)=Me.TxtGCBH:tmpStr(1)=Me.TxtLine1PntName1:tmpStr(2)=Me.TxtLine1X1:tmpStr(3)=Me.TxtLine1Y1:tmpStr(4)=Me.TxtLine1AngletmpStr(5)=Me.TxtLine1PntName2:tmpStr(6)=Me.TxtLine1X2:tmpStr(7)=Me.TxtLine1Y2:tmpStr(8)=Me.TxtLine2PntName1:tmpStr(9)=Me.TxtLine2X1tmpStr(10)=Me.TxtLine2Y1:tmpStr(11)=Me.TxtLine2Angle:tmpStr(12)=Me.TxtLine2PntName2:tmpStr(13)=Me.TxtLine2X2:tmpStr(14)=Me.TxtLine2Y2tmpStr(15)=Me.TxtInt:tmpStr(16)=Me.TxtIntX:tmpStr(17)=Me.TxtIntYForI=0To17xRecDataValue(I)=tmpStr(I)xRecDataType(I)=TYPE_STRINGNextpLineResultRec.SetXRecordDataxRecDataType,xRecDataValueBool_Save=TrueEndSub打印库界面分为计算结果数据和打印列表两个区域(图1),计算结果数据区域是显示的待打印的记录,双击记录可将该记录转移到打印列表,而打印列表区域显示的是已选中的记录,点击打印即可将打印列表中的记录全部打印出来,可以选中多条记录至打印列表一起打印。删除按钮则可以将打印库中不需要的记录删除。图1打印库界面如果是多条记录打印,则需要根据纸张大小,表格大小,表格数目合理排版,节约纸张,这个功能可以在打印动态链接库中写算法实现,这里不详细叙述。下面是直线交点计算结果打印(图2)图2直线交点计算表缓和曲线是计算中的难点(图3),在算法上应采用最符合实际生产的算法,中间结果的小数位应尽量多保留几位以确保最终结果精确度。在获取已知数据时,无法完全采取拾取图元来获取数据,必须配合手动输入,图中已知数据为输入数据,点击计算按钮后结果显示在计算结果区域,因为桩点的个数不确定,是根据已知条件计算所得桩点坐标以列表的形式列出,同时其打印表格行数也是动态的,根据实际计算桩点数增减。图3缓和曲线平行线桩点坐标计算界面及打印表格6结束语项目最终成果经测试能在AutoCAD2004chs平台下稳定运行,后期还会对其功能不断的进行扩充,毕竟在实际生产中会遇到各种各样的情况,不是简单的几个算法就能以偏概全的,必须在工作中不断的完善和发展。AutoCADvba能让非专业的软件开发人员快捷的制作出符合自己生产特色的软件,应当在工作中灵活运用这类二次开发工具,提高工作质量和工作效率,更好更高效的为测绘事业服务。参考文献:[1]李全信.缓和曲线平行线间面积的计算及应用[J]勘察科学技术,1997,(05).[2]李全信.线路中线坐标计算的通用数学模型[J]勘察科学技术,2001,(05).[3]李全信.线路平行线间面积计算的统一简捷模型[J]四川测绘,2001,(04)