pBe 发表于 2022-7-6 10:17:12

 
我之前对此感到内疚:
 
--->
^
 

cadamrao 发表于 2022-7-6 10:17:28

我很感激;但不是所有的块,我只需要选定的(按层)块。
 
谢谢

Lt Dan's l 发表于 2022-7-6 10:21:33


(defun ss_id ( ss / id lst )
(if (eq 'PICKSET (type ss))
   (repeat (setq id (sslength ss))
   (setq lst
       (cons
         (ssname ss (setq id (1- id)))
         lst
       )
   )
   )
)
lst
)

(defun c:test ( / ss )
(if
   (setq ss
   (ss_id (ssget (list (cons 0 "insert"))))
;|   (ssget (list (cons 0 "insert") (cons 8 "0") ))
       will only select blocks in "0" layer |;
   )
   (foreach x ss
   (entmake
       (list
         (cons 0 "point")
         (cons 8 (getvar 'clayer))
         (assoc 10 (entget x))
       )
   )
   (entdel x)
   )
)
(princ)
)

Lee Mac 发表于 2022-7-6 10:23:52

丹,
 
请注意,您可以通过只迭代一次SelectionSet来提高代码的效率:
 

(defun c:ins2pts ( / ss e i )

(if (setq ss (ssget "_:L" '((0 . "INSERT"))))
   (repeat (setq i (sslength ss)) (setq e (ssname ss (setq i (1- i))))
   (if
       (entmakex
         (list
         (cons 0 "POINT")
         (assoc 8 (entget e))
         (cons 10 (trans (cdr (assoc 10 (entget e))) e 0))
         (assoc 210 (entget e))
         )
       )
       (entdel e)
   )
   )
)
(princ)
)

cadamrao 发表于 2022-7-6 10:29:47

你好
但我需要上面的一层选择,因为我有不同的块名
 
谢谢
amr公司

Tharwat 发表于 2022-7-6 10:30:45

 
你说的分层是什么意思?

Lt Dan's l 发表于 2022-7-6 10:34:41

 
没错,但是像这样的小任务,你永远不会注意到速度上的差异。我发现这样的设置更容易快速编程
 
@卡德马拉奥
请参阅我在上面代码中的红色评论。

alanjt 发表于 2022-7-6 10:38:36

小调整。。。
(defun c:ins2pts (/ ss i e d)
(if (setq ss (ssget "_:L" '((0 . "INSERT"))))
   (repeat (setq i (sslength ss))
   (if (entmakex (list '(0 . "POINT")
                         (assoc 8 (setq d (entget (setq e (ssname ss (setq i (1- i)))))))
                         (cons 10 (trans (cdr (assoc 10 d)) e 0))
                         (assoc 210 d)
                   )
         )
       (entdel e)
   )
   )
)
(princ)
)

Lee Mac 发表于 2022-7-6 10:42:29

有人很无聊。。。

alanjt 发表于 2022-7-6 10:44:24

不,刚才看到了这个线程,我想我会详细介绍一下您的示例,以删除同一对象上的多个实体转储。
页: 1 [2]
查看完整版本: 用点替换块