附合导线测量平差计算在中望CAD二次开发中的应用_第1页
附合导线测量平差计算在中望CAD二次开发中的应用_第2页
附合导线测量平差计算在中望CAD二次开发中的应用_第3页
附合导线测量平差计算在中望CAD二次开发中的应用_第4页
附合导线测量平差计算在中望CAD二次开发中的应用_第5页
已阅读5页,还剩7页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

附合导线测量平差计算在中望CADVBA二次开发中的应用吴劲夫摘要:AutoCAD系统的开发环境和工具,程序框架的建立,程序自动计算,程序计算流程图,中望CADVBA编程,导线测量介绍,计算出起始边,终点边的北东方位角,添加一个窗体,程序代码说明,导线平差精度计算过程关键词1.引言随着CAD技术在公路工程设计中的越来越广泛使用,设计单位对设计人员在CAD技术应用方面的要求也越来越高。对设计人员来讲,CAD的二次开发技术也越显重要,在提高设计效率和速度方面意义非常重要。2.AutoCAD二次开发语言简介及导线测量的应用介绍。2.1AutoCAD二次开发语言简介AutoCAD系统的开发环境和工具包括Object,ARX,VisualLISP和VBA(MicrosoftVisualBasicfoApplications)等。其中VBA是VB的特殊形式,它将VB植入到应用程序中。AutoCAD包含的VBA能够和CAD共享地址空间,而独立的VB则需要通过接口完成。这种方法对编程人员的要求不是很高,且编写速度快,功能更强劲。本文就是利用VBA技术进行编程的。VBA具有很强的开发能力,其主要功能包括:(1)创建对话框及其他界面。(2)创建工具栏。(3)建立模块级宏指令。(4)提供建立类模块的功能。(5)具有完善的数据访问与管理能力,可对Access数据库或其他外部数据库进行访问和管理。(6)能够使用SQL语句检索数据,与远程数据对象结合起来,可建立C/S(客户机/服务机)级的数据通信(7)能够使用Win32API提供的功能,建立应用程序与操作系统间的通信。从功能上来说,VBA与VB几乎完全一样,或者说VBA是VB的一个子集。但它们之间更本质的区别在于VBA没有自己独立的工作环境,而必须依附于主应用程序。2.2导线测量介绍将测区的相邻控制点连成直线而构成的折线,称为导线。构成导线的平面控制点称为导线点。导线测量就是依次确定各导线边的长度和各转折角值;根据起算数据,推算出各边的坐标方位角,从而求出各导线点的坐标。3.程序框架的建立及相关计算参数3.1程序的目的功能及设计原则鉴于实际工程设计工作的需要,本程序编制的主要目的是或许现场的观测数据,即观测角(本文暂时已左角为例)、观测边长及始边与终边的已知点坐标作为所需的数据信息。通过程序自动计算,软件的编制流程图如图1所示。图1程序计算流程图拾拾取起始边与终点边的前视与后视已知控制点程序自动计算起始边与终点坐标方位角设置控制点点数和平差表格名称,程序生成自动平差表格一键平差数据软件自动进行平差计算,并对控制点进行CAD展点绘制导线点平面图观测数据录入,并保存在程序指定的文件夹结束3.2程序计算相关参数(1)起点A,B坐标(XA,YA),(XB,YB),终边2个已知点C,D坐标(XC,YC),(XD,YD)。(2)角度闭合差fβ的计算:fβ=∑β测-∑β理∑β测----所有水平角观测值总和。∑β理----所有水平角理论值的总和,角度观测值为左角,计算公式为:∑β理=αCD(终边)-αAB(始边)+n×180°n---水平角个数;如果观测角为右角,则为:∑β理=αAB(始边)-αCD(终边)+n×180°如果是闭合导线,角度观测值一般为内角,则有:∑β理=(n-2)×180(3)算法①第一步拾取起始边A、B点,终点边C、D点,程序自动通过A、B、C、D点坐标分别计算出起始边,终点边的北东方位角。②第二步程序自动对表格进行排版并自动生成精度平差表格,如图2。图2程序自动生成精度平差表格③第三步程序自动计算出精度平差数据,对坐标在CAD上进行绘图展点,并自动填写至精度平差表格如图3、图4所示。图3精度评定表格图4CAD展点效果图4.中望CADVBA编程4.1程序界面设计中望CADVBA程序计算,界面窗体、空间的运行效果,如图4所示。图4程序运行界面4.2操作步骤①进入中望CAD主程序,选择“VisualBasic编辑器”按钮,进入中望CADVBA集成开发环境,如图5所示图5中望CADVBA集成开发环境②选择“工程管理器”窗口中的thisdrawing,单击“视图/代码窗口”,选择“插入/用户窗体”菜单添加一个窗体。向窗体中添加17个标签、3个命令按钮,17个文本框,各对象属性,见表1见表1对象属性设置对象属性设置命令按钮获取基础数据获取起终点A,B,C,D点坐标命令按钮生成导线表格自动生成空白精度平差表格命令按钮平差计算自动平差计算,并生成精度平差表格5程序代码说明5.1起终点坐标数据获取代码Dim起始测站坐标AsVariantDim起始后视坐标AsVariant起始测站坐标=ThisDrawing.Utility.GetPoint(,"拾取始边测站位置")起始后视坐标=ThisDrawing.Utility.GetPoint(,"拾取始边后视位置")Dim终点测站坐标AsVariantDim终点后视坐标AsVariant终点测站坐标=ThisDrawing.Utility.GetPoint(,"拾取终边测站位置")终点后视坐标=ThisDrawing.Utility.GetPoint(,"拾取终边后视位置")坐标(1,1)=起始测站坐标(1):坐标(1,2)=起始测站坐标(0)坐标(2,1)=起始后视坐标(1):坐标(2,2)=起始后视坐标(0)坐标(3,1)=终点测站坐标(1):坐标(3,2)=终点测站坐标(0)坐标(4,1)=终点后视坐标(1):坐标(4,2)=终点后视坐标(0)起始测站点X1.Text=Round(坐标(1,1),3)起始测站点Y1.Text=Round(坐标(1,2),3)起始后视点X1.Text=Round(坐标(2,1),3)起始后视点Y1.Text=Round(坐标(2,2),3)终点测站点X1.Text=Round(终点测站坐标(1),3)终点测站点Y1.Text=Round(终点测站坐标(0),3)终点后视点X1.Text=Round(终点后视坐标(1),3)终点后视点Y1.Text=Round(终点后视坐标(0),3)X1=Round(坐标(1,1),3):Y1=Round(坐标(1,2),3)'测站点X2=Round(坐标(2,1),3):Y2=Round(坐标(2,2),3)'后视点起始方位角1.Text=坐标计算方位角(X1,Y1,X2,Y2)起始方位角3.Text=坐标计算方位角到度(X1,Y1,X2,Y2)'计算终点数据---------------------------------------------------------X3=Round(终点测站坐标(1),3):Y3=Round(终点测站坐标(0),3)'测站点X4=Round(终点后视坐标(1),3):Y4=Round(终点后视坐标(0),3)'后视点终点方位角1.Text=坐标计算方位角(X3,Y3,X4,Y4)终点方位角3.Text=坐标计算方位角到度(X3,Y3,X4,Y4)5.2生成精度平差表格并进行排版excelWB.Sheets(1).Range("A1:M1").MergeexcelWB.Sheets(1).Range("A1")="附合导线计算表"excelWB.Sheets(1).Range("A1").Font.Size=21excelWB.Sheets("Sheet1").Range("A1").EntireColumn.AutoFit'列宽自动调整excelWB.Sheets("Sheet1").Range("A1").EntireRow.AutoFit'行高自动调整'设置A1单元格的字体居中excelWB.Sheets(1).Range("A2:A3").MergeexcelWB.Sheets(1).Range("B2:B3").MergeexcelWB.Sheets(1).Range("C2:C3").MergeexcelWB.Sheets(1).Range("D2:D3").MergeexcelWB.Sheets(1).Range("E2:E3").MergeexcelWB.Sheets(1).Range("F2:G2").MergeexcelWB.Sheets(1).Range("H2:I2").MergeexcelWB.Sheets(1).Range("J2:K2").MergeexcelWB.Sheets(1).Range("L2:M2").MergeexcelWB.Sheets("Sheet1").Range("A2:M3").Borders.LineStyle=xlContinuous'加外框线excelWB.Sheets(1).Range("A2")="点号"excelWB.Sheets(1).Range("B2")="观测左角(°′″)"excelWB.Sheets(1).Range("B:B").ColumnWidth=14excelWB.Sheets(1).Range("C2")="改正数(″)"excelWB.Sheets(1).Range("C:C").ColumnWidth=9.67excelWB.Sheets(1).Range("D2")="方位角(°′″)"excelWB.Sheets(1).Range("D:D").ColumnWidth=16excelWB.Sheets(1).Range("E2")="平距(m)"excelWB.Sheets(1).Range("E:E").ColumnWidth=8excelWB.Sheets(1).Range("F2")="坐标增量(m)"excelWB.Sheets(1).Range("F3")="△X"excelWB.Sheets(1).Range("G3")="△Y"excelWB.Sheets(1).Range("F:G").ColumnWidth=8.08excelWB.Sheets(1).Range("H2")="改正数(mm)"excelWB.Sheets(1).Range("H3")="X"excelWB.Sheets(1).Range("I3")="Y"excelWB.Sheets(1).Range("H:I").ColumnWidth=6excelWB.Sheets(1).Range("J2")="改正后坐标增量(m)"excelWB.Sheets(1).Range("J3")="△X"excelWB.Sheets(1).Range("K3")="△Y"excelWB.Sheets(1).Range("J:K").ColumnWidth=7.5excelWB.Sheets(1).Range("L2")="改正后坐标增量(m)"excelWB.Sheets(1).Range("L3")="△X"excelWB.Sheets(1).Range("M3")="△Y"excelWB.Sheets(1).Range("L:M").ColumnWidth=13excelWB.Sheets("Sheet1").Range("A2:M3").WrapText=TrueWithexcelWB.Sheets("Sheet1").Range("A1:M100")…………….…………….excelWB.Sheets(1).Range("A"&4&":A"&b+1).Interior.color=RGB(255,255,0)'RGB黄色excelWB.Sheets(1).Range("B"&6&":A"&b-1).Interior.color=RGB(255,255,0)'RGB黄色excelWB.Sheets(1).Range("L"&4&":M"&6).Interior.color=RGB(255,255,0)'RGB黄色excelWB.Sheets(1).Range("L"&b-2&":M"&b+1).Interior.color=RGB(255,255,0)'RGB黄色excelWB.Sheets(1).Range("E"&7&":E"&c-1).Interior.color=RGB(255,255,0)'RGB黄色excelWB.Sheets("Sheet1").Range(("A"&2&":M"&b+1)).Borders.LineStyle=xlContinuous'加外框线WithexcelWB.Sheets(1).Range(("A"&2&":M"&b+5)).Borders(xlEdgeLeft).LineStyle=xlContinuous.Weight=xlThick.ColorIndex=0EndWithWithexcelWB.Sheets(1).Range(("A"&2&":M"&b+5)).Borders(xlEdgeTop).LineStyle=xlContinuous.Weight=xlThick.ColorIndex=0EndWithWithexcelWB.Sheets(1).Range(("A"&2&":M"&b+5)).Borders(xlEdgeBottom).LineStyle=xlContinuous.Weight=xlThick.ColorIndex=0…………………….……………………excelWB.Sheets(1).Range("a"&b+2).Select'设置单元格左对齐5.3中望CAD进行多段线绘制及控制点数据展点DimlayerObj1AsZcadLayerDimlayerObj2AsZcadLayerDimlayerObj3AsZcadLayerDimlayerObj4AsZcadLayerSetlayerObj1=ThisDrawing.Layers.Add("直线")'设置图层颜色layerObj1.color=zcRed'设置图层线宽layerObj1.Lineweight=acLnWt030'创建线性标注图层SetlayerObj2=ThisDrawing.Layers.Add("线性标注")layerObj2.color=zcBlue'创建圆的图层SetlayerObj3=ThisDrawing.Layers.Add("圆")layerObj3.color=zcGreen'创建文字的图层SetlayerObj4=ThisDrawing.Layers.Add("文字")layerObj4.color=zcYellow'展点创建圆-------------------------------------------DimcircleObjAsZcadCircle'定义圆Dimcenter(0To2)AsDouble'定义圆心DimradiusAsDouble'定义半径'展点创建圆-------------------------------------------DimtextObjAsZcadText'定义文字DimtextStringAsString'定义文字内容DimheightAsDouble'定义文字高度Fori=lowerBoundToupperBound-1center(0)=aay3(i+1):center(1)=aax3(i+1):center(2)=0'赋值圆心radius=5'赋值半径ThisDrawing.ActiveLayer=layerObj3'圆图层前置------------------SetcircleObj=ThisDrawing.ModelSpace.AddCircle(center,radius)'创建圆NextiFori=1Toe'储存坐标数据到数组aax4Ifi=eThenaax4(i)=终点测站点X1.Text:aay4(i)=终点测站点Y1.Text:ExitForaax4(i)=aax3(i):aay4(i)=aay3(i)NextiZoomExtentsDimpoints(0To3)AsDouble'定义多段线的顶点坐标DimplineObjAsZcadLWPolyline'定义多段线m=0'创建多段线---------------------------------------------Fori=1ToeIfi=eThen:ExitForm=m+1ThisDrawing.ActiveLayer=layerObj1'多段线图层前置------------------points(0)=aay4(m):points(1)=aax4(m)points(2)=aay4(m+1):points(3)=aax4(m+1)SetplineObj=ThisDrawing.ModelSpace.AddLightWeightPolyline(points)plineObj.ConstantWidth=0.5'修改多段线的全局宽度-----------plineObj.Update'创建多段线------------------------------------------------NextiFori=1Toe'创建标注---------------------------------------Dimpt2(0To2)AsDoubleDimpt3(0To2)AsDoublept2(0)=aay4(i):pt2(1)=aax4(i):pt2(2)=0pt3(0)=aay4(i+1):pt3(1)=aax4(i+1):pt3(2)=0DimAX1AsVariantDimAY1AsVariantDimAX2AsVariantDimAY2AsVariantDimAZ1AsVariantDimAZ2AsVariantAX1=pt2(1):AY1=pt2(0):AZ1=pt2(2)AX2=pt3(1):AY2=pt3(0):AZ2=pt3(2)Dim标注角度AsVariantDim标注距离AsDouble标注角度=坐标计算方位角到度(AX1,AY1,AX2,AY2)标注距离=GetDistance(AX1,AX2,AY1,AY2,AZ1,AZ2)DimlocationAsVariantlocation=GetPoint(pt2(0),pt2(1),0.001*标注距离,0.05*标注距离)'标注文字位置rotAngle=90-标注角度'转角标注角度---------------------------------------------------------------rotAngle=rotAngle*3.141592/180#'转换为弧度----------------------------------------------------'在模型空间中创建旋转标注--------------------------------------------------------ThisDrawing.ActiveLayer=layerObj2'标注图层前置------------------SetdimObj=ThisDrawing.ModelSpace.AddDimRotated(pt2,pt3,location,rotAngle)'修改标注样式dimObj.ArrowheadSize=标注距离/50dimObj.TextHeight=标注距离/50dimObj.DecimalSeparator="."dimObj.Update'修改标注样式…………....…………d=Time()delay(0.5)NextiZoomExtentsxlApp.Visib

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论