更改块名称
我似乎总是想解决最晦涩和毫无意义的问题。有没有办法使用LISP更改块的名称?我尝试了两种方法,vla-put-name和entmod/entupd方法。这是我的代码,没什么特别的:
你会注意到我在这里有两种方法,一种简单地注释掉了。
vla方法返回一个键错误,entmod/entupd方法没有错误,但不会更新块。关键的错误似乎是一个线索。。。块不包括在某种块参考表中。。?我从来没有遇到过这样的事情,所以我迷路了。我需要将块添加到表中吗?如果需要,如何添加?还是根本不可能?
我也在想,如果有必要的话,我可以用entmake重新创建它,但不确定这会如何工作。
有什么想法吗? 我试过这个,但我也得到了同样的结果:
(defun c:test(/ blk tStr)
(if (and (setq blk (car (entsel "\nSelect Block: ")))
(eq "AcDbBlockReference"
(vla-get-ObjectName
(setq blk
(vlax-ename->vla-object blk))))
(setq tStr (getstring t "\nSpecify New Name: "))
(snvalid tStr))
(if (vlax-property-available-p blk 'Name T)
(vla-put-Name blk tStr)
(princ "\nCannot Do that!")))
(princ))
实际上,这是可行的:
(defun c:test(/ blk tStr)
(if (and (setq blk (car (entsel "\nSelect Block: ")))
(eq "AcDbBlockReference"
(vla-get-ObjectName
(setq blk
(vlax-ename->vla-object blk))))
(setq tStr (getstring t "\nSpecify New Name: "))
(tblsearch "BLOCK" tStr))
(if (vl-catch-all-error-p
(vl-catch-all-apply
(function
(lambda (x)
(vla-put-Name x tStr))) (list blk)))
(princ "\nCannot Do that!")))
(princ))
这对我没用,李。它不会出错,但似乎不会更改块的名称。
新块名称也必须在图形中。
从ACAD帮助: 但是,如果块名称存在,则意味着-块存在,并且将块名称更改为现有块也会更改定义。。将边框的名称更改为标题栏的名称会将边框更改为标题栏。
这是有道理的,但它告诉我,如果我想保持一个块的原样,只是简单地更改名称,我必须从头开始重新创建它,可能是通过获取其中的所有实体。。。
我希望有更简单的方法
不可能所有事情都这么简单 创建新块并不太困难,这里有一个LISP,它是我编写的旧LISP的修改:
3
我相信你不知道那么好。。。英雄联盟
你们认识吗*只是好奇*
页:
[1]
2