1、建立一个Excel文件,其中一个工作表储存端点数据,第1列存点名,第2列存X坐标值、第3列存Y坐标值、第4列存高程值;另取一个工作表储存要连线的端点名,第1列存第1个端点名、第2列存第2个端点名,第3列存第3个端点名、。
2、用LISP打开这个Excel文件,读取端点数据保存于ptsjb中,其内容为 ((点名1 X1 Y1 H1) (点名2 X2 Y2 Y2) (点名n Xn Yn Hn));读取连线端点名数据保存于Lxsjb中,其内容为((第1条线点名1 点名2 ) (第2条线点名1 点名2 ) (第n条线点名1 点名2 ))。
3、画线部分程序
;循环各条线
(foreach pts Lxsjb
(setq ptb nil)
(foreach name pts
(if (setq pt (assoc name ptsjb))
(setq ptb (cons (cdr pt) ptb))
)
)
;用轻量多段线画线(即连接每线的各个端点)
(if ptb
(entmake (append (list '(0 "LWPOLYLINE") '(100 "AcDbEntity") '(100 "AcDbPolyline")
(cons 90 (length ptb))
'(70 1)
)
(mapcar '(lambda(x)(cons 10 x)) (reverse ptb))
)
)
)
)
Lisp工具箱
链接:
工具箱程序下载:>
我不懂autolisp,我看了下代码的结构,感觉是算法并不复杂,只是循环嵌套了好几层,执行效率很低。
你可以尝试用支持lisp缩进以及代码高亮的编辑器,将此长文件拆分成数个逻辑清晰的子函数,
然后在子函数前添加计时函数对程序运行期各个函数的执行时间进行分析,
(defun c:9test4()
(setq newhh (getreal "\n请输入变更后字高:"))
(setq ss (ssget "x" '((0 "TEXT"))))
(setq n 0 )
(repeat (sslength ss)
(setq en (ssname ss n))
(setq endata (entget en))
(setq txt (cdr(assoc 0 endata)))
(if (= txt "TEXT")
(zitigxcx))
(setq n (1+ n))
)
(princ (strcat "\n共有("(itoa n)")个字符串更新")))
(defun zitigxcx()
(setq oldhhlist (assoc 40 endata)
newhhlist (cons 40 newhh)
endata (subst newhhlist oldhhlist endata)
)
(entmod endata))
(prompt "字体更新完毕")
(princ)
对于很短的AutoLisp程序,
可直接在AutoCAD环境中的命令行提示符下输入即可,
结果显示在文本屏幕上
对一般程序,
编辑好后,
用load函数加载,
便可运行了,
运行时只需键入函数名即可(load
"c:/mycodelsp")键入"test"
(mycodelsp中的函数"c:test")
以上就是关于关于lisp的疑问全部的内容,包括:关于lisp的疑问、【Auto CAD】 求LISP 程序包、请教AutoCad LISP程序的问题等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)