328302216 发表于 2011-11-25 16:24:24

判断多条直线是否刚好首尾都有连接

(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:45:15

本帖最后由 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)
)

328302216 发表于 2011-11-28 10:22:59

程序比我的简洁了好多!

qq229918602 发表于 2011-12-6 21:45:40

真是复杂、、

328302216 发表于 2011-12-7 14:43:50

qq229918602 发表于 2011-12-6 21:45 static/image/common/back.gif
真是复杂、、

新手初学而已,所以有些弯路还是要走的! 呵呵

功夫佬 发表于 2012-5-24 00:40:12

判断线段,希望继续完善。

egoroom 发表于 2012-7-3 13:28:43

希望支持L,PL.ARC等

egoroom 发表于 2012-7-3 14:43:42

帮完善下。。

328302216 发表于 2012-9-26 11:09:02

我也好久没整了,而且上面我整的那个也用不上,只是刚学习lisp做的习题!以后我用的上有时间的话就帮你完善

清风明月名字 发表于 2013-8-30 18:51:28

2楼代码有BUG,1楼的没有发现有
谢谢众位坛友代码分享!
页: [1] 2
查看完整版本: 判断多条直线是否刚好首尾都有连接