如何通过Autolisp删除块?
块与块参照(块引用),是很容易混淆的两个概念,好多人都搞不清楚, 常常把块参照说成块甚至是当作块本身了。
这个问题,我猜测有两方面的原因:
- 很大程度上是翻译不当造成的,或者说,早期的翻译不够用心过于随意导致的。
- 大家口语表述的时候过于随意,有意无意地做了省略,块参照就慢慢变成了块。
块对应的英文说法是block
,它就相当于一个模子、一个印章。而块参照,
对应的英文说法是block reference
,reference
也可以翻译为引用,
块参照就相当于模子做出来的东西、印章盖出来的章。
参照当作名词来用,弄出来的块参照
、外部参照
大概是学习AutoCAD初期比较难以理解的两个概念。
言归正传,对于熟悉了autolisp的人来说,删除块应该有3种方法:
- 通过
command
函数使用purge
命令来删除; - 使用
entdel
函数删除; - 使用
vla-delete
函数删除;
我之前也是这么认为的,直到用entdel尝试了很多遍之后,之后我就改变了想法。
在花费了几个小时去尝试试验之后,我发现删除块只能用上面的1、3两种方法, 第2种方法无法奏效,无法奏效的原因目前仍然没有搞清楚。
在上述两种方法中,推荐采用第3种方法,因为第1种方法会有命令行回显,
这个回显是没有办法通过 cmdecho
变量去关掉的。
除了无法关掉 purge
命令的命令行回显,vla-delete
也有1个坑,
它不能删除由图元名转换而来的block对象,它只能删除直接获取到的vla对象。
比如,下面的代码运行之后会报错,块也不会成功删除,
只有写成下面这样才能运行成功,
真的的很奇怪!
不得不说,活到老学到老有时也是刚需。
文章作者 Jack Hsu
上次更新 2024-05-31
许可协议 Copyright © Jack Hsu. All Rights Reserved.