乐筑天下

搜索
欢迎各位开发者和用户入驻本平台 尊重版权,从我做起,拒绝盗版,拒绝倒卖 签到、发布资源、邀请好友注册,可以获得银币 请注意保管好自己的密码,避免账户资金被盗
查看: 42|回复: 14

[编程交流] 恩德尔问题

[复制链接]

1

主题

3

帖子

2

银币

初来乍到

Rank: 1

铜币
5
发表于 2022-7-6 15:10:46 | 显示全部楼层 |阅读模式
我刚刚开始编写自己的LISP例程。我有一堆已经插入边框而没有外部参照的图形。我正在编写一个程序来删除块并引入外部参照边框。
 
到目前为止,我已经开始使用ssget获取块名,然后我想使用entdel删除块。然而,当我测试它时,我得到了一个错误的参数类型错误。我做错了什么。
 
  1. (defun c:dlbd ()
  2. (setq BD (ssget "X" '((2 . "AIA_D1-L000"))))
  3. (entdel BD)
  4. )

 
 
任何帮助都将不胜感激。
回复

使用道具 举报

0

主题

119

帖子

119

银币

初来乍到

Rank: 1

铜币
0
发表于 2022-7-6 15:17:18 | 显示全部楼层
entdel函数中的选择集是错误的参数类型。不能对整个选择集进行entdel,它必须是实体名称。因此,如果必须使用entdel,则必须循环(循环)每个选择集的实体,并分别对其进行entdel。看看这个例子:
 
  1. (defun loop ()
  2. (setq ss1 (ssget))
  3. (setq ent-index 0)
  4. (setq update-index 0)
  5. (repeat (sslength ss1)
  6.    (setq entname (ssname ss1 ent-index))
  7.    (princ "\n")
  8.    (princ entname)
  9.    (setq update-index (1+ update-index))
  10.    (setq ent-index (1+ ent-index))
  11. ); repeat  
  12. (princ (strcat "\nLooped through " (itoa update-index) " entity(ies).")); sample closing msg
  13. (princ)  
  14. )

 
 
编辑:欢迎来到董事会。
回复

使用道具 举报

24

主题

1265

帖子

1028

银币

后起之秀

Rank: 20Rank: 20Rank: 20Rank: 20

铜币
362
发表于 2022-7-6 15:22:47 | 显示全部楼层
并不是要就哪种方式更好展开辩论,但这也会起作用:
 
  1. [color=blue][font="Courier New"]
  2. (defun c:dlbd ( / bd)
  3. (if (setq BD (ssget "X" '((2 . "AIA_D1-L000"))))
  4.    (command "._erase" bd "")  
  5. )
  6. (princ)
  7. )
  8. [/font][/color]
回复

使用道具 举报

0

主题

119

帖子

119

银币

初来乍到

Rank: 1

铜币
0
发表于 2022-7-6 15:27:26 | 显示全部楼层
 
当然但看起来OP想要加入。这就是为什么我说“如果你必须使用entdel”。
回复

使用道具 举报

24

主题

1265

帖子

1028

银币

后起之秀

Rank: 20Rank: 20Rank: 20Rank: 20

铜币
362
发表于 2022-7-6 15:29:04 | 显示全部楼层
没错,但OP也说“我刚刚开始编写自己的LISP例程”。。。所以我只是提供了一个替代方案,因为初学者可能不知道(命令)功能。
回复

使用道具 举报

0

主题

119

帖子

119

银币

初来乍到

Rank: 1

铜币
0
发表于 2022-7-6 15:32:46 | 显示全部楼层
观点已被采纳。
回复

使用道具 举报

2

主题

439

帖子

536

银币

限制会员

铜币
-14
发表于 2022-7-6 15:38:34 | 显示全部楼层
转换选择集->列表和mapcar的entdel。
 
  1. (defun c:dlbd ( / bd)
  2. (if(setq BD (ssget "X" '((2 . "AIA_D1-L000"))))
  3.    (mapcar 'entdel
  4. (vl-remove-if 'listp(mapcar 'cadr(ssnamex BD))))
  5. ); end if
  6. (princ)
  7. ); end c:dlbd
回复

使用道具 举报

CAB

29

主题

781

帖子

430

银币

中流砥柱

Rank: 25

铜币
526
发表于 2022-7-6 15:42:01 | 显示全部楼层
entdel的问题是,它只适用于模型空间和最近活动的布局。
因此,如果使用(ssget“_X”),则不应使用entdel。
 
  1. (vl-load-com)
  2. (mapcar '(lambda (x) (vla-delete (vlax-ename->vla-object x)))
  3.                                   (mapcar 'cadr (ssnamex ss)))
回复

使用道具 举报

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-6 15:47:37 | 显示全部楼层
谁会想到会有这么多方法删除某些内容。。。
回复

使用道具 举报

1

主题

3

帖子

2

银币

初来乍到

Rank: 1

铜币
5
发表于 2022-7-6 15:50:56 | 显示全部楼层
谢谢大家的回复。
 
我的第一次尝试看起来类似于rkmcswain的代码。我有一些问题,我认为语法问题。所以我在谷歌上搜索,直到找到了entdel。
 
现在这部分很好。最新版本看起来像这样。
 
  1. (defun c:dlbd ( / bd)
  2. (if (setq BD (ssget "X" '((2 . "AIA_D1-L000"))))
  3.    (command "._erase" bd "")
  4.    (command "._purge" "b" "n")  
  5.    (command "._xref" "a" "X:\\PATH\\AIA_D1-L000.dwg" "0,0,0" "" "" "")
  6. )
  7. (princ)
  8. )

 
我知道加载时会出现语法错误。我认为这与清除命令有关,当我将其取出时,它加载良好。但是,由于旧边界块和新边界外部参照具有相同的名称,我需要清除该块。
回复

使用道具 举报

发表回复

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

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

QQ|关于我们|小黑屋|乐筑天下 繁体中文

GMT+8, 2025-3-4 20:24 , Processed in 0.335395 second(s), 72 queries .

© 2020-2025 乐筑天下

联系客服 关注微信 帮助中心 下载APP 返回顶部 返回列表