批量更改所有块属性
我有很多块,每个都有相同的属性,但预设值不同。令人讨厌的是,当插入属性值时,会弹出编辑属性值的对话框(此处描述的问题)。我知道这可以用ATTREQ来抑制,但我宁愿人们不必更改任何设置,这样它就能自己顺利工作。所以,没有手动遍历每个属性并将其更改为“预设>是”,有人为此获得了一个方便的LISP吗?
谢谢 您可以为它们关闭ATTREQ,并在完成后或代码出错时重置它。请参阅“重置用户环境”标题下的Lee Mac的错误处理页面,该页面为osm系统变量执行此操作。 请尝试以下操作:
(defun c:presetattdefs nil
(vlax-for blk (vla-get-blocks (vla-get-activedocument (vlax-get-acad-object)))
(if (= :vlax-false (vla-get-islayout blk) (vla-get-isxref blk))
(vlax-for obj blk
(if (and (= "AcDbAttributeDefinition" (vla-get-objectname obj)) (vlax-write-enabled-p obj))
(vla-put-preset obj :vlax-true)
)
)
)
)
(princ)
)
(vl-load-com) (princ) 你是人间的神。谢谢你,李! 不客气,我很高兴这有帮助。 你好,李,
有没有办法将一个块(标记修订)更改为假预设?
我正在努力,但一直被代码缠住。
谢谢
凯文 试试这个
(setq obj (vlax-ename->vla-object (car (entsel "\nPick "))))
(if (and (= "AcDbAttributeDefinition" (vla-get-objectname obj)) (vlax-write-enabled-p obj))
(vla-put-preset obj :vlax-false)
)
感谢您的快速响应,但它似乎没有将预设更改为否/假。
我只想更改块定义中的一个属性,将预设设置为“否”。如果我在块编辑器的“特性”选项板中查看它,它仍然会对预设说“是”。之后我也尝试了attsync,但仍然没有改变。我不想选择块,而只是修复它,如果它在绘图中。
非常感谢。 以下内容将随所有块中的标记修订而更改属性:
(defun c:presetattdefs nil
(vlax-for blk (vla-get-blocks (vla-get-activedocument (vlax-get-acad-object)))
(if (= :vlax-false (vla-get-islayout blk) (vla-get-isxref blk))
(vlax-for obj blk
(if (and (= "AcDbAttributeDefinition" (vla-get-objectname obj)) (vlax-write-enabled-p obj) (= "REVISION" (strcase (vla-get-tagstring obj))))
(vla-put-preset obj :vlax-false)
)
)
)
)
(princ)
)
(vl-load-com) (princ) 比加尔,
属性定义包含在块的定义中,而
属性引用包含在块的引用中,因此:
(defun C:test nil
(vlax-map-collection
(vla-item
(vla-get-Blocks (vla-get-ActiveDocument (vlax-get-acad-object)))
(vla-get-EffectiveName (vlax-ename->vla-object (car (entsel "\nSelect a block: "))))
)
(quote
(lambda (o)
(and
(vlax-write-enabled-p o)
(eq "AcDbAttributeDefinition" (vla-get-ObjectName o))
(vla-put-Preset o :vlax-false)
)
)
)
)
)
我真的不知道该代码应该做什么,但它应该可以工作。
页:
[1]
2