CAD技术在水利水电工程中的应用

CAD技术在水利水电工程中的应用
CAD技术在水利水电工程中的应用

CAD 技术在水利水电工程中的应用

1 概述

美国Autodesk 公司开发的AutoCAD 系统自1982年推出以来,以其使用方

便、功能强大和系统开放性一直独领风骚。成为各工程领域首选的CA D 系统。

水利水电工程领域利用AutoCAD 平台进行二次开发也取得了一系列成果,如90年代以来连续开发的水电站地面厂房CAD 系统、重力坝CAD 系统、隧洞CAD 系统、水机油汽水CAD 系统、地质柱状图CAD 等均取得了较好的应用成效。但水电工程设计的复杂性决定了任何现成的CAD 软件都有其局限性,设计过程中许多咨询题还只能用原始的方法解决。本文通过几个实例对AutoCAD 二次开发常用的Lisp 语言在水电工程设计中的应用进行了初步探讨,期望能够起到抛砖引玉的作用。

VisualLisp 语言是AutoCADR14 版本以后提供的全新的开发环境,是嵌于AutoCAD 内部,将Lisp 语言与AutoCAD 相结合的产物,是一种智能型语言。利用AutoLisp 能够灵活方便地增加AutoCAD 新命令,几乎无限地扩展AutoCAD 新功能,

2 应用实例

2 .1 坐标画线利用已知坐标点画线是设计工作中经常遇到的咨询题,如河道、堤防等实测断面、水位流量关系曲线、堰面曲线等数据的处理,均可归结为坐标画线咨询题。关于堰面曲线等有函数方程的曲线能够利用EXCEL 按照期望的步长自动生成一系列坐标点。关于测量常用的起点距-高程形式的数据,也能够利用EXCEL 转化成坐标点形式。

( 1)利用脚本文件(.SCR)

利用任何文本编辑器如Note、Uedit、Word、Excel 等建立纯文本文件E

X1.SCR,注意文本文件后缀必须为.SCR,坐标之间用半角逗号分开,文件中不承诺显现空格,文件最后一行必须为空回车。文件建立时,能够直截了当把EXCEL 或其他

文件中的坐标表利用拷贝、粘贴功能加入脚本文件中。

Pline

345.66,238.65

213.45,124.56

文件储存后,执行AutoCAD 中“工具”下的“运行脚本” ,在显示的窗口中查找并选中EX1.SCR,屏幕上会赶忙显示所绘线条。

(2)利用LSP 程序

建立坐标表文件EX2.DAT,后缀任意,能够依次输入多段曲线,中间用曲线名称分开,程序自动绘制多条曲线并可标注坐标表。

“曲线1”

213.45,124.56

128.44,235.66

345.66,231.78

“曲线2”

433.34,567.23

434.12,464.12

利用AutoCAD中“工具”菜单下的“VisulLisp编辑器”建立DRLINE.

LSP 文件如下

(defunC:drline()

(if fn

(setq fn (getfiled "坐标点文件名"fn "" 2))

(setq fn (getfiled "坐标点文件名""" "" 2))

)

(setq f (open fn "r"))

(setq p0 (getpoint "n 画线起点:"))

(setq bz 0 mm 1)

(command "pline")

(while (/= bz 1)

(setq md (read-line f))

(if (/= md nil)

(setq zbb (read md))

(setq bz 1)

)

(setq dx (car zbb) dy (cadr zbb)) (setq p1 (list (+ dx (car p0))

(+ dy (cadr p0)))

)

(command p1)

(setq mm (1+ mm))

)

(command "")

(close f)

)

文件存盘后,加载运行,相当于新增加了坐标画线命令DRLINE ,按提示选中存放坐标表的文件即可实现自动绘制曲线。

2 .2 地势切剖面水电工程设计中经常遇到在地势图上切剖面的咨询题,借助VisualLisp 能够实现快速切剖面。

( 1) 初始地势图处理

把带z坐标的地势平面图进行变换,变换后z坐标值成为层名,为加快切剖面运行速度,把“LWPOLYLINE ”和” SPLINE”均转化为” LINE “线, 程序如下(defunc:pltol()

;LWPOLYLINE 转化为LINE

(setqn 0)

(setqe (ssget"X" (list (cons 0 "LWPOLYLINE")))) (setqsh (sslength e)) (if e

(while (< n sh)

(setq e1 (ssname e n))

(command "pedit" e1 "d" "")

(setq x (entget e1))

(setq ngc (atof (setq la (fld 8 x))))

(command "explode" e1)

(setq n (+ n 1))

) ) )

(defun fld(num lst)

(cdr (assoc num lst))

)

