[求助] 能帮忙详细分析下次源程序吗?
本帖最后由 PhantomFox 于 2011-12-19 17:24 编辑我正在学习lisp语言,有个程序,对里面的几个步骤不是很明白,请高手指点!
能把每行的具体内容和作用写明最好!
;;;重圆消除 (相同圆心、相同半径);;;
========================================
(defun C:TT (/ SS LST I EN ENL PT10 PT11 A N LST_NEW)
(if (setq SS (ssget '((0 . "CIRCLE"))))
(progn ;;组织成表((enpt10pt11)...)
(setq LST '()
I 0
)
(repeat (sslength SS)
(setq EN (ssname SS I)
ENL (entget EN)
PT10 (cdr (assoc 10 ENL))
r (cdr (assoc 40 ENL))
)
(setq LST (cons (list EN PT10 r) LST))
(setq I (1+ I))
)
;;逐个对比
(while LST
;;取首个
(setq A
(car LST)
LST (cdr LST)
)
;;对比
(setq LST_NEW '())
(foreach N LST
(if
(and (equal (cadr A) (cadr N) 0.001)
(equal (caddr A) (caddr N) 0.001)
)
(entdel (car N)) ;_删除实体
(setq LST_NEW (cons N LST_NEW))
)
)
;; (setq LST LST_NEW) ) ) )
(princ)
)
)
)
)
建议你找一个《LISP函数参考2008中文版.chm》对照着看一下各个函数,这样才能学的更透彻 程序设计方面的,最好是到“开发板块”去。另外,有什么疑问,最好能明确些;不明白的,是哪里不明白。 本帖最后由 PhantomFox 于 2011-12-20 09:59 编辑
skynoon 发表于 2011-12-19 20:37 http://bbs.mjtd.com/static/image/common/back.gif
建议你找一个《LISP函数参考2008中文版.chm》对照着看一下各个函数,这样才能学的更透彻
已经对着函数看过了,里面有几个地方不明白。
比如说这几句
(if (setq SS (ssget '((0 . "CIRCLE"))))
[*]http://bbs.mjtd.com/source/plugin/mc_colorcode/images/jssc_none.gif (setq LST '()
[*]http://bbs.mjtd.com/source/plugin/mc_colorcode/images/jssc_none.gif I 0
[*]http://bbs.mjtd.com/source/plugin/mc_colorcode/images/jssc_none.gif )
[*]http://bbs.mjtd.com/source/plugin/mc_colorcode/images/jssc_none.gif PT10 (cdr (assoc 10 ENL))
[*]http://bbs.mjtd.com/source/plugin/mc_colorcode/images/jssc_none.gif r (cdr (assoc 40 ENL))
[*]http://bbs.mjtd.com/source/plugin/mc_colorcode/images/jssc_none.gif )
[*]http://bbs.mjtd.com/source/plugin/mc_colorcode/images/jssc_none.gif (setq LST (cons (list EN PT10 r) LST))
[*]http://bbs.mjtd.com/source/plugin/mc_colorcode/images/jssc_none.gif (foreach N LST
[*]http://bbs.mjtd.com/source/plugin/mc_colorcode/images/jssc_none.gif (if
[*]http://bbs.mjtd.com/source/plugin/mc_colorcode/images/jssc_none.gif (and (equal (cadr A) (cadr N) 0.001)
[*]http://bbs.mjtd.com/source/plugin/mc_colorcode/images/jssc_none.gif (equal (caddr A) (caddr N) 0.001)
[*]http://bbs.mjtd.com/source/plugin/mc_colorcode/images/jssc_none.gif )
[*]http://bbs.mjtd.com/source/plugin/mc_colorcode/images/jssc_none.gif (entdel (car N)) ;_删除实体
[*]http://bbs.mjtd.com/source/plugin/mc_colorcode/images/jssc_none.gif (setq LST_NEW (cons N LST_NEW))
[*]http://bbs.mjtd.com/source/plugin/mc_colorcode/images/jssc_none.gif )
[*]http://bbs.mjtd.com/source/plugin/mc_colorcode/images/jssc_none.gif )
[*]http://bbs.mjtd.com/source/plugin/mc_colorcode/images/jssc_none.gif ;; (setq LST LST_NEW) ) ) )
还不是很明白!!!能讲解下吗?
我现在学习也是一条条地查。 1,建立空表,对I赋值04,ENL的10组码 坐标赋值给PT10(在此是圆心坐标) 5 ENL的40组码,赋值给r(在此是半径)7建立表 8之后 对表的每一个元素 循环 skynoon 发表于 2011-12-20 21:36 static/image/common/back.gif
1,建立空表,对I赋值04,ENL的10组码 坐标赋值给PT10(在此是圆心坐标) 5 ENL的40组码,赋值给r(在此是半 ...
基本清楚了,感谢! 你拿到cad里,一条一条的执行,很快就明白了 lixuedong 发表于 2011-12-30 13:08 static/image/common/back.gif
你拿到cad里,一条一条的执行,很快就明白了
谢谢指导!
页:
[1]