判断多条直线是否刚好首尾都有连接
(defun c:qt3 (;|/ ss i ss1 ss2 ss3 ss4 ss5 ss6 ss6_1 ss7 ss8 ss9 ss10 a1 a2 a3|;) ;判断墙体线是否刚好连接(setq ss (ssget)) ;选择对象
(setq i 0)
(setq ss7 '())
(repeat (sslength ss) ;循环选择对象
(setq ss1 (ssname ss i)) ;取得选集中的第一个对象名称
(setq ss2 (entget ss1)) ;取得对象所有属性
(setq ss3 (cdr (assoc 0 ss2)));取得对象类别(如:LINE CIRCLE)
;(setq ss4 (cdr (assoc 8 ss2)));取得对象的图层
(if(and (= ss3 "LINE") ;|(= ss4 "07结构")|;)
;判断所选对象是否为直线且图层是否为"06轮廓"
(progn
(setq ss5 (cdr (assoc 10 ss2)))
(setq ss6 (cdr (assoc 11 ss2)))
)
)
(setq ss6_1 (list ss5 ss6)) ;将单条直线的端点坐标结合成一列表
(setq ss7 (append ss6_1 ss7));将对象结合成一个列表
(setq ss6_1 nil) ;将ss6_1再次设为空列表
(setq i (+ 1 i))
)
(setq ss8 (length ss7)) ;取得ss7列表中的元素个数
(setqa1 0
a2 0
a3 0
)
(repeat ss8 ;循环ss8等于ss7列表中的元素个数
(setq ss9 (nth a1 ss7)) ; 取得ss7中的第q个元素值并赋给ss9
(repeat ss8 ;循环
;;; (setq ss9 (nth a1 ss7))
(setq ss10 (nth a2 ss7)) ;
(if (equal ss9 ss10 0.01) ;判断ss9是否等于ss10,只能用equal判断不能用=判断,因为ss9和ss10里面都有多个元素!
(setq a3 (+ 1 a3)) ;如果ss9等于ss10 a3就递增1
(setq a3 (+ 0 a3))
) ;if
(setq a2 (+ 1 a2)) ;设置取得列表ss7中的第a2个元素递增1
) ;repeat
(if(/= a3 2) ;判断a3是否等于2
(command "CIRCLE" ss9 50) ;如果a3不等于2就用
) ;if
(setq a3 0 ;把这些变量归零
ss10 nil
a2 0
ss9nil
)
(setq a1 (+ 1 a1))
) ;repeat
(princ)
)
感觉还有不少漏洞,希望高手们帮忙打打补丁! 本帖最后由 yshf 于 2011-11-26 20:47 编辑
(defun c:ccc()
(if (setq ssa (ssget '((0 . "LINE"))))
(progn
(setq ptb nili -1)
(repeat (sslength ssa)
(setq dxf (entget (ssname ssa (setq i (1+ i))))
p10 (cdr (assoc 10 dxf))
p11 (cdr (assoc 11 dxf))
ptb (cons p11 (cons p10 ptb))
)
)
(setq jgb nil fhz nil)
(while (setq pt(car ptb)
ptb (cdr ptb)
)
(if (member pt ptb)
(setq ptb (vl-remove pt ptb)
fhz (cons pt fhz)
)
(setq jgb (cons pt jgb))
)
)
(mapcar '(lambda(x) (command "_circle" x 50)) jgb)
;变量tymlb储存刚好首尾相接直线的图元名列表
(setq tymlb nil)
(foreach pt fhz
(setq ssa (ssget "c" pt pt '((0 . "LINE")))
i -1
)
(repeat (sslength ssa)
(if (not (member (setq ent (ssname ssa (setq i (1+ i)))) tymlb))
(setq tymlb (cons ent tymlb))
)
)
)
)
)
(princ)
) 程序比我的简洁了好多! 真是复杂、、 qq229918602 发表于 2011-12-6 21:45 static/image/common/back.gif
真是复杂、、
新手初学而已,所以有些弯路还是要走的! 呵呵 判断线段,希望继续完善。 希望支持L,PL.ARC等 帮完善下。。 我也好久没整了,而且上面我整的那个也用不上,只是刚学习lisp做的习题!以后我用的上有时间的话就帮你完善 2楼代码有BUG,1楼的没有发现有
谢谢众位坛友代码分享!
页:
[1]
2