(defunc:spltol ()

;SPLINE 转化为LINE

(setqn 0)

(setqe (ssget "X" (list (cons 0 "SPLINE"))))

(setqsh (sslength e))

(if e

(while (< n sh)

(setq x (entget (setq e1 (ssname e n))))

(setq nla (itoa (fix (caddr (fld 10 x)))))

(if (= (fld 0 x) "SPLINE")

(progn

(command "layer" "n" nla "c"

"6"nla "s" nla "")

(command"line")

(setq nm (length x)

dzs (fld 73 x) dzs1 (fld 7 4 x))

(while (> nm 5)

(if (= (car (nth nm x)) 10)

(progn

(setq b1 (nth nm x))

(setqx1 (cadr b1))

(setqy1 (caddr b1))

(setqz1 (cadddr b1))

(setqglb (list x1 y1)) (commandglb)

) )

(setq nm (- nm 1))

)))

(command "")

(setq n (+ n 1))

)))

(2)切剖面输入剖面编号,在平面地势图上指定两点确定剖面剖切线位置,指定剖面图起点,利用AutoCAD 的inters 函数搜索剖切线与地势图的全部交点,自动运算交点坐标,运算交点与剖面位置起点的距离,按各交点高程和与起点的距离形成剖面图各点坐标,即可用本文实例1 坐标画线生成地势图的剖面。

(defundxtent1 ()

(setqn 0 xdzb nil)

(setqxds 0)

(setqsh (sslength e1))

(while (< n sh)

(setq x (entget (ssname e1 n)))

(if (= (fld 0 x) "LINE")

(progn

(setqdxtgcgc (fld 8 x))

(setqdxtgcgc (atoi dxtgcgc))

(if(> dxtgcgc 10)

(progn

(setq pst (fld 10 x))

(setq pet (fld 11 x))

(setq zb (list gc

(list (car pst) (cadr pst))

(list (car pet) (cadr pet))

))

(setq xdzb (cons zb xdzb))

(setq xds (+ xds 1))

))))

(setq n (+ n 1))

))

(defunc:dxtsec ()

(setqpmh (+ pmh 1))

(setqpmh (getstring "n 剖面号"))

(setqpt1 (getpoint "n 剖切位置起点:"))

(setqpt2 (getpoint pt1 "n 剖切位置终点:"))

(setqpt3 (getpoint "n 剖面图布置:"))

(setqp01 pt3)

(setqel (ssget "F" (list pt1 pt2)));利用AutoCAD 的目标选择“ F” 方式选取与剖切线相交的地势线。

(dxte nt);猎取与剖切线相交地势线的坐标

(setqmxgc -100)

(setqmngc 10000)

(setqm 0 pmp nil)

(setqn xds i 0)

(while (< i n)

(setq crosp

(inters pt1 pt2 (nth 1 (nth ixdzb)) (nth 2 (nth i xdzb))

1) );求剖切线与地势线的交点(if (/= crosp nil) (progn

(setqdxtgcgc (nth 0 (nth i xdzb))) (setqmxgc (max mxgc

dxtgcgc)) (setqmngc (min mngc dxtgcgc))

(setqdst (distanee pt1 crosp));剖切线起点与交点的距离

(setqdst (* (/ blcz dxthtbl) dst)) (setqpmp (cons (list m dst

dxtgcgc) pmp)) (setqm (+ m 1))

))

(setq i (+ i 1))

))

2.3 沿曲线标注在设计中会遇到沿给定曲线进行标注咨询题,如平面布置图中的开挖线符号沿开挖轮廓的标注,剖面图中岩石符号沿轮廓线标注、点筋标注、沿任意曲线进行汉

字标注等。此类咨询题要紧应用AutoCAD的Measure或divide 命令来解决。两个命令的要紧差不是前者按指定的长度在曲线上标注,后者按给定的分段数等分曲线并在等分点处进行标注。要标注的轮廓曲线最好用pline 线,要标注的符号预先做成图块,图块采纳单位块,执行measure或divide命令,选取要标注的曲线,指定标注符号,分段长度或分段数即可完成标注,当发觉标注的符号太密或太疏时,能够执行erase命令

选择P 进行删除,比例不合适或符号方向不正确,能够利用特性编辑器,选中所有标注符号,对标注符号的比例和旋转角度进行调整,直到中意为止。关于更高级的应用,能够编制LSP 程序,实现符号和文字沿任意曲线标注。

2.4 表格生成

AutoCAD 本身没有表格处理功能,设计图纸中工程量表、钢筋表等涉及到表格生成的咨询题能够采纳以下方法处理:

