CAD技术在水利水电工程中的应用
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
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
128.44,235.66
文件储存后,执行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 "")