明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 4691|回复: 10

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

[复制链接]
发表于 2011-11-25 16:24 | 显示全部楼层 |阅读模式
  1. (defun c:qt3 (;|/ ss i ss1 ss2 ss3 ss4 ss5 ss6 ss6_1 ss7 ss8 ss9 ss10 a1 a2 a3|;)        ;判断墙体线是否刚好连接
  2.   (setq ss (ssget))      ;选择对象
  3.   (setq i 0)
  4.   (setq ss7 '())
  5.   (repeat (sslength ss)      ;循环选择对象
  6.     (setq ss1 (ssname ss i))    ;取得选集中的第一个对象名称
  7.     (setq ss2 (entget ss1))    ;取得对象所有属性
  8.     (setq ss3 (cdr (assoc 0 ss2)))  ;取得对象类别(如:LINE CIRCLE)
  9.     ;(setq ss4 (cdr (assoc 8 ss2)))  ;取得对象的图层
  10.     (if  (and (= ss3 "LINE") ;|(= ss4 "07结构")|;)
  11.           ;判断所选对象是否为直线且图层是否为"06轮廓"
  12.       (progn
  13.   (setq ss5 (cdr (assoc 10 ss2)))
  14.   (setq ss6 (cdr (assoc 11 ss2)))
  15.       )
  16.     )
  17.     (setq ss6_1 (list ss5 ss6))    ;将单条直线的端点坐标结合成一列表
  18.     (setq ss7 (append ss6_1 ss7))  ;将对象结合成一个列表
  19.     (setq ss6_1 nil)      ;将ss6_1再次设为空列表
  20.     (setq i (+ 1 i))
  21.   )
  22.   (setq ss8 (length ss7))    ;取得ss7列表中的元素个数
  23.   (setq  a1 0
  24.   a2 0
  25.   a3 0
  26.   )
  27.   (repeat ss8        ;循环ss8等于ss7列表中的元素个数
  28.     (setq ss9 (nth a1 ss7))    ; 取得ss7中的第q个元素值并赋给ss9
  29.     (repeat ss8        ;循环
  30. ;;;      (setq ss9 (nth a1 ss7))
  31.       (setq ss10 (nth a2 ss7))    ;  
  32.       (if (equal ss9 ss10 0.01)    ;判断ss9是否等于ss10,只能用equal判断不能用=判断,因为ss9和ss10里面都有多个元素!
  33.   (setq a3 (+ 1 a3))    ;如果ss9等于ss10 a3就递增1
  34.   (setq a3 (+ 0 a3))
  35.       )          ;if
  36.       (setq a2 (+ 1 a2))    ;设置取得列表ss7中的第a2个元素递增1
  37.     )          ;repeat
  38.     (if  (/= a3 2)      ;判断a3是否等于2
  39.       (command "CIRCLE" ss9 50)    ;如果a3不等于2就用
  40.     )          ;if
  41.     (setq a3   0      ;把这些变量归零
  42.     ss10 nil
  43.     a2   0
  44.     ss9  nil
  45.     )
  46.     (setq a1 (+ 1 a1))
  47.   )          ;repeat
  48.   (princ)
  49. )

感觉还有不少漏洞,希望高手们帮忙打打补丁!

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

x
发表于 2011-11-26 20:45 | 显示全部楼层
本帖最后由 yshf 于 2011-11-26 20:47 编辑

  1. (defun c:ccc()
  2.      (if (setq ssa (ssget '((0 . "LINE"))))
  3.          (progn
  4.              (setq ptb nil  i -1)
  5.              (repeat (sslength ssa)
  6.            (setq dxf (entget (ssname ssa (setq i (1+ i))))
  7.           p10 (cdr (assoc 10 dxf))
  8.           p11 (cdr (assoc 11 dxf))
  9.    ptb (cons p11 (cons p10 ptb))
  10.            )
  11.       )
  12.              (setq jgb nil fhz nil)
  13.              (while (setq pt  (car ptb)
  14.             ptb (cdr ptb)
  15.       )
  16.                  (if (member pt ptb)
  17.        (setq ptb (vl-remove pt ptb)
  18.       fhz (cons pt fhz)
  19.        )
  20.        (setq jgb (cons pt jgb))
  21.    )
  22.                
  23.       )
  24.       (mapcar '(lambda(x) (command "_circle" x 50)) jgb)
  25.    
  26.       ;变量tymlb储存刚好首尾相接直线的图元名列表
  27.       (setq tymlb nil)
  28.       (foreach pt fhz
  29.                  (setq ssa (ssget "c" pt pt '((0 . "LINE")))
  30.          i   -1
  31.    )
  32.           (repeat (sslength ssa)
  33.        (if (not (member (setq ent (ssname ssa (setq i (1+ i)))) tymlb))
  34.            (setq tymlb (cons ent tymlb))
  35.        )
  36.    )
  37.       )
  38.   )
  39.      )
  40.      (princ)
  41. )
 楼主| 发表于 2011-11-28 10:22 | 显示全部楼层
程序比我的简洁了好多!
发表于 2011-12-6 21:45 | 显示全部楼层
真是复杂、、
 楼主| 发表于 2011-12-7 14:43 | 显示全部楼层
qq229918602 发表于 2011-12-6 21:45
真是复杂、、

新手初学而已,所以有些弯路还是要走的! 呵呵
发表于 2012-5-24 00:40 | 显示全部楼层
判断线段,希望继续完善。
发表于 2012-7-3 13:28 | 显示全部楼层
希望支持L,PL.ARC等
发表于 2012-7-3 14:43 | 显示全部楼层
帮完善下。。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

x
 楼主| 发表于 2012-9-26 11:09 | 显示全部楼层
我也好久没整了,而且上面我整的那个也用不上,只是刚学习lisp做的习题!以后我用的上有时间的话就帮你完善
发表于 2013-8-30 18:51 | 显示全部楼层
2楼代码有BUG,1楼的没有发现有
谢谢众位坛友代码分享!
您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|CAD论坛|CAD教程|CAD下载|联系我们|关于明经|明经通道 ( 粤ICP备05003914号 )  
©2000-2023 明经通道 版权所有 本站代码,在未取得本站及作者授权的情况下,不得用于商业用途

GMT+8, 2024-3-29 23:37 , Processed in 0.232363 second(s), 24 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表