AutoCAD二次开发案例——结构面赤平极射投影图

2015-01-12 09:02李保代波
重庆建筑 2015年11期
关键词:投影图大圆产状

李保,代波

(重庆市地质灾害防治工程勘查设计院,重庆 400700)

0 前言

我们的岩土工程勘察设计工作图件多离不开AutoCAD制图软件,但工作中常常需要绘制一些特殊的图件,这些特征图件若在AutoCAD中手工绘制,将是一件费时费力的事情,但AutoCAD提供了程序应用界面,用户可以利用许多编程语言编制自己需要的程序在AutoCAD中执行,以提高用户的工作效率。

AutoLISP是为扩展和自定义AutoCAD功能而设计的一种编程语言,它的程序编制过程十分简单、而且直接,可以不需要专门的编程界面,以文本文件的形式,在记事本中就可以直接编辑;而其程序的加载也十分简单,只需把编制好的程序直接用鼠标托拽入AutoCAD窗口界面中,也可通过其它方式自动加载进AutoCAD中,加载后就可以象使用AutoCAD的内部命令一样,输入定义的命令名,直接执行。

结构面赤平极射投影图是岩土工程勘察中对岩质边坡稳定性进行分析的基本图件,若是采用手工绘制,将是件非常费时费力的事情,本文运用AutoLISP语言编制的自动成图程序,采用在AutoCAD窗口的命令栏,交互输入结构面参数而直接生成结构面赤平极射投影图,其做图方法简单、直接,大大提高工作效率。

1 赤平极射投影图原理[5]

赤平极射投影是解析平面和直线的空间关系的一种图解方法,在岩体工程研究中,利用赤平极射投影来表示岩体中各结构面和临空面的方向和角度,以及它们之间的角距,可以在投影图上简便地确定它们的夹角和组合关系,确定岩体的结构特征,完全用图解的方法代替繁杂的公式演算,既简便迅速,也比较形象直观。

在赤平极射投影图上,外圆为赤道大圆,代表赤道平面(既水平面),其上、下、左、右分别代表北(N)、南(S)、西(W)、东(E)方位,并按360°方位角分度。各结构面投影在赤道大圆上反映为一条圆弧线:弧线与赤道大圆两侧交点的连线为大圆的一条直径,代表了结构面的走向;弧线弯曲方向代表结构面的倾向;弧线中点距大圆圆心的距离代表了结构面的倾角,弧线中点距圆心越近、倾角越大(通过圆心,倾角为90°),弧线中点距圆心越远、倾角越小(通过大圆,倾角为0°)。

弧线中点距大圆圆心的距离计算公式为:

ox=r×tan(π/4-Φ/2)

式中:ox——弧线中点至圆心距离;

r——赤道大圆半径(本程序设置大圆半径为25mm);

Φ——结构面倾角。

结构面产状的表达式为:倾向∠倾角,

例如:结构面产状为58°∠32°其赤平极射投影图见图1。

图1 产状为58°∠32°结构面赤平极射投影图

其中:NWSE为赤道大圆(本程序设定半径为25mm),AXB为结构面的投影圆弧(产状为58°∠32°),AB为结构面的走向直径(走向为328°-148°),XO的指向代表结构面的倾向(58°),X点距离圆心O点的距离为13.86mm代表倾角的大小(32°)。

2 程序编制思路

程序在执行的过程中采用交互方式,以便在AutoCAD的命令栏中输入相关参数。

首先为编制的程序定义一个命令名称,以便在AutoCAD的命令栏直接输入命令名,既可执行本程序。

程序执行后,第一步,在指定位置处自动画出大圆,并在大圆相应位置标注出北(N)、南(S)、西(W)、东(E)及圆心,在大圆下部标注图件名称。

第二步,在命令栏中输入结构面的产状参数,每输入一条结构面参数,就在大圆中自动画出一条结构面圆弧,循环直至全部结构面参数输入完成。

第三步,结束程序,完成赤平极射投影图。

3 程序编制详解

本程序使用AutoLISP语言编制,可以用文本文件(.txt)直接编辑,编辑完成后直接保存,将文件的后辍.txt直接改成.lsp既可。

