刘吉波 任传建 王志红
(贵州工程应用技术学院矿业工程学院 贵州省毕节市 551700)
矿山联系测量中的二井定向井下导线计算,从根本上讲属于无定向导线解算范畴。林广元提出了3种无定向导线的平差计算方法,并分别对其精度进行了研究[1],田正华等研究了采用四参数转换模型解算两井定向井下导线的方法[2],沙从术等研究了利用AutoCAD图解计算两井定向导线的原理与方法,并通过实例验证了结果的可靠性[3]。本文拟在此基础上利用AutoLISP进行二次开发,实现井下无定向导线的自动解析计算。
二井定向井下导线示意图如图1所示,图中#1、#2为井筒钢丝投影点,坐标已知,P1、P2…Pn为井下导线点。观测值为每一条边的边长和导线前进方向上的每一个左角。程序首先输入二个已知点坐标、观测的边长和角度,程序支持通过文件自动输入和对话框手动输入两种数据输入模式。
图1:二井定向井下导线图
AutoCAD软件默认绘图坐标系为世界坐标系,即笛卡尔坐标系,二井定向数据为高斯平面直角坐标系,AutoLISP读取坐标数据时自动将点的X坐标和Y坐标进行互换,最终解析校正后坐标成果输出时,再次调换X、Y坐标,输出各测点的测量坐标。
假设井下共n个导线点,无定向导线共有n+2个测点,n+1条边,n个左角。#1坐标存于表变量Pb,#2坐标存于表变量Pe,边长存于表listtraverses中,角度存于表listangles中。
为减少后续编程难度,提高程序计算效率,无定向导线计算绘制时,#1坐标使用给定已知坐标,边#1-P1的方位假定为90°00′00″,即在AutoCAD中,边#1-P1指向X轴正向。
推算导线边的方向存储于表directions中,各导线点计算坐标存储于表pointsxy中,利用“pline”命令绘制导线,完成了导线解析。分别计算导线缩放系数m和旋转角θ,并依次使用“scale”和“rotate”命令对导线进行缩放和旋转,即完成了导线校正。最后从导线中提取坐标信息并输出至文件保存。
二井定向井下导线解析校正程序流程图如图2所示。
图2:程序流程图
利用记事本或其他文本编辑软件编写程序菜单项,并保存为twominemenu.mnu文件,菜单文件内容如下[4]:
***MENUGROUP=TWOMINE
***POP1
[二井定向]
[解析计算]^C^C(load "twomine");(twomine)
[保存数据]^C^C(load "savedata");(savedata)
其中,load后的字符串为点击菜单项要加载的AutoLISP程序,最后括号中为实际调用执行的函数名称。在AutoCAD命令行中通过“menuload”命令可以加载自定义的菜单,加载成功后系统菜单如图3所示,twominemenu.mnu文件中定义的菜单项插入在AutoCAD主菜单之后。
图3:自定义菜单项
为了方便二井定向测量数据输入,利用对话框控制语言DCL(Diglogue Control Language)设计对话框如图4所示[5-6]。通过输入模式单选按钮,可以选择数据加载模式,执行文件输入时,会自动将数据显示在对话框相应控件中,可以进行检查和修改操作。以下以对话框最下部的三个按钮为例说明AutoLISP中如何进行DCL设计。
图4:数据输入对话框
在AutoLISP程序中通过上述代码为“加载数据”和“解析计算”按钮添加响应事件,“退出”按钮执行程序默认事件,不用单独添加。action_tile建立了控件和事件之间的联系,“load”“count”为控件变量名称,loaddata和countdata为单击按钮时调用的函数,(done_dialog 1)作用是在点击“解析计算”按钮后,退出对话框,并返回数值1,供后续程序使用。
在AutoLISP中可以使用polar函数计算点位坐标,其调用语法为(polar ptangdist),参数pt为一个二维或三维的点,即边的起点;ang是边的方向,从X坐标轴正向沿逆时针至计算边的角度,单位是弧度;dist是边的长度;返回值为边的末端点坐标[6]。根据后一条边Pi-1-Pi的方向和给定的角度∠Pi-1PiPi+1推算前一条边Pi-Pi+1的方向是自动展绘测点的关键。为此设计一子函数实现这一功能,代码如下:
函数direction的第一个参数tback是后一条边的方向,angle是两条边之间的夹角(左角),返回值是前一条边的方向tbefore,计算的原理如图5所示。从图5可知,Pi-Pi-1的方向值等于tback加上π,Pi-Pi+1的方向值等于Pi-Pi-1的方向值减去angle。如果tbefore大于2π,则从中减去2π,如果tbefore小于0.0,则加上2π。
图5:方向推算原理图
推导出每条边的方向值,则容易算得每个点的坐标。根据所有点坐标,绘制多段线,并获取多段线图元的句柄,供校正之用。绘制导线的AutoLISP代码如下:
利用AutoLISP的函数distance和angle,根据#1和#2给定的坐标值可以得到钢丝间真实的长度D12和方向值T12,根据解析计算的#1和#2的坐标值可以得到钢丝间解析长度D12′和方向值T12′。导线校正时,缩放系数m=D12/D12′,旋转角度θ=T12-T12′。调用rotate和scale命令,以#1为基点对导线进行旋转和缩放操作,即可完成导线校正,AutoLISP代码为:
;pm1为#1坐标,entlast为多段线图元
;的句柄
(command "rotate" (entlast) "" pm1 theta)
(command nil);结束rotate命令
(command "scale" (entlast) "" pm1 m)
(command nil);结束scale命令
对导线进行解析和校正后,利用AutoLISP可以得到各点最终坐标,代码如下:
以《测量学》教材中的实例的部分数据[7],利用上述AutoLISP程序实现如下:
钢丝坐标
X1 609967.758
Y1 507993.557
X2 609924.779
Y2 508044.026
井下点个数5
角度
86.28202
155.08552
116.08355
328.11343
201.31569
边长
15.9132
37.9229
13.8807
17.2131
19.6327
13.7574
通过AutoLISP程序解析校正,生成图形如图6所示,生成结果数据文件内容如下。
图6:解析校正后的导线图形
两井定向解析结果:
#1, 609967.758, 507993.557
P1, 609953.146, 507987.256
P2, 609940.300, 508022.936
P3, 609941.522, 508036.763
P4, 609957.582, 508042.957
P5, 609938.292, 508046.608
#2, 609924.779, 508044.026
采用AutoLISP程序设计语言和DCL在AutoCAD平台上进行了二次开发,实现了二井定向无定向导线的可视化输入及自动解析校正,并以具体实例进行了验证。结果表明,程序操作简单,便捷,直接成图并输出计算成果,可为利用AutoCAD二次开发解决其他测量问题提供参考。