CADan 发表于 2022-7-6 15:10:46

恩德尔问题

我刚刚开始编写自己的LISP例程。我有一堆已经插入边框而没有外部参照的图形。我正在编写一个程序来删除块并引入外部参照边框。
 
到目前为止,我已经开始使用ssget获取块名,然后我想使用entdel删除块。然而,当我测试它时,我得到了一个错误的参数类型错误。我做错了什么。
 

(defun c:dlbd ()
(setq BD (ssget "X" '((2 . "AIA_D1-L000"))))
(entdel BD)
)

 
 
任何帮助都将不胜感激。

uddfl 发表于 2022-7-6 15:17:18

entdel函数中的选择集是错误的参数类型。不能对整个选择集进行entdel,它必须是实体名称。因此,如果必须使用entdel,则必须循环(循环)每个选择集的实体,并分别对其进行entdel。看看这个例子:
 
(defun loop ()
(setq ss1 (ssget))
(setq ent-index 0)
(setq update-index 0)
(repeat (sslength ss1)
   (setq entname (ssname ss1 ent-index))
   (princ "\n")
   (princ entname)
   (setq update-index (1+ update-index))
   (setq ent-index (1+ ent-index))
); repeat
(princ (strcat "\nLooped through " (itoa update-index) " entity(ies).")); sample closing msg
(princ)
)
 
 
编辑:欢迎来到董事会。

rkmcswain 发表于 2022-7-6 15:22:47

并不是要就哪种方式更好展开辩论,但这也会起作用:
 

(defun c:dlbd ( / bd)
(if (setq BD (ssget "X" '((2 . "AIA_D1-L000"))))
   (command "._erase" bd "")
)
(princ)
)

uddfl 发表于 2022-7-6 15:27:26

 
当然但看起来OP想要加入。这就是为什么我说“如果你必须使用entdel”。

rkmcswain 发表于 2022-7-6 15:29:04

没错,但OP也说“我刚刚开始编写自己的LISP例程”。。。所以我只是提供了一个替代方案,因为初学者可能不知道(命令)功能。

uddfl 发表于 2022-7-6 15:32:46

观点已被采纳。

ASMI 发表于 2022-7-6 15:38:34

转换选择集->列表和mapcar的entdel。
 
(defun c:dlbd ( / bd)
(if(setq BD (ssget "X" '((2 . "AIA_D1-L000"))))
   (mapcar 'entdel
(vl-remove-if 'listp(mapcar 'cadr(ssnamex BD))))
); end if
(princ)
); end c:dlbd

CAB 发表于 2022-7-6 15:42:01

entdel的问题是,它只适用于模型空间和最近活动的布局。
因此,如果使用(ssget“_X”),则不应使用entdel。
 
(vl-load-com)
(mapcar '(lambda (x) (vla-delete (vlax-ename->vla-object x)))
                                  (mapcar 'cadr (ssnamex ss)))

Lee Mac 发表于 2022-7-6 15:47:37

谁会想到会有这么多方法删除某些内容。。。

CADan 发表于 2022-7-6 15:50:56

谢谢大家的回复。
 
我的第一次尝试看起来类似于rkmcswain的代码。我有一些问题,我认为语法问题。所以我在谷歌上搜索,直到找到了entdel。
 
现在这部分很好。最新版本看起来像这样。
 
(defun c:dlbd ( / bd)
(if (setq BD (ssget "X" '((2 . "AIA_D1-L000"))))
   (command "._erase" bd "")
   (command "._purge" "b" "n")
   (command "._xref" "a" "X:\\PATH\\AIA_D1-L000.dwg" "0,0,0" "" "" "")
)
(princ)
)
 
我知道加载时会出现语法错误。我认为这与清除命令有关,当我将其取出时,它加载良好。但是,由于旧边界块和新边界外部参照具有相同的名称,我需要清除该块。
页: [1] 2
查看完整版本: 恩德尔问题