在AutoLISP程序中,可以加入中文注释,用以解释某段语句的含义,便于其它人或以后修改时明白语句的内容,注释方式为:以半角分号作为注释的分隔符,分号之后的内容即为注释,注释可以单独一行,也可以附在某语句后,而在程序运行时,注释部分的内容不参与程序的运行。

(1)首先为程序定义一个命令名称[1](定义的名称不能与AutoCAD内部命令重名,以免引起程序执行错误),在AutoCAD的命令栏直接输入定义的命令名,既可执行本程序,本程序命令名称定义为:CPTYT。语句如下:

(/oce1 oce2 oce3 oce4 oce5 p1 pz1 R fn1 n1 n2 qxc qxp qx qjp qj pt1 pt2 pt3 a1 str);定义本程序命令名称为CPTYT,括号中为定义本程序中所用到的所有变量名称。

(2)定义在AutoCAD中执行返回操作时,本程序返回时的起点,语句如下:

(command"undo""be")

(3)保存系统原变量值(以便结束本程序后恢复系统变量环境),并按本程序的运行要求修改为新的系统变量值[2],语句如下:

(setq oce1(getvar"cmdecho");保存命令响应原变量值。

oce2(getvar"OSNAPCOORD");保存坐标数据优先级原变量值。

oce3(getvar"OSMODE");保存捕捉原变量值。

oce4(getvar"ANGDIR");保存角度正方向原变量值。

oce5(getvar"ANGBASE"));保存基准角度原变量值。

(setvar"cmdecho"0);关闭命令响应。

(setvar"OSNAPCOORD"1);坐标数据优先级设为:键盘输入替代对象捕捉设置。

(setvar"OSMODE"7095);改变捕捉模式。

(setvar"ANGDIR"0);角度正方向为逆时针。

(setvar"ANGBASE"0);基准角度东方为0。

(4)定义一个字体样式、并设置为当前字体样式,新建一个图层、并设置为当前图层(以免与其它内容混在一个图层上),语句如下:

(if(=(Tblsearch"style""BG_ST")nil)

(command"-style""BG_ST""宋体"00.80"n""n"));定义一个文字样式,样式名称为“BG_ST”,采用宋体,宽高比为0.8。

(command"textstyle""BG_ST");设置当前字体样式为“BG_ST”。

(If(=(Tblsearch"layer""结构面")nil)

(command"-layer""n""结构面""c"7"结构面""s""结构面"""));定义一个新图层,图层名称为“结构面”,颜色用7号(白色)。

(command"-layer""c"7"结构面""s""结构面""");设置“结构面”为当前图层。

(5)用鼠标在AutoCAD中指定赤平极射投影图的绘制位置[4](大圆圆心的位置),并设置大圆的半径,语句如下:

(setq p1(getpoint" 请指定绘图基点:");等待用鼠标在AutoCAD中指定大圆圆心的位置。

pz1(polar p1035);计算结构面的注释位置。

R 25);设置大圆半径为25mm。

(6)绘制大圆[3],标注北(N)、南(S)、西(W)、东(E),并标注图名,语句如下:

(command"zoom""w"(polar p1(*pi 0.5)40)(polar p1(*pi 1.5)50));根据指定的基点缩放窗口至合适位置及大小。

(command"line"(polar p1 pi 2.5)(polar p102.5)"");画圆心处短横线。

(command"line"(polar p1(*pi 0.5)2.5)(polar p1(*pi 1.5)2.5)"");画圆心处短竖线。

(command"line"(polar p1025)(polar p1026.5)"");画大圆东标注短线。

(command"line"(polar p1(*pi 0.5)25)(polar p1(*pi 0.5)26.5)"");画大圆北标注短线。

(command"line"(polar p1 pi 25)(polar p1 pi 26.5)"");画大圆西标注短线。

(command"line"(polar p1(*pi 1.5)25)(polar p1(*pi 1.5)26.5)"");画大圆南标注短线。

(command"circle"p1 R);画出大圆。

