请教:一个lisp小程序
yijuntao
yijuntao Lv.2
2006年11月20日 19:17:06
只看楼主

在R14中画了很多的直线,我想将所选的直线,每根直线长度加600mm后的长度总和.只要求每根线的长度数字上加600,不需要将所选的线变长.请问怎么编写?

在R14中画了很多的直线,我想将所选的直线,每根直线长度加600mm后的长度总和.只要求每根线的长度数字上加600,不需要将所选的线变长.请问怎么编写?
免费打赏
yijuntao
2006年11月22日 14:25:21
2楼
看来现在会lisp 的人不是很多,我都发两天了,也无人能帮我解决这个问题.可惜我现在对lisp语言还不是很熟!我们在大学的时候学的C++,我本以为会差不多的,但我看了lisp的书后,自己都梦了.没有人顶,我跟自己顶一下.哎!
回复
biechen
2006年11月27日 09:18:34
3楼
编程语言我觉得应该是一通百通的

(defun linelen( sset len1 / en pt1 pt2 dis distotal )
(setq distotal 0)
(repeat (sslength sset)
(setq i -1)
(setq en (ssname sset (setq i (1+ i))))
(setq pt1 (cdr (assoc 10 (entget en)))
pt2 (cdr (assoc 11 (entget en)))
)
(setq dis (distance pt1 pt2))

(setq distotal (+ distotal dis len1))
)

distotal
)
(defun c:mylinelen( / ss len)
(setq ss (ssget ’((0 . "LINE"))))

(setq len (linelen ss 600))

;;;;;;;;;;;;;;;;;;;
(princ len)
)
回复
yxpxa
2006年12月01日 23:57:38
4楼
(defun linelen( sset len1 / en pt1 pt2 dis )
(setq dis 0 i -1)
(repeat (sslength sset)
(setq en (ssname sset (setq i (1+ i)))
pt1 (cdr (assoc 10 (entget en)))
pt2 (cdr (assoc 11 (entget en)))
dis (+ dis (distance pt1 pt2)))
))

(defun c:Llen()
(princ (linelen (ssget ’((0 . "LINE"))) 600))
(princ)
)

;;3楼都给你写出来了,你再调试一下,在CAD下运行LLEN命令
回复
yijuntao
2006年12月15日 19:06:49
5楼
hao !
回复
ladesinger
2006年12月21日 18:24:16
6楼
(defun c:test(/ n ss total ss en elist spt ept dis )
(princ "\n请选取要累加长度(+600)的直线<退出>:")
(if (setq ss(ssget ’((0 . "line")))
(progn
(setq n 0 total 0.0)
(repeat (sslength ss)
(setq en(ssname ss n)
elist(entget en)
spt(cdr(assoc 10 elist))
ept(cdr(assoc 11 elist))
dis(distance spt ept)
total(+ total dis 600)
n(1+ n)
)
)
(princ (strcat "\n选取了" (itoa n) "条直线,计算结果是: " (rtos total 2 3)))
)
)
(princ)
)

用法:以上内容另存为 test.lsp, "工具" "加载应用程序" 加载后命令行里键入 TEST即可运行。
回复
yijuntao
2006年12月22日 15:27:52
7楼
谢了!!!!!!!
回复

相关推荐

APP内打开