作者:张毅
由于天津港一华北石化原油管道工程(以下简称津华线),全线总长约188 km,沿线途经天津市滨海新区、静海县,河北省黄骅市、青县、大城县、任丘市6个行政区域。本项目经过的地理区域经济较为发达,沿线地形地貌复杂多变,如何才能取得最佳的管道走向,使得管道线路便于施工且节约用地,达到节省工程投资的目标,这是最为主要的任务。在获取最佳的管道线路中线之前,在设计阶段经实地踏勘,针对不同的地区、不同的地形地貌经多次的改线调整,获得初步最佳路线,然后在具体的施工阶段,根据遇到的不同问题,需要再次调整管道局部走向。然而,每次管道中线的调整,都需要获取其中线每个折点的里程数、转角、桩号等信息,来实时地判断本项目的长度及弯管使用量的变化情况,传统的做法是靠手工完成,每个折点需要量算一次角度、里程,并通过将里程逐个累加来取得当前折点的连续里程数,对于津华线这样的长距离管道项目,这项工作异常烦琐且费力,大大降低了效率。
针对此问题,为了加快设计、施工进度,快速获取实时的管道信息,节约建设工期,在天津港一华北石化原油管道工程项目组人员的建议及协助下,利用计算机程序语言,有了较为完善的解决方案。
1基本思想
AutoDesk公司的AutoCAD软件(ACAD)作为一款在工程领域内广泛使用的计算机辅助设计平台,具有功能强大、操作简便,并且提供多种二次开发方法及接口。
对ACAD的二次开发方式主要有VisualLisp、VBA、ObjectARX以及最新的.NET等,其中Object-ARX基于VC++平台,功能非常强大,但其缺点是开发速度慢、周期长,而且对开发人员的要求也比较高;VisualLisp与VBA较为简单,特别是VBA,使用方便且开发速度较快。本程序采用的开发语言是VBA。
1.1 程序流程设计
ACAD提供对每个图元对象类的操作,通过对各个类成员的操作不仅可以提取类包含的各项属性数据(比如顶点坐标、颜色、所属图层等),而且可以编辑修改当前类所指向的图元实体。本程序主要是对PLine实体类进行操作,在ACAD中的类名为“AcadPolyline”。
程序设计流程如图1所示,在ACAD窗口中获取中线(PLine线)的控制句柄后,通过类属性。Coordinates提取它的顶点及所有节点坐标数据,然后用VBA内部函数“UBound”求得顶点总数为n。用变量i控制循环体,下面为1次完整循环过程。
图2为部分中线节点示意图,节点号依次为d1、d2、d3,要在节点d2处标注角度和里程,角度为线路方向的左角(为图中双箭头所示)。
角度计算方法:首先求出由点d1、d2、d3构成的三角形的内角pd1d2d3,因为标注的一般为设计线路前进方向的左角(图中假定方向向东),所以接下来判断节点d3与向量d1d2的平面位置关系,如果点d3位于向量d1d2的下部,则需要加1800。
最后将文字前缀、里程、角度制作为ACAD块并插入到图形的相应位置。
1.2界面及参数设置
程序界面如图3所示,在选择线路中线进行标注前应先设置好各项参数:文字高度、图形比例、前缀文字、横线长度、颜色、块的缩放比例、节点圆半径、注记选项等。部分说明如下。
(1)前缀文字类型。津华线管道的前缀标识符号,标注结果为JHO、JH1、JH2 - - -JH终。
(2)注记块的缩放比例。用来指示块实体是否需要放大或者缩小,为1时保持大小不变。
为满足特殊需要,对角度可以设定是否需要显示度分秒符号,是否只标注0。~ 1800的角度值,还可以对中线进行反方向标注。
为方便以后的编辑修改,所有的对ACAD的操作都在“PL注记”图层上进行。
2具体实现
程序实施过程中主要用到的ACAD实体类有AcadText、AcadLine、AcadPolyline、AcadBlockRefer-ence等几个,这些类提供对ACAD实体操作的方法和属性。
2.1 与ACAD的数据交互
ACAD提供Utility类,通过它可以从ACAD操作窗口获取所需要的数据信息,下面为从操作窗口获取一条PLine线的控制句柄:
Dim Basepnt As Variant ‘鼠标在图中点击处的坐标
Dim returnObj As AcadObject ‘返回鼠标拾取的ACAD对象类实体,这里为PLine中线
rlhisDrawing. Utility. CetEntity( retumObj, BasePnt.”选择一条PLINE线-Select a PLine--”)
然后利用returnObj. Coordinates属性就可以获得中线所有节点的坐标值序列。
2.2 里程数据的格式化
里程数据就是指从设计中线起点到当前节点的连续水平距离。根据《长距离输油输气管道测量规范》的第3.9.4条的规定,标注格式应该为“1+235.6”,其中“+”前为整千米数,其后为以米为单位的长度。
S= So+Distance(d1,d2)*(MapScale/1000)
‘S。为中线起点到d.点的距离,MapScale/1 000为尺度比例因子
当S求出来后,需要对它进行格式化处理,Str_S为格式化后的里程字符串。语句为:
Str_S=””&Int( S/1000)&”+”&Format(S -Int( S/1000)*1000,”000.0”)
2.3角度的量算及处理
所要标注的角度是线路前进方向的左角,在ACAD中多段线的方向为绘制的顺序形成的方向。程序内部计算采用的坐标系为数学坐标系,根据获得的节点坐标值为源数据,利用余弦定理求出Ad1d2d3内的由边d2d1和边d2d3构成的内角pd1d2d3(相对关系如图1所示)。因为用余弦定理求出的角度都是在00~180°的值,而线路标注要求的角度既有00~ 180。的还有1800~ 3600的值,解决这个问题需要判断点d3与向量did2间的平面位置关系。
判断点与线平面位置关系采用的方法为:
由已知点d1、d2求出直线的2点方程,然后求出过点d3的铅垂线与线d1d2的交点d,再判断YJd与yd3的大小,如果Yd>Yd3,则说明点d3位于线d1d2的下部,pd1d2d3需要加一个半圆角180°,反之无须处理。
2.4块实体的创建与插入
所谓块( Block)就是ACAD的一个对象实体,类名为“AcadBlockReference”,它可以将文字、线条、圆等多个图元组合成为一个整体对象,方便用户的各种操作。本程序要创建的块包括文字(里程、角度、文字前缀)和直线2种类型的图元。下面为部分实现代码:
Set blockObj=ThisDrawing. Blocks. Add( inser-tionPnt,”*U”)”建立匿名块,以避免块名重复引起错误
Set lineObj =blockObj. AddLine(StartPoint,EndPoint) ‘向块blockObj添加横线图元
Set TextObjl=blockObj. AddText( Textjiaodu ,in-sertionPnt,3) ‘向块blockObj添加角度
TextObjl. Color= ColorBlock:TextObjl. StyleName=”hwxh” ‘设置文字颜色和字体
下面将制作好的块插入到图中的相应位置,其中InsertionPnt为在图形中的插入点坐标,BlockName要插入的图块名,Xscale X向的缩放比例,Rotation旋转角(弧度值):
Set blockRefObj =ThisDrawing. ModelSpace.InsertBloc.k( InsertionPnt, BlockName, Xscale, Yscal,e,Zscale,Rotation)
由于标注项只有文字前缀和里程2项,对线路的起点和终点需要做特殊处理,在这里不予讨论。
2.5标注示例
图4为一段津华线原油管道在天津市范围内的某段带状电子地形图,其中加粗的黑线为用PLine命令绘制的设计线路中线,针对折点JH_004,“0+269. 96”为当前折点处的连续水平里程,255。22 ’37”为当前折点的左角。
3结语
针对津华线管道项目,在此采用AutoCAD二次开发的方式来快速地获取管道中线信息,完全避免了人工量算时的点位选取误差、里程累加误差、角度量算误差、手工输入误差等多重偶然性误差的产生,提高了数据的准确性,对本项目管道最佳走向的获取发挥了重要的作用。
4摘要:针对津华线管道线路的设计,探讨了如何对AutoCAD软件进行简单的二次开发,并能快速地实现对管道设计线路中线的角度、里程数、标识序号等的自动量算及标注,以满足线路的设计施工需要。
上一篇:关于单点卡伯值分析仪SPK-5500在化学浆线应用的研究
下一篇:返回列表