(command"text""ml"(polar p1028)2.50"E");标注大圆东。

(command"text""bc"(polar p1(*pi 0.5)28)2.50"N");标注大圆北。

(command"text""mr"(polar p1 pi 28)2.50"W");标注大圆西。

(command"text""tc"(polar p1(*pi 1.5)28)2.50"S");标注大圆南。

(command"text""m"(polar p1(*pi 1.5)38)3.20"结构面赤平极射投影图");在大圆的下方,标注图名。

(7)在命令栏输入结构面的产状参数(倾向、倾角),控制倾向为0~360°之间、并为整数,控制倾角为0~90°之间、并为整数,输入一条结构面参数、画出一条结构面弧线、并用文字标注出序号及其产状,并循环至全部结构面输入完成[1],语句如下:

(setq n11 n2888)(while(=n2888);循环绘制圆弧及结构面注释起点。

以下内容为等待输入结构面倾向,并控制倾向范围为0~360°之间,且为整数。

(setq qxc 888)(while(=qxc 888)(if(not(setq qxp(getint" 输入结构面倾向<退出>:")))

(setq qxc 886))(if(=qxc 886)(setq qxc 886)(cond((

(setq qxc 888)(princ"--倾向数值太小,重新输入--"))

((>qxp 360)(setq qxc 888)(princ"--倾向数值太大,重新输入--"))

(t(setq qxc 880)))))

(if(=qxc 880)(setq qx(/(*(-90 qxp)PI)180)))

以下内容为等待输入结构面倾角,并控制倾角范围为0~90度之间,且为整数。

(if(=qxc 886)(setq qxc 886)(setq qxc 888))

(while(=qxc 888)(if(not(setq qjp(getint" 输入结构面倾角<退出>:")))

(setq qxc 886))(if(=qxc 886)(setq qxc 886)(cond((

(setq qxc 888)(princ"--倾角数值太小,重新输入--"))

((>qjp 90)(setq qxc 888)

(princ"--倾角数值太大,重新输入--"))

(t(setq qxc 880)))))

(if(=qxc 880)(setq qj(/(*qjp PI)180)))

以下内容为:根据输入的结构面产状参数,计算出圆弧的位置坐标,并画出结构面圆弧,在弧线的中心点标注结构面序号。

以下内容为:将输入的结构面序号及其产状内容,用文字标注在大圆的右侧。

(cond((=qxc 880)

(progn

(setq str(strcat(itoa n1)".结构面产状:"(itoa qxp)"°∠"

(itoa qjp)"°"))(command"text""tl"pz12.80 str)

(setq n1(1+n1)pz1(polar pz1(*pi 1.5)6)

n2888)))(t(progn(setq n2886)))));循环绘制圆弧及结构面注释终点。

(8)恢复系统变量值,还原系统环境,语句如下:

(setvar"cmdecho"oce1);恢复命令响应。

(setvar"OSNAPCOORD"oce2);恢复坐标数据优先级设置。

(setvar"OSMODE"oce3);恢复捕捉模式。

(setvar"ANGDIR"oce4);恢复角度正方向。

(setvar"ANGBASE"oce5);恢复基准角度。

(9)定义在AutoCAD中执行返回操作时,本程序返回时的终点,语句如下:

(command"undo""e")

(10)结束本程序的运行,语句如下:

(princ))

4 程序加载及运行实例

假设一个岩质边坡有如下几组结构面(结构面产状见表1),使用本程序成图的过程如下。

表1 结构面产状参数表

(1)加载程序

最简单的加载方式:将程序文件直接托拽入AutoCAD窗口中,即可加载。在命令栏最后若显示“C:CPTYT”,即表明程序加载成功,见图2。

图2 程序加载示意图

(2)运行程序

在命令栏直接输入定义的命令名“CPTYT”,按回车键,即运行本程序,同时在命令栏会提示“请指定绘图基点”。

此时程序等待用户输入绘图基点位置,用户用鼠标在AutoCAD窗口中点击某位置后,程序会将此位置作为大圆的圆心,开始自动绘制完成大圆,标注圆心十字短线、北南西东方位、图件名称等,并以该点作为中心缩放窗口中内容至合适大小,同时在命令栏会提示“输入结构面倾向”,见图3。

图3 程序运行示意图(1)

接着,用户在命令栏输入第一条结构面的倾向“127”并回车后,命令栏会继续提示“输入结构面倾角”,用户在命令栏输入第一条结构面的倾角“68”并回车后,程序会自动绘制出该结构面的圆弧线,且在图的右侧会用文字注释该结构面的序号及产状,同时命令栏会继续提示“输入结构面倾向”……,见图4。

图4 程序运行示意图(2)

用户根据命令栏的提示,依次循环输入第二条至第五条的结构面倾向、倾角,待第五条结构面的倾角“23”输入并回车后,命令栏仍会继续提示“输入结构面倾向”,而此时全部结构面的倾向及倾角参数都已经输入完成,不再需要输入,则直接按回车键,本程序执行结束并退出,最终完成后的结构面赤平极射投影图,见图5。

图5 完成的结构面赤平极射投影图

5 边坡稳定性分析实例[5]

以上述的结构面赤平极射投影图为例,通过各结构面圆弧的位置关系(图6),可以对边坡的稳定性做出分析如下:

图6 边坡结构面稳定性分析图

(1)2号岩层面圆弧与1号边坡面圆弧方向一致,说明边坡为顺向坡,同时2号岩层面圆弧在1号边坡面圆弧的外侧(图6中竖向阴影部分),说明层面倾角小于边坡的坡角,即本边坡类型为顺向坡,且处于外倾临空状态,容易沿岩层面发生整体性下滑,边坡不稳定。

(2)3号及4号两组裂隙面圆弧与1号边坡面圆弧大角度相交,说明本两组裂隙面与边坡面为切向关系,边坡不会沿该两组裂隙面发生滑动。

(3)5号裂隙面圆弧与1号边坡面圆弧方向相反,说明本组裂隙面与边坡面为反向关系,边坡不会沿该组裂隙面发生滑动。

(4)1号、2号、3号、4号圆弧线组面的梯形区域(图6中格子阴影部分)处于1号边坡圆弧形的外侧,说明由这4组结构面组成的契形岩体,倾向与边坡方向一致,该部分岩体会发生掉块,影响边坡稳定。

综上,本边坡类型为顺向坡,会发生两种形式的破坏,一种是会沿层面发生整体滑动,另一种是会发生小规模的掉块现象,边坡处于不稳定状态。

6 结束语

采用AutoLISP语言对AutoCAD进行二次开发编制的应用程序,具有简单、易用的特点,在AutoCAD中运行稳定、可靠,且与外部文件可进行数据交换,同时配合DCL对话框可实现许多CAD复杂功能,而各行业都有其特有的制图方法及所需的绘图功能,这些功能不可能由AutoCAD直接提供,了解掌握Auto-CAD的二次开发技术,将会给自己的工作提供极大地帮助。

[1]蓝屹生.Auto LISP学习引导[M].北京:中国铁道出版社,2003:40-42,184-186.

[2][美]斯特尔曼,[美]克里希南.精通中文AutoCAD 2000[M]王淇,译.北京:机械工业出版社,2000:798-814.

[3]Ralph Grabowski.AutoCAD2000命令参考手册[M].倪伟英,译.北京:机械工业出版社,2000:64-65.

[4]Sham Tickoo.AutoCAD2000高级用户指南[M].潘宏,译,北京:机械工业出版社,2000:915-918.

[5]孙玉科,古迅.赤平极射投影图在岩体工程地质力学中的应用[M].北京:科学出版社,1980:10-12,62-70.

猜你喜欢
投影图大圆产状
基于分裂状态的规范伪括号多项式计算方法
画大圆
浅谈砂岩储层的岩石学特征
激电联合剖面在判断矽卡岩型矿床矿体产状中的应用
“三点解析法”估算地质体产状及应用
高密度电阻率法在山坑石墨矿中的应用
填数
图解荒料率测试投影图及制作方法
虚拟链环的Kauffman尖括号多项式的Maple计算
失落的一角