给排水设计给排水CAD软件开发实例(2)
2013-06-30 01:00
导读:5实例二———图例绘制软件本软件由用户在6页幻灯菜单中连续选取图例,给出一个插入图例的左上角点后,程序自动将所选择的图例按顺序逐项向下排列
5实例二———图例绘制软件本软件由用户在6页幻灯菜单中连续选取图例,给出一个插入图例的左上角点后,程序自动将所选择的图例按顺序逐项向下排列连续绘出。软件由Au toLISP程序atl.lsp和6页幻灯以及近百个图块组成。幻灯文件为atl1~atl6.sld。图块名为atlabc.dwg,atl为前缀,a代表幻灯页序号,为1~6;b代表幻灯菜单左右代码,左面为1,右面为2;c代表幻灯菜单中上下序号,分别为1~8。
本软件设计的核心思想是通过点的定位计算出的所对应的图例图块名,然后插入图例,多重选择由表处理语句来完成。本文中第7节的b部分给出atl.lsp中与幻灯菜单有关的程序清单及注解。后面还有几个子函数,由于篇幅有限本文不详细列出程序,只做简单介绍:
lastsld子函数对幻灯名字符串进行运算,求出上一页幻灯名;
nextsld子函数对幻灯名字符串进行运算,求出下一页幻灯名;
setnil子函数对各变量(必须包括whill)赋空值,并退出程序:
setok子函数对被选择的图例表进行处理,并逐项连续插入图例。
6小结
a.标高标注程序是利用幻灯菜单调出相应的标高标注子程序。
b.图例程序是利用幻灯菜单给图例名称赋值,然后运用字符串处理和表处理技术求得图例名称的列表,从而连续逐项插入被选中的图例。
c.图例幻灯菜单分两个大区,上面是图例区,下面是幻灯菜单的操作区,可见幻灯菜单能做成复杂高效的菜单。
7程序清单
a.abg.lsp程序及注解;
(defunC:BGBZ()
(setqwhil1t)
(whilewhil1)
(command″vslide″″acd1″)
(科教范文网 lw.nseaC.Com编辑发布)
(if(setqpp(getpoint″请点取标高种类″))
(progn
(redraw)
(setqh(getvar″viewsize″)
pcen(getvar″viewsize″)
pmax(getvar″vsmax″)
pmim(getvar″vsmin″)虚拟屏幕左下角)
(setqw(*(/(-(carpmax)(carpmin))
(-(cadrpmax)(cadrpmin)))h))
(setqpp0(list(-(carpcen)(/w3))
(-(cadrpcen(
/h3))))
(setqpp1(list( (carpcen)(/w3))
( (cadrpcen)(/h3))))
(setqdx(/w6)dy(/h6))
(setqlx(carpp)ly(cadrpp))
(setqplx(carpp0)ply(cadrpp0))
(setplx(-lxplx)ly(-lyply))
(setpx(fix(1 (/(-pxpx0)dx))))
(setqy(fix(1 (/(-pypy0)dy))))
(setqnn(strcat(itoax)(itoay)))
(cond((=nn14)(abg1))
((=nn13)(abg2))
((=nn12)(abg3))
((=nn11)(abg4))
主程序BGBZ开始
设whil1值为真
当whil1为真时执行下列程序
显示幻灯在幻灯菜单中选点
重画恢复原画面
绘图区高
绘图区中心点
(科教范文网 Lw.nsEAc.com编辑整理) 虚拟屏幕右上角
共获取系统变量
求绘图区宽
有效区左下角,(有效区宽和高占绘图宽和高的三分之二)
有效区右上角
每格宽和高