明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 1224|回复: 9

如何获取线段的线型

[复制链接]
发表于 2005-10-21 20:40 | 显示全部楼层 |阅读模式

我想编一个删中心线的lisp,但不知如何获取线段的线型,请教各位大吓

发表于 2005-10-21 22:45 | 显示全部楼层

(ssget '((6 . "CENTER"))),可以得到中心线的选择集

发表于 2005-10-21 22:55 | 显示全部楼层
chenknight发表于2005-10-21 22:45:00 (ssget '((6 . \"CENTER\"))),可以得到中心线的选择集
但中心线的线型如果随图层,这样的程序就不能得到中心线的选择集。
发表于 2005-10-22 21:01 | 显示全部楼层
  1. (defun c:test (/ la co ln ss)
  2.   (if (setq ss (ssget "X"
  3.         '((0 . "CIRCLE,ELLIPSE,*LINE,ARC") (6 . "CENTER"))
  4.         )
  5.       )
  6.     (command "erase" ss "")
  7.   )
  8.   (setq la (tblnext "layer" t))
  9.   (while la
  10.     (setq lt (CDR (assoc 6 la))
  11.    LN (CDR (assoc 2 la))
  12.     )
  13.     (if (= lt "CENTER")
  14.       (if (setq ss
  15.    (ssget "X"
  16.    (list '(0 . "CIRCLE,ELLIPSE,*LINE,ARC") (cons 8 LN))
  17.    )
  18.    )
  19. (command "erase" ss "")
  20.       )
  21.     )
  22.     (setq la (tblnext "layer" nil))
  23.   )
  24. )
发表于 2005-10-22 22:14 | 显示全部楼层

危险哦! 线型为 "center" 的图层里面也可能有其它线型的实体

 楼主| 发表于 2005-10-25 18:10 | 显示全部楼层

(defun c:ec (/ la lt ln n ss s1 s2 s3 )
  (setq ss (ssget))
  (if (setq s1 (ssget "p"
        '((0 . "CIRCLE,ELLIPSE,*LINE,ARC") (6 . "CENTER"))
        ))
       (command "erase" s1 ""))
      (setq s3 (ssadd)) 
  (setq la (tblnext "layer" t))
  (while la
    (setq lt (CDR (assoc 6 la))
          LN (CDR (assoc 2 la))
   s2 (ssadd)
   n 0
      )
    (if (= lt "CENTER")
      (setq s2(ssget "x" (list '(0 . "CIRCLE,ELLIPSE,*LINE,ARC") (cons 8 LN)))))    

    (if (/= s2 nil)
      (progn
 (repeat (sslength s2)
   (if (setq ent1(ssmemb (ssname s2 n) ss))
     (progn
       (ssadd ent1 s3)
       (setq n (+ n 1)))
     )))
     )   
    (setq la (tblnext "layer" nil))
    (command "erase" s3 "")
         )
  (prin1)
)

 另外能不能再加一个error语句以防空选,先谢谢版主了

发表于 2005-10-25 19:52 | 显示全部楼层
  1. (defun c:ec (/ la lt ln n ss s1 s2 s3)
  2.   (if (and (setq ss (ssget))
  3.     (setq
  4.       s1 (ssget "p"
  5.          '((0 . "CIRCLE,ELLIPSE,*LINE,ARC") (6 . "CENTER"))
  6.   )
  7.     )
  8.       )
  9.     (command "erase" s1 "")
  10.   )
  11.   (setq s3 (ssadd))
  12.   (setq la (tblnext "layer" t))
  13.   (while la
  14.     (setq lt (CDR (assoc 6 la))
  15.    LN (CDR (assoc 2 la))
  16.    s2 (ssadd)
  17.    n  0
  18.     )
  19.     (if (= lt "CENTER")
  20.       (if (setq s2
  21.    (ssget "x"
  22.    (list '(0 . "CIRCLE,ELLIPSE,*LINE,ARC") (cons 8 LN))
  23.    )
  24.    )
  25. (progn
  26.    (repeat (sslength s2)
  27.      (if (setq ent1 (ssmemb (ssname s2 n) ss))
  28.        (progn
  29.   (ssadd ent1 s3)
  30.   (setq n (+ n 1))
  31.        )
  32.      )
  33.    )
  34. )
  35.       )
  36.     )
  37.     (setq la (tblnext "layer" nil))
  38.     (command "erase" s3 "")
  39.   )
  40.   (prin1)
  41. )
 楼主| 发表于 2005-10-31 21:37 | 显示全部楼层
无痕说的对,这样会把CENTER层中的其他线形的图元删掉,还有没有其他更好的方法?
发表于 2005-11-1 22:22 | 显示全部楼层
  1. (defun c:ec (/ la lt ln n EN1 s1 s2 s3 )
  2. (if (setq s1 (ssget "X" '((0 . "CIRCLE,ELLIPSE,*LINE,ARC") (6 . "CENTER"))))
  3.   (command "erase" s1 "")
  4. )
  5. (setq la (tblnext "layer" t))
  6. (while la
  7.   (setq lt (CDR (assoc 6 la))
  8.         LN (CDR (assoc 2 la)) n 0 s3 (ssadd))
  9.   (if (= lt "CENTER") (PROGN
  10.    (setq s2 (ssget "x" (list '(0 . "CIRCLE,ELLIPSE,*LINE,ARC") (cons 8 LN))))     
  11.    (if (/= s2 nil) (progn
  12.     (repeat (sslength s2)
  13.      (SETQ EN1 (SSNAME S2 N))
  14.      (if (NOT (ASSOC 6 (ENTGET EN1))) (SSADD EN1 S3))
  15.      (setq n (1+ n)))
  16.     )
  17.     (command "erase" s3 "")
  18.    ))
  19.   ))   
  20.   (setq la (tblnext "layer" nil))
  21. )
  22. (princ)
  23. )
发表于 2005-11-17 17:00 | 显示全部楼层
本帖最后由 作者 于 2005-11-18 13:56:17 编辑

好东西!

您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-5-21 03:57 , Processed in 0.242170 second(s), 25 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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