请教个问题:对于圆形隧道,图中的蓝色封闭线,如果知道构成此圆的二维坐标值以及一组(图中紫色的线)或多组对应于该坐标值的计算结果,希望能用autolisp语言实现外部数据文件的读取并绘制成连续的多义线(圆滑曲线)。
如已知一组 X,Y,R1,R2,R3并且已写入一文件TXT1.TXT,要根据此文件让其自动用“PLINE”绘出。
文件内容如下:
13,0.10,0.15,0.13
100.00 0.00 126.00 134.00 145.00
86.60 50.00 -963.12 -967.15 -987.23
50.00 86.60 -163.12 -157.89 -178.46
0.00 100.00 134.26 123.58 177.34
。。。。。。。。。。。。。
100.00 0.00 126.00 134.00 145.00
以下对上面的数据进行说明:控制行数据13,0.10,0.15,0.13中的13指构成此圆形隧道的坐标点总数,即下面每行包含五个数据的行数,由于要构成封闭曲线,最后一点数据与第一点数据完全相同。0.10,0.15,0.13分别是R1,R2,R3列数据的缩放系数,方便程序使用者可以通过输入不同的系数调整结果曲线与实际圆形隧道几何尺寸的相对距离,以期达到较好的视觉效果。第二行开始为各点坐标及其对应的计算结果,如100.00 0.00 126.00 134.00 145.00对应X,Y,R1,R2,R3,分别指圆形隧道的x,y坐标,对应该点的三组计算结果R1,R2,R3(例如采用三种计算手段计算出的弯矩值)。绘制此图的目的是为了对三种计算结果在一个图上进行对比。
小弟希望达到以下目的:
1) 点数和缩放系数可以自己在文本文件TXT1.TXT里自己指定。上面例子中的13太少了,希望此值可以由文本文件中通过改变数据来任意指定,当然,一般不会超过200个数据点。
2) 把各点(x,y)的同一个R的结果相连,如上面数据除封闭圆外,还有三条曲线,分别对应R1,R2,R3。
3) 各点对应的结果应绘制在圆的径向内侧或外侧(根据结果数据的正负),各组计算曲线分别用实线,点划线,虚线等任何三种区别较大的型式加以区分(但不是用颜色,颜色都是黑色)。
4) 程序能实现对计算结果组数的判断,若0.10,0.15,0.13成为0.10,0.15,0.00,则表示没有R3列,只有R1,R2列,只绘制两条结果曲线(坐标连线除外);若0.10,0.15,0.13成为0.10,0.00,0.00则没有R2、R3列,只有R1列,只绘制一条结果曲线(坐标连线除外)。总之,用缩放系数是否为0.00判断需绘制的曲线条数。最多可以绘制三条结果曲线,最少绘制一条结果曲线。另外,坐标点和结果点之间的径向连线不需要,上图中就有连线,我不希望有。
5) 注意是autolisp语言,我不知道vlisp与其区别,我怕用vlisp的看不懂,autolisp语言我也是刚学。
小弟急用,望各位大侠帮忙为我编一个autolisp语言程序源码实现上述功能,小弟不胜感谢!!!!明经CAD真是过好论坛,里面有很多好东东,我把与上述程序有点相关的一个帖子附后,望各位大侠参考。。
文本格式的一组坐标点调入AutoCAD自动绘制多段线
已知一组 X、Y、Z ,并且已写入一文件TXT1.TXT,要根据此文件让其自动用“PLINE”绘出。
文件内容如下:
X Y Z
123 456 789
222 333 444
444 555 666
777 888 999
888 999 77
999 754 44
111 755 66
333 666 55
555 777 11
可以用以下程序完成:
(defun c:pltxt (/ oldcmd oldblip oldsnap fle fn pt)
(setq oldcmd (getvar "cmdecho"))
(setvar "cmdecho" 0)
(setq oldblip (getvar "blipmode"))
(setvar "blipmode" 0)
(setq oldsnap (getvar "osmode"))
(setvar "osmode" 0)
(setq fle (findfile "txt1.txt"))
(if (not fle)
(setq fle (getfiled "请选择数据文件" "txt1" "txt;dat;*" 8))
)
(if fle
(progn
(setq fn (open fle "r"))
(read-line fn)
(read-line fn)
(command "pline")
(while (setq pt (read-line fn))
(command (read (strcat "(" pt ")")))
)
(command "")
(close fn)
)
(princ "\n未选择数据文件,退出")
)
(setvar "cmdecho" oldcmd)
(setvar "blipmode" oldblip)
(setvar "osmode" oldsnap)
(princ)
) |