如何entmod一个块定义
比如我再图中定义了图块,块名为"a",现在插入的一个图块中某个图元的颜色,如何entmod块a,达到更新整个图中包括块中块中的图块a,的效果。看了帮助,说“如果用 entmod 函数修改了块定义中的图元,该修改会影响图形中该块的所有实例。“ tblobjname 返回的图元名可以用于 entget 和 entmod 操作。 本帖最后由 liuhe 于 2023-8-10 09:26 编辑警告! 可以用 entmod 函数修改块定义中的图元,但这样做可能会生成引用自身的块,导致 AutoCAD 系统崩溃。
给你一个参考,修改块中直线的图层,必须要刷新显示
(DEFUN C:TT ()
(SETQ NAME (CDR (ASSOC 2 (ENTGET (CAR (ENTSEL))))))
(setq ent (tblobjname "Block" NAME))
(while (setq ent (entnext ent))
(IF (= "LINE" (CDR (ASSOC 0 (ENTGET ENT))))
(entmod (SUBST (CONS 8 "2") (ASSOC 8 (entget ent)) (entget ent)))
)
)
(setq thisdrawing
(vla-get-activedocument
(vlax-get-acad-object)))
(vla-Regen thisdrawing acAllViewports)
(princ)
)
liuhe 发表于 2023-8-11 08:49
你这说话 前言不搭后语,用不用vla-regen,跟你画图有啥关系。论坛一堆能够抄袭代码用于块内操作
不好意思,说得不清楚。 就是这样:
(setq en (entsel));;;此处点选图块
(setq nentlst (nentselp(cadr en) ))
(vla-put-color(vlax-ename->vla-object(carnentlst)) 3)
如果开始点选的是图块a中的一条线, 现在图块a是图块b的一个子图元,也就是说块a是块b的块中块。请问如何更新图块B中的图块a。
如果遍历图块,找到包含有块a的所有图块再更新,或则全图重生成,速度有时候很慢。 我就想高明白block重定义一下图块后,全图所有的图块都会更新,速度非常块,不知道是怎么做的 960322 发表于 2023-8-11 14:15
不好意思,说得不清楚。 就是这样:
(setq en (entsel));;;此处点选图块
(setq nentlst (nentselp(ca ...
你更新了图块a,图块b中的a自然会变动。关键是你对图块a的更新成功了吗?块中块的更新只是判断图元是不是块,如果是块,就进行递归,比如修改块中块的颜色。我不建议你用lisp entmod更新块,而是用vlisp的函数,进行嵌套快的处理。论坛搜索块中块,代码一大堆可以抄,实在不行就花钱定制 我这样试了下,好像不行
(setq ent (tblobjname "Block" "a"))
(while (setq ent (entnext ent))
(entmod(entget ent))
) 960322 发表于 2023-8-9 23:23
我这样试了下,好像不行
(setq ent (tblobjname "Block" "a"))
(while (setq ent (entnext ent)) ...
啥都没改 看不出效果 就是不行啊,所以我来问呢 960322 发表于 2023-8-9 23:23
我这样试了下,好像不行
(setq ent (tblobjname "Block" "a"))
(while (setq ent (entnext ent)) ...
你这不是没有改吗?entmod有什么用? 我之前已经把其中一个插入的图块中的文字内容改过了,(entnext ent)也看到这个文字内容已经更新了。但是entmode没有用,不会全图的块都改 其实就是想达到用nentsel改了某个块内的图元性质,全图一起改,包括块中块。 就像用block命令重定义图块之后,全图的图块都会更新,也不用regen 你这说话 前言不搭后语,用不用vla-regen,跟你画图有啥关系。论坛一堆能够抄袭代码用于块内操作
页:
[1]
2