乐筑天下

搜索
欢迎各位开发者和用户入驻本平台 尊重版权,从我做起,拒绝盗版,拒绝倒卖 签到、发布资源、邀请好友注册,可以获得银币 请注意保管好自己的密码,避免账户资金被盗
查看: 49|回复: 15

[编程交流] 批量更改所有块属性

[复制链接]

13

主题

42

帖子

29

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
65
发表于 2022-7-5 16:11:14 | 显示全部楼层 |阅读模式
我有很多块,每个都有相同的属性,但预设值不同。令人讨厌的是,当插入属性值时,会弹出编辑属性值的对话框(此处描述的问题)。我知道这可以用ATTREQ来抑制,但我宁愿人们不必更改任何设置,这样它就能自己顺利工作。
 
所以,没有手动遍历每个属性并将其更改为“预设>是”,有人为此获得了一个方便的LISP吗?
 
谢谢
回复

使用道具 举报

1

主题

4

帖子

3

银币

初来乍到

Rank: 1

铜币
5
发表于 2022-7-5 16:16:51 | 显示全部楼层
您可以为它们关闭ATTREQ,并在完成后或代码出错时重置它。请参阅“重置用户环境”标题下的Lee Mac的错误处理页面,该页面为osm系统变量执行此操作。
回复

使用道具 举报

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-5 16:22:17 | 显示全部楼层
请尝试以下操作:
  1. (defun c:presetattdefs nil
  2.    (vlax-for blk (vla-get-blocks (vla-get-activedocument (vlax-get-acad-object)))
  3.        (if (= :vlax-false (vla-get-islayout blk) (vla-get-isxref blk))
  4.            (vlax-for obj blk
  5.                (if (and (= "AcDbAttributeDefinition" (vla-get-objectname obj)) (vlax-write-enabled-p obj))
  6.                    (vla-put-preset obj :vlax-true)
  7.                )
  8.            )
  9.        )
  10.    )
  11.    (princ)
  12. )
  13. (vl-load-com) (princ)
回复

使用道具 举报

13

主题

42

帖子

29

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
65
发表于 2022-7-5 16:23:26 | 显示全部楼层
你是人间的神。谢谢你,李!
回复

使用道具 举报

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-5 16:30:39 | 显示全部楼层
不客气,我很高兴这有帮助。
回复

使用道具 举报

1

主题

8

帖子

7

银币

初来乍到

Rank: 1

铜币
6
发表于 2022-7-5 16:34:08 | 显示全部楼层
你好,李,
有没有办法将一个块(标记修订)更改为假预设?
我正在努力,但一直被代码缠住。
 
谢谢
凯文
回复

使用道具 举报

106

主题

1万

帖子

101

银币

顶梁支柱

Rank: 50Rank: 50

铜币
1299
发表于 2022-7-5 16:37:47 | 显示全部楼层
试试这个
 
  1. (setq obj (vlax-ename->vla-object (car (entsel "\nPick "))))
  2. (if (and (= "AcDbAttributeDefinition" (vla-get-objectname obj)) (vlax-write-enabled-p obj))
  3. (vla-put-preset obj :vlax-false)
  4. )
回复

使用道具 举报

1

主题

8

帖子

7

银币

初来乍到

Rank: 1

铜币
6
发表于 2022-7-5 16:41:06 | 显示全部楼层
感谢您的快速响应,但它似乎没有将预设更改为否/假。
我只想更改块定义中的一个属性,将预设设置为“否”。如果我在块编辑器的“特性”选项板中查看它,它仍然会对预设说“是”。之后我也尝试了attsync,但仍然没有改变。我不想选择块,而只是修复它,如果它在绘图中。
非常感谢。
回复

使用道具 举报

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-5 16:44:07 | 显示全部楼层
以下内容将随所有块中的标记修订而更改属性:
  1. (defun c:presetattdefs nil
  2.    (vlax-for blk (vla-get-blocks (vla-get-activedocument (vlax-get-acad-object)))
  3.        (if (= :vlax-false (vla-get-islayout blk) (vla-get-isxref blk))
  4.            (vlax-for obj blk
  5.                (if (and (= "AcDbAttributeDefinition" (vla-get-objectname obj)) (vlax-write-enabled-p obj) [color=red](= "REVISION" (strcase (vla-get-tagstring obj)))[/color])
  6.                    (vla-put-preset obj [color=red]:vlax-false[/color])
  7.                )
  8.            )
  9.        )
  10.    )
  11.    (princ)
  12. )
  13. (vl-load-com) (princ)
回复

使用道具 举报

66

主题

1552

帖子

1514

银币

后起之秀

Rank: 20Rank: 20Rank: 20Rank: 20

铜币
325
发表于 2022-7-5 16:50:11 | 显示全部楼层
比加尔,
属性定义包含在块的定义中,而
属性引用包含在块的引用中,因此:
 
  1. (defun C:test nil
  2. (vlax-map-collection
  3.    (vla-item
  4.      (vla-get-Blocks (vla-get-ActiveDocument (vlax-get-acad-object)))
  5.      (vla-get-EffectiveName (vlax-ename->vla-object (car (entsel "\nSelect a block: "))))
  6.    )
  7.    (quote
  8.      (lambda (o)
  9.        (and
  10.          (vlax-write-enabled-p o)
  11.          (eq "AcDbAttributeDefinition" (vla-get-ObjectName o))
  12.          (vla-put-Preset o :vlax-false)
  13.        )
  14.      )
  15.    )
  16. )
  17. )

 
我真的不知道该代码应该做什么,但它应该可以工作。
回复

使用道具 举报

发表回复

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

QQ|关于我们|小黑屋|乐筑天下 繁体中文

GMT+8, 2025-3-13 19:54 , Processed in 0.399658 second(s), 72 queries .

© 2020-2025 乐筑天下

联系客服 关注微信 帮助中心 下载APP 返回顶部 返回列表