Freerefill 发表于 2022-7-6 14:37:21

如果您';ve vla put TextStr

... 你已经把它们全部用vla-put-TextString'ed了。
 
使用LISP可以编辑嵌套在块中的文本。一旦我对它的功能感到满意,我就会把它贴在这里,但有一个难题我还没有解决。
 
我所掌握的唯一信息是,在AutoCAD 2009中,您可以编辑块内的文字,但仍然允许仅在选定区域内进行编辑。我的LISP将允许您编辑文本,但会对所有块进行更改。现在,最简单的事情就是编辑块名,是吗?这样,只有一个唯一的实体被更改(根据LISP当前具有的单项选择功能)。但是,我想知道,有没有更好的方法不使用块名?某突击队员指出,如果我更改了名称,但必须重新插入块,编辑的块将不会被替换,因为它现在被称为其他东西。
 
底线是,如果一个人要编辑一个块,他会以什么方式编辑它,使该块的所有其他实例都不会被更改?

Lee Mac 发表于 2022-7-6 14:42:19

不能使用Entmod方法更改属性值吗?

Lee Mac 发表于 2022-7-6 14:45:03

甚至像这样?
 

(defun c:edAtt(/ ent)
(vl-load-com)
(and (setq ent (car (nentsel "\nSelect Attribute: ")))
      (eq "ATTRIB" (cdr (assoc 0 (entget ent))))
      (vla-put-Textstring
      (vlax-ename->vla-object ent) "It Works"))
(princ))

Freerefill 发表于 2022-7-6 14:50:12

 
我没有走这条路,因为我觉得我需要Visual LISP的附加功能来完成整个工作,但我会再看一看。
 
另外,当我在做的时候,有没有一种方法可以更新VBA实体,就像使用entupd一样?

Lee Mac 发表于 2022-7-6 14:53:47

 
我对VBA知之甚少。。。其他人必须回答这个问题。。

Freerefill 发表于 2022-7-6 14:57:02

好的,只要尝试一下,entmod方法就得到了相同的结果:像它应该做的那样进行适当的更改,但实体在刷新图形之前不会更改。
 
以下是我使用的代码,您可以自己查看:
 

(defun c:trr( / )
;(vla-put-TextString (vlax-ename->vla-object (car (nentsel))) " ")
(setq ent (car (nentsel)))
(setq entlst (entget ent))
(setq entlst (subst (cons 1 " ") (assoc 1 entlst) entlst))
(entmod entlst)
(entupd ent)
)

 
VLA的选择也在那里,刚刚评论道。

Lee Mac 发表于 2022-7-6 14:58:13

引用ACAD帮助:
 

Freerefill 发表于 2022-7-6 15:02:25

awww人。。太糟糕了!你知道,我的LISP游戏和GRREAD也有同样的问题。。。我不确定它是什么,但GRREAD返回的东西被保留了下来,我需要重新生成整个图形以清除它,以便它可以接受另一个或零输入。。
 
REGEN确实需要更大的灵活性。看起来要么全有要么全无,这对于AutoCAD来说很奇怪。如果我只是想重新生成积木呢?
 
哦,好吧。。我想现在还可以,直到我找到另一个解决方案。谢谢,李

Lee Mac 发表于 2022-7-6 15:05:29

(重画)速度更快,但我不确定它是否能像“regenall”一样表现好

Freerefill 发表于 2022-7-6 15:07:54

尝试“重画”,没有骰子,没有更新修改后的文本。“Regenall”可以工作,但“regen”会更快。(entmod)/(entupd)不工作。我尝试过使用“刷新”和“重新加载”ActiveX方法,但我以前从未使用过这些方法,因此我在尝试中的失败并没有完全消除这一障碍。“清除”和(gc)不起作用,不知道为什么会起作用,但嘿,值得一试。
 
不过,有一件事确实奏效了,那就是复制和粘贴积木。这是一种黑客方法,但从各方面考虑,都比试图用多个布局选项卡重新生成一个巨大的图形要快,这样你就可以对标题栏进行一次修改。
 
剩下的就是找到一种方法来编辑块内的嵌套文本实体,而不改变所述块的每个实例。老实说,我并不完全反对创建一个唯一的块名。但是,如果我必须这样做,那么AutoCAD是如何做到的呢?假设您复制并粘贴为块,则块具有唯一的名称。AutoCAD使用什么公式来生成这样的名称?
页: [1] 2
查看完整版本: 如果您';ve vla put TextStr