eyeofnewt555 发表于 2022-7-5 16:11:14

批量更改所有块属性

我有很多块,每个都有相同的属性,但预设值不同。令人讨厌的是,当插入属性值时,会弹出编辑属性值的对话框(此处描述的问题)。我知道这可以用ATTREQ来抑制,但我宁愿人们不必更改任何设置,这样它就能自己顺利工作。
 
所以,没有手动遍历每个属性并将其更改为“预设>是”,有人为此获得了一个方便的LISP吗?
 
谢谢

13lade001 发表于 2022-7-5 16:16:51

您可以为它们关闭ATTREQ,并在完成后或代码出错时重置它。请参阅“重置用户环境”标题下的Lee Mac的错误处理页面,该页面为osm系统变量执行此操作。

Lee Mac 发表于 2022-7-5 16:22:17

请尝试以下操作:
(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)

eyeofnewt555 发表于 2022-7-5 16:23:26

你是人间的神。谢谢你,李!

Lee Mac 发表于 2022-7-5 16:30:39

不客气,我很高兴这有帮助。

kevinpo 发表于 2022-7-5 16:34:08

你好,李,
有没有办法将一个块(标记修订)更改为假预设?
我正在努力,但一直被代码缠住。
 
谢谢
凯文

BIGAL 发表于 2022-7-5 16:37:47

试试这个
 

(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)
)

kevinpo 发表于 2022-7-5 16:41:06

感谢您的快速响应,但它似乎没有将预设更改为否/假。
我只想更改块定义中的一个属性,将预设设置为“否”。如果我在块编辑器的“特性”选项板中查看它,它仍然会对预设说“是”。之后我也尝试了attsync,但仍然没有改变。我不想选择块,而只是修复它,如果它在绘图中。
非常感谢。

Lee Mac 发表于 2022-7-5 16:44:07

以下内容将随所有块中的标记修订而更改属性:
(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)

Grrr 发表于 2022-7-5 16:50:11

比加尔,
属性定义包含在块的定义中,而
属性引用包含在块的引用中,因此:
 

(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
查看完整版本: 批量更改所有块属性