CAD技术在水利水电工程中的应用.docx
- 文档编号:28992160
- 上传时间:2023-07-20
- 格式:DOCX
- 页数:15
- 大小:21.05KB
CAD技术在水利水电工程中的应用.docx
《CAD技术在水利水电工程中的应用.docx》由会员分享,可在线阅读,更多相关《CAD技术在水利水电工程中的应用.docx(15页珍藏版)》请在冰豆网上搜索。
CAD技术在水利水电工程中的应用
摘要:
autocad是广大工程设计人员普遍使用的通用绘图软件,结合专业特点,通过对autocad系统的二次开发可以开发出满足各种用途的专业软件,即使对于普通设计人员也可以通过autocad内嵌的visuallisp语言方便地增加cad命令,扩充完善适合本专业的新功能,从而极大地提高工作效率,本文通过几个应用实例对autocad在水工设计上的应用进行了探讨。
关键词:
cad技术应用水利水电工程autocadvisuallisp语言
1概述
美国autodesk公司开发的autocad系统自1982年推出以来,以其使用方便、功能强大和系统开放性一直独领风骚。
成为各工程领域首选的cad系统。
水利水电工程领域利用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等建立纯文本文件ex1.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()
(iffn
(setqfn(getfiled"坐标点文件名"fn""2))
(setqfn(getfiled"坐标点文件名"""""2))
)
(setqf(openfn"r"))
(setqp0(getpoint"画线起点:
"))
(setqbz0mm1)
(command"pline")
(while(/=bz1)
(setqmd(read-linef))
(if(/=mdnil)
(setqzbb(readmd))
(setqbz1)
)
(setqdx(carzbb)dy(cadrzbb))
(setqp1(list(dx(carp0))
(dy(cadrp0)))
)
(commandp1)
(setqmm(1mm))
)
(command"")
(closef)
)
文件存盘后,加载运行,相当于新增加了坐标画线命令drline,按提示选中存放坐标表的文件即可实现自动绘制曲线。
2.2地形切剖面
水电工程设计中经常遇到在地形图上切剖面的问题,借助visuallisp可以实现快速切剖面。
(1)初始地形图处理
把带z坐标的地形平面图进行变换,变换后z坐标值成为层名,为加快切剖面运行速度,把“lwpolyline”和”spline”均转化为”line“线,程序如下
(defunc:
pltol()
;lwpolyline转化为line
(setqn0)
(setqe(ssget"x"(list(cons0"lwpolyline"))))
(setqsh(sslengthe))
(ife
(while( (setqe1(ssnameen)) (command"pedit"e1"d""") (setqx(entgete1)) (setqngc(atof(setqla(fld8x)))) (command"explode"e1) (setqn(n1)) ))) (defunfld(numlst) (cdr(assocnumlst)) ) (defunc: spltol() ;spline转化为line (setqn0) (setqe(ssget"x"(list(cons0"spline")))) (setqsh(sslengthe)) (ife (while( (setqx(entget(setqe1(ssnameen)))) (setqnla(itoa(fix(caddr(fld10x))))) (if(=(fld0x)"spline") (progn (command"layer""n"nla"c" "6"nla"s"nla"") (command"line") (setqnm(lengthx) dzs(fld73x)dzs1(fld74x)) (while(>nm5) (if(=(car(nthnmx))10) (progn (setqb1(nthnmx)) (setqx1(cadrb1)) (setqy1(caddrb1)) (setqz1(cadddrb1)) (setqglb(listx1y1)) (commandglb) )) (setqnm(-nm1)) ))) (command"") (setqn(n1)) ))) (2)切剖面 输入剖面编号,在平面地形图上指定两点确定剖面剖切线位置,指定剖面图起点,利用autocad的inters函数搜索剖切线与地形图的全部交点,自动计算交点坐标,计算交点与剖面位置起点的距离,按各交点高程和与起点的距离形成剖面图各点坐标,即可用本文实例1坐标画线生成地形图的剖面。 (defundxtent1() (setqn0xdzbnil) (setqxds0) (setqsh(sslengthe1)) (while( (setqx(entget(ssnamee1n))) (if(=(fld0x)"line") (progn (setqdxtgcgc(fld8x)) (setqdxtgcgc(atoidxtgcgc)) (if(>dxtgcgc10) (progn (setqpst(fld10x)) (setqpet(fld11x)) (setqzb(listgc (list(carpst)(cadrpst)) (list(carpet)(cadrpet)) )) (setqxdzb(conszbxdzb)) (setqxds(xds1)) )))) (setqn(n1)) )) (defunc: dxtsec() (setqpmh(pmh1)) (setqpmh(getstring"剖面号")) (setqpt1(getpoint"剖切位置起点: ")) (setqpt2(getpointpt1"剖切位置终点: ")) (setqpt3(getpoint"剖面图布置: ")) (setqp01pt3) (setqe1(ssget"f"(listpt1pt2)));利用autocad的目标选择“f”方式选取与剖切线相交的地形线。 (dxtent);获取与剖切线相交地形线的坐标 (setqmxgc-100) (setqmngc10000) (setqm0pmpnil) (setqnxdsi0) (while( (setqcrosp (interspt1pt2(nth1(nthixdzb))(nth2(nthixdzb))1) );求剖切线与地形线的交点 (if(/=crospnil) (progn (setqdxtgcgc(nth0(nthixdzb))) (setqmxgc(maxmxgcdxtgcgc)) (setqmngc(minmngcdxtgcgc)) (setqdst(distancept1crosp));剖切线起点与交点的距离 (setqdst(*(/blczdxthtbl)dst)) (setqpmp(cons(listmdstdxtgcgc)pmp)) (setqm(m1)) )) (setqi(i1)) )) 2.3沿曲线标注 在设计中会遇到沿给定曲线进行标注问题,如平面布置图中的开挖线符号沿开挖轮廓的标注,剖面图中岩石符号沿轮廓线标注、点筋标注、沿任意曲线进行汉字标注等。 此类问题主要应用autocad的measure或divide命令来解决。 两个命令的主要差别是前者按指定的长度在曲线上标注,后者按给定的分段数等分曲线并在等分点处进行标注。 要标注的轮廓曲线最好用pline线,要标注的符号预先做成图块,图块采用单位块,执行measure或divide命令,选取要标注的曲线,指定标注符号,分段长度或分段数即可完成标注,当发现标注的符号太密或太疏时,可以执行erase命令选择p进行删除,比例不合适或符号方向不正确,可以利用特性编辑器,选中所有标注符号,对标注符号的比例和旋转角度进行调整,直到满意为止。 对于更高级的应用,可以编制lsp程序,实现符号和文字沿任意曲线标注。 2.4表格生成 autocad本身没有表格处理功能,设计图纸中工程量表、钢筋表等涉及到表格生成的问题可以采用以下方法处理: (1)直接把word或excel文件中的表格直接粘贴到cad图形中,修改时只要双击图中的表格即可进入word或excel中进行编辑修改,修改完成后退出即可返回到autocad中继续进行设计,该法优点是方便,快捷,易于掌握,可以充分利用excel的强大计算功能。 缺点是表格在autocad中并不是一个普通图元,无法利用cad功能对表格的字高、颜色和线宽进行编辑。 (2)编制lsp程序,依次输入表格标题、表格行数、表格列数、表格行高和列宽以及表格插入点等参数,可以自动生成表格,表格中已经按仿excel形式填入了文字,可以用字处理软件对表格中文字进行编辑修改。 (defunc: mtab() (setqtb1niltb2niltb3nil) (setqrows(getint"表格行数")) (setqcols(getint"表格列数")) (setqrowh(getreal"行高")) (setqcolw(getreal"列宽")) (setqp1(getpoint"表格左上角点位置: ")) (command"pline"p1"w""0.5""0.5" (setqp2(list((carp1)(*colscolw))(cadrp1))) (setqp4(list(carp2)(-(cadrp2)(*rowsrowh)))) (setqp3(list(carp1)(-(cadrp2)(*rowsrowh)))) "c") (setqn1) (while( (command"pline"(list(carp1)(-(cadrp1)(*nrowh)))"w""0""0" (list(carp2)(-(cadrp2)(*rowhn)))"") (setqn(n1)) ) (setqn1) (while( (command"pline"(list((carp1)(*ncolw))(cadrp1))"w""0""0"(list((carp1)(*ncolw))(cadrp3)) "") (setqn(n1)) ) (command"text""m"(list((carp1)(*0.5colscolw)) ((cadrp1)5))"3""0""title") (setqn0) (while( (setqm0) (while( (cond (( ((>=m26)(setqbzstr(strcat(chr(64(/m26)))(chr(65(-m(*26(/m26)))))))) ) (command"text""m"(list((carp1)(*0.5colw)(*mcolw));表格内容标注 (-(cadrp1)(*0.5rowh)(*nrowh))) (getvar"textsize")"0"(strcatbzstr(itoa(n1)))) (setqm(m1)) ) (setqn(n1)) )) (3)生成钢筋表 钢筋表和材料表生成是施工图设计中比较繁琐的一项工作,很容易出错,此处介绍利用程序进行钢筋表和材料表自动生成的方法。 利用造字程序增加i、ii级钢筋的直径标注符号和,以后在其它电脑上只要把eudc.tte和e 见下表,增加3个命令: 生成钢筋表、钢筋表添加和自动生成材料表。 生成钢筋表时按指定表格位置生成钢筋表表头,根据提示输入钢筋编号(可以不连续)、钢筋等级和直径如20、16,交互绘制钢筋简图和标注长度(标注长度可以输入多种形式如50~200表示长度等差变化;30,40,50表示一个编号多个钢筋长度,),钢筋根数,构件组数,程序自动完成表格其余各项(总长度、重量,对于i级钢筋长度中自动计入弯钩长度)的填写,备注栏中自动填入等差变化钢筋的等差值。 采集钢筋表中直径、等级和总长信息,经过自动分类汇总,生成钢筋表的材料表。 2.6高程小数位数处理 尺寸标注小数位数很容易调整,但诸如高程、表格中数字要调整则很困难,借助lsp程序的调整很方便,只要选取需要调整的数字,根据提示输入需要保留的小数位数,则程序自动对所有选种数字进行修改。 (defunentsgc() (setqn0) (setqsh(sslengthe1)) (while( (if(=(fld0x)"text") (progn (setqagc(fld1x)) (setqc(substragc11)) (if(or(=c"")(=c"-")(and(>=c"0")(<=c"9"))) (progn (if(or(=c"")(=c"-")) (setqbgc(substragc2)) (setqbgcagc) ) (setqcgc(atofbgc)) (setqzh(rtoscgc2gcws)) (if(or(=c"")(=c"-")) (setqzh(strcatczh))) (setqx(subst(cons1zh)(assoc1x)x)) (entmodx) ) )) )) (setqn(n1))) ) (defunc: yxws() (setqe1(ssget)) (setvar"dimzin"0) (setqgcws(getint"保留小数位数: ")) (ife1(entsgc)(print"notfound")) (setqxnil) ) 2.7应用软件前、后处理 由于软件升级滞后,一些常用软件后处理功能很弱或没有,可以利用lsp程序结合autocad增加或简化前后处理功能。 下面结合平面渗流分析程序stse软件对其前、后处理功能的实现进行介绍: (1)前处理 stse为平面渗流有限元程序,单元划分和单元、节点编号工作量最大,可以借助其它通用有限元软件的前处理功能如ansis、algor、sap84等进行初步处理,生成单元、节点编号和节点坐标,而后按照stse数据文件的格式要求对数据文件进行编辑。 (2)后处理 后处理成果主要为: 单元网格图,浸润线和等势线。 单元网格图中有节点和单元编号,不同渗透系数的单元采用不同的颜色,以便根据网格图直观地判断数据文件中几何参数和材料特性的正误; 首先分析stse的输出结果文件的格式,搜索并筛选其中主要参数如单元总数、节点总数和材料总数,把节点坐标和单元信息分别存储,通过对单元循环生成单元网格图。 (defunc: seepmesh() (iffn (setqfn(getfiled"渗流结果文件名"fn""2)) (setqfn(getfiled"渗流结果文件名"""""2))) (setqf(openfn"r")) (setqmd(read-linef)) (while(/=(substrmd258)"单元总数") (setqmd(read-linef)) );定位单元总数 (setqdyzs(atoi(substrmd585)));读单元总数 (setqmd(read-linef)) (setqjdzs(atoi(substrmd585)));读节点总数 (setqmd(read-linef)) (setqclh(atoi(substrmd585)));读材料总数 (setqm0) (repeatclh (setqm(1m)) (setqtcm(strcat"zclh"(itoam))) (command"layer""m"tcm"c"(itoam)tcm"") );按材料种类生成图层名称 (setqm0n0) (repeatdyzs;对单元循环,dycfb中存放单元信息 (setqm(m1)) (setqclh(nth0(nthmdycfb))) (setqjdh1(nth1(nthmdycfb))) (setqjdh2(nth2(nthmdycfb))) (setqjdh3(nth3(nthmdycfb))) (setqjdh4(nth4(nthmdycfb))) (command"layer""s"(strcat"zclh"(itoaclh))"") (command"pline";绘制单元网格 (nthjdh1jdzbb) (nthjdh2jdzbb) (nthjdh3jdzbb) (nthjdh4jdzbb)"c") (setqbzdzb(mapcar'(nthjdh1jdzbb)(nthjdh2jdzbb) (nthjdh3jdzbb)(nthjdh4jdzbb))) (setqbzdzb(list(/(carbzdzb)4.0)(/(cadrbzdzb)4.0))) (command"text""m"bzdzb"0.5""0"(itoam)) ;标注单元号 (setqm0) (repeatjdzs (setqm(m1)) (setqbzdzb(nthmjdzbb)) (setqbzdzb(list((carbzdzb)0.0)((cadrbzdzb)0.0))) (command"text""m"bzdzb"0.5""0"(itoam)) ));标注节点号 (closef) ) 限于篇幅,等势线和浸润线生成程序不再赘述。 同样,对工程设计中遇到的其它软件如: stab边坡稳定分析、sap84的输出文件均可进行类似后处理工作。 3结语 autocad软件应用已经在设计单位普及,visuallisp的出现对于提高lisp语言的编程效率和autocad应用水平具有重要意义。 本文涉及的几个实例已经在实际工作中发挥很大作用,充分说明在工程设计当中结合本专业要求开发一些简单实用的lisp小程序可以有效减轻设计人员的劳动强度,使autocad不仅仅是绘图工具,而真正成为设计人员得心应手的高效设计平台。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- CAD 技术 水利水电工程 中的 应用