(1)直截了当把Word或ExceI文件中的表格直截了当粘贴到CAD图形中,修改时只要双击图中的表格即可进入Word或Excel中进行编辑修改,修改完成后退出即可返回到AutoCAD 中连续进行设计,该法优点是方便,快捷,易于把握,能够充分利用Excel 的强大运算功能。缺点是表格在Aut oCAD 中并不是一个一般图元,无法利用CAD 功能对表格的字高、颜色和线宽进行编辑。

( 2)编制LSP 程序,依次输入表格标题、表格行数、表格列数、表格行高和列宽以及表格插入点等参数,能够自动生成表格,表格中差不多按仿Excel 形式填入了文字,能够用字处理软件对表格中文字进行编辑修改。

(defunC:mtab()

(setqtb1 nil tb2 nil tb3 nil)

(setqrows (getint " 表格行数"))

(setqcols (getint "表格列数"))

(setqrowh (getreal "行高"))

(setqcolw (getreal "列宽"))

(setqp1 (getpoint "n 表格左上角点位置:")) (command"pline" p1 "w" "0.5"

"0.5" (setqp2 (list (+ (car p1) (* cols colw)) (cadr p1)))

(setqp4 (list (car p2) (- (cadr p2) (* rows rowh)))) (setqp3 (list (car p1) (- (cadr p2) (* rows rowh)))) C"

(setqn 1) (while(v n rows);绘水平线表格

(command "pline" (list (car p1) (- (cadrp1) (* n rowh))) "w"

(list (car p2) (- (cadr p2) (* rowh n))) "") (setq n (+ n 1))

)

(setqn 1)

(while(< n cols) ;绘垂直表格线

(command"pline" (list (+ (car p1) (* n colw)) (cadr p1)) "w""0" "0 " (list (+ (car p1) (* n colw)) (cadr p3))

"")

(setq n (+ n 1))

)

(command"text" "m" (list (+ (car p1) (* 0.5 cols colw))

(+(cadr p1) 5)) "3" "0" "TITLE" )

(setq n 0)

(while(< n rows)

(setq m 0)

(while (< m cols)

(cond

((< m 26) (setq bzstr (chr (+ 65 m)))) ((>= m 26) (setq

bzstr (strcat (chr (+ 64 (/ m 26)))

(chr (+ 65 (- m (* 26(/ m 26))))))))

)

(command "text""m" (list (+ (car p1) (* 0.5 colw) (* m colw)) ;表格内容标注

(- (cadr p1) (* 0.5 rowh) (* nrowh))) (getvar"TEXTSIZE") "0"

(strcat bzstr (itoa (+ n 1)))) (setq m (+ m 1))

))

(3)生成钢筋表

钢筋表和材料表生成是施工图设计中比较繁琐的一项工作,专门容易 出错,此处

介绍利用程序进行钢筋表和材料表自动生成的方法。利用造字

和,以后在其它电脑上只要把E

生成钢筋表时按指定表格位置生成钢筋表表头,按照提示输入钢筋编 号(能够不连续)、钢筋等级和直径如

20、 16,交互绘制钢筋简图和标 注长度(标注长度能够输入多种形式如 50~200表示长度等差变化;30,40, 50表示一个编号多个钢筋长度,),钢筋根数,构件组数,程序自动完成表 格其余各项(总长度、重量,关于I 级钢筋长度中自动计入弯钩长度)的填 写,备注栏中自动填入等差变化钢筋的等差值。

采集钢筋表中直径、等级和总长信息,通过自动分类汇总,生成钢筋 表的材料表。

2.6高程小数位数处理

尺寸标注小数位数专门容易调整,但诸如高程、表格中数字要调整则 专门困难,借助LSP 程序的调整专门方便,只要选取需要调整的数字,按 照提示输入需要保留的小数位数,则程序自动对所有选种数字进行修改。

(defu nen tsgc()

(setq n 0)

(setqsh (ssle ngth e1))

(while(v n sh) (setq x (entget (ssname e1 n)))

(if (=(fld 0 x) "TEXT")

(prog n

(setq agc (fld 1 x))

(setq c (substr agc 1 1))

(set qn (+ n 1)) 程序增加- J 卄级钢筋的直径标注符号

UDC.TTE

(if (or (= c "+") (= c "-") (and (>= c "0")(<= c "9")))

(progn

(if (or (= c "+") (= c "-"))

(setq bgc (substr agc 2))

(setq bgc agc)

)

(setq cgc (atof bgc))

(setq zh (rtos cgc 2 gcws))

(if(or (= c "+") (= c "-"))

(setqzh (strcat c zh)))

(setq x (subst (cons 1 zh) (assoc 1 x) x))

(entmod x)

)

))

))

(setq n (+ n1)))

)

(defunc:yxws()

(setqe1 (ssget))

(setvar "dimzin" 0)

(setqgcws (getint " 保留小数位数:"))

(ife1 (entsgc) (print "n not found"))

(setqx nil)

)

2.7 应用软件前、后处理由于软件升级滞后,一些常用软件后处理功能专门弱或没有,能够利用LSP 程序结合AutoCAD 增加或简化前后处理功能。下面结合平面渗流分

析程序STSE 软件对其前、后处理功能的实现进行介绍:

(1)前处理

STSE为平面渗流有限兀程序,单兀划分和单兀、节点编号工作量最大,能够借助其它通用有限元软件的前处理功能如Ansis 、Algor 、SAP84 等进行初步处理,

生成单兀、节点编号和节点坐标,而后按照STSE 数据文件的格式要求对数据文件进行编辑。

(2)后处理后处理成果要紧为:单兀网格图,浸润线和等势线。单兀网格图中有节点和单兀编号,不同渗透系数的单兀采纳不同的颜色,以便按照网格图直观地判定数据文件中几何参数和材料特性的正误;

第一分析STSE的输出结果文件的格式,搜索并选择其中要紧参数如单兀总数、节点总数和材料总数,把节点坐标和单兀信息分不储备,通过对单兀循环生成单兀网格图。

(defunc:seepmesh()

(iffn

(setqfn (getfiled "渗流结果文件名"fn "" 2))

(setqfn (getfiled "渗流结果文件名""" "" 2)))

(setqf (open fn "r"))

(setqmd (read-line f))

(while (/= (substr md 25 8) " 单兀总数")

(setq md (read-line f))

);定位单兀总数

(setqdyzs (atoi (substr md 58 5)));读单兀总数

(setqmd (read-line f))

(setqjdzs (atoi (substr md 58 5)));读节点总数

(setqmd (read-line f))

(setqclh (atoi (substr md 58 5))) ;读材料总数

(setqm 0)

(repeat clh

(setq m (+ 1 m))

(setq tcm (strcat "zclh" (itoa m)))

(command "layer" "m" tcm "c" (itoa m) tcm"") );按材料种类生成图层名称

(setqm 0 n 0)

(repeatdyzs对单元循环,dycfb中存放单元信息

(setqm (+ m 1))

(setqclh (nth 0 (nth m dycfb)))

(setqjdh1 (nth 1 (nth m dycfb)))

(setqjdh2 (nth 2 (nth m dycfb)))

(setqjdh3 (nth 3 (nth m dycfb)))

(setqjdh4 (nth 4 (nth m dycfb)))

(command "layer" "s" (strcat "zclh" (itoa clh))"")

(comma nd"pli ne";绘制单元网格

(nth jdh1 jdzbb)

(nth jdh2 jdzbb)

(nth jdh3 jdzbb)

(nthjdh4 jdzbb) "c")

(setqbzdzb (mapcar '+ (nth jdh1 jdzbb) (nth jdh2 jdzbb)

(nthjdh3 jdzbb) (nth jdh4 jdzbb)))

(setqbzdzb (list (/ (car bzdzb) 4.0) (/ (cadr bzdzb) 4.0)))

(command "text" "m" bzdzb "0.5" "0"(itoa m))

;标注单元号

(setqm 0)

(repeatjdz

(setq m (+ m

1))

(setq bzdzb (nth m jdzb

b))

(setq bzdzb (list (+ (car bzdzb) 0.0) (+ (cadr bzdzb) 0.0)))

(command "text" "m" bzdzb "0.5" "0"(itoa

m))

));标注节点号

(closef)

) 限于篇幅,等势线和浸润线生成程序不再赘述。同样,对工程设计中遇到的其它软件如:STAB 边坡稳固分析、SAP84 的输出文件均可进行类似后处理工作。

3 结语

AutoCAD 软件应用差不多在设计单位普及,VisualLisp 的显现关于提升Lisp 语言的编程效率和AutoCAD 应用水平具有重要意义。本文涉及的几个实例差不多在实际工作中发挥专门大作用,充分讲明在工程设计当中结合本专业要求开发一些简单有用的Lisp 小程序能够有效减轻设计人员的劳动强度,使AutoCAD 不仅仅是绘图工具,而真正成为设计人员得心应手的高效设计平台。

作者简介

耿振云男高级工程师中水北方勘测设计研究有限责任公司天津300222

31.1.1 脚本文件简介

脚本文件类似于Dos 操作系统中的批处理文件,它能够将不同的AutoCAD 命令组合起来,并按确定的顺序自动连续地执行。脚本文件是文本文件,扩展名为“ .SCR”,用户可使用任一文本编辑器来创建脚本文件。

因为脚本文件可使一些命令序列自动执行,因此常用来产生、编辑或观看图形,如幻灯放映、初始的图形设置等。但脚本文件不能使用对话框或菜单,当从脚本文件中发出打开对话框命令时,AutoCAD 运行该命令的命令栏含义而不是打开对话

框。

如第29 章中所述,用户能够通过命令行的开关设置,使AutoCA D 在启动时自动调用脚本。此外,用户也能够在AutoCAD 中运行脚本,其调用方式为:菜单:【Tools (工具)】宀【Run Script???(运行脚本)】

命令行:script (或不名scr)

注意AutoCAD 的“ undo”命令将每个脚本当作一个组,能够

用单个“ undo”命令舍弃一组脚本的操作。

讲明“ script ”命令可透亮地使用。

31.1.2 实例1 使用脚本文件绘制并显示图形

Step 1 创建脚本文件“ exam_draw.sc”r

(1) 使用Windows 附件中的“记事本”程序创建一个新文件。

(2) 在该文件中添加如下内容,如图31-1 所示。

注意其中调用“ exam_vlEw.scr”文件的路径应按照实际情形而

定。

(3) 以“ exam_draw.sc”r 为名储存该文件。

Step 2 创建脚本文件“ exam_view.scr”

(1) 使用Windows 附件中的“记事本”程序创建一个新文件。

(2) 在该文件中添加如下内容

(3) 以“exam_view.sc”为名储存该文件。

Step 3 运行脚本文件

进入AutoCAD 系统,调用“ script”命令弹出“ Select Script Fi le (选择脚本文件)”对话框,定位并打开步骤一中创建的“ exam_draw.sc” 文件。该文件的运行结果是在屏幕中间绘制一条直线和一个圆,而且直线

和圆绕中心不停地转动

实例讲明

1. 从实例中我们能够看到,脚本文件的内容实际上确实是在Aut oCAD 命令提示行中所用的命令的一个有序集合。脚本文件中的每一行对应着AutoCAD 命令提示行中的一个命令、一个选项的响应。

2. 脚本文件中能够包含注释,任何以“ ;”开始的行都被当作注释而在运行时被忽略。此外,脚本文件中所有包含空格的长文件名都必须被括在双引号中。

3. 需要提醒读者注意的是,脚本文件中的空格和空行在运行时相当于按Enter 键,因此,为了能正确地运行脚本文件,需严格操纵文件中空格和空行的使用,幸免余外的空格和空行。

4. 脚本文件在运行时不承诺输入新的信息,所有的信息都必须包含在文件内。

5. 运行中的脚本文件在按Esc键时,或在调用另一个SCRIPT命令时被终止。如果脚本文件被取消,或脚本文件遇到错误,同时造成该文件的执行被悬挂时,可使用RESUME命令连续运行。RESUME命令将跃过导致出错的命令,并连续执行剩余的脚本文件。

6. DELAY 命令用于设置时刻延迟。由于脚本文件是自动运行的命令序列,因此,一些操作发生得专门快。如果用户需要清晰地观看操作过程,则需要使用DELAY 进行必要的停顿。DELAY 命令的通常格式为:

DELAY Time

其中,Time为延迟时刻,取值范畴为0?32767,以毫秒为单位。

7. RSCRIPT命令用于无限制地重复执行脚本文件,直到用户强制取消为止。当用户要连续地执行同一个脚本文件时,该功能专门有用。

能够将系列命令写在文本文件中,用运行脚本的方法自动绘制图形, 这就相当于编制了一个程序,例如,画出已知坐标点的连线,把坐标数据都放在一个txt文本文件里(记事本格式):文件的开头是画直线的命令"_line", 随后每行是一对坐标数据,x和y之间是逗号隔开?然后把那个文本文件另存为.scr格式(autocad脚本文件.在CAD画图界面的命令行里输入"script"命令, 显现一个对话框,然后打开前面储存的那个脚本文件,就开始运行那个画图程序了,运行完那条线就画出来了.就这么简单. 另存为的对话框里,文件名用"XXXXX.scr",储存类型用"所有文件",编码用"ANSI".运行脚本仅写入命

令和参数,其它提示性的语句不写入,每个命令、每组参数都占一行,且其间不能有空格。遇有鼠标选择对象时,仍需鼠标选择。运用脚本,能够快速绘制参数组较大(点坐标较多)的图形,

相关主题
相关文档
最新文档