乐筑天下

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

[编程交流] 更改块属性

[复制链接]

1

主题

4

帖子

3

银币

初来乍到

Rank: 1

铜币
5
发表于 2022-7-6 09:56:07 | 显示全部楼层 |阅读模式
大家好,
 
我对autocad很陌生,但对编程基本熟悉。我正在尝试编写一个脚本来更改块中的一些信息。
 
不幸的是,更改很复杂,需要在大约一百张图纸上完成。
 
当前块具有:
设计人:批准人:
 
最初创建块的人应该将这两个标记分开,以使过程更容易(DName&AName会更好)。
 
有没有办法只更改“批准人”框中的XXX标签?我尝试过处理-attedit和命令,但它似乎适用于标记的两个实例。我可以使用数值引用标签吗?比如说XXX(1)类似于数组?我已经看到VBA可以用于使用数组进行引用,但不幸的是,2010年没有安装VBA,需要调用它。
 
谢谢
回复

使用道具 举报

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-6 10:04:40 | 显示全部楼层
您好,论坛32,
 
欢迎来到CADTutor
 
看看这里的子函数选择——SetAttributeValue函数只会设置它用特定标记找到的第一个属性的值——你可以使用Visual LISP或Vanilla LISP来解决这个问题。
 
回复

使用道具 举报

26

主题

1495

帖子

20

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
118
发表于 2022-7-6 10:13:53 | 显示全部楼层
这是一个snipet,它逐步遍历属性插入的选择集,并将其属性标记名和值转储到关联列表中:
 
  1. [b][color=BLACK]([/color][/b]defun c:dump-att [b][color=FUCHSIA]([/color][/b]/ i ss en ed an ad al[b][color=FUCHSIA])[/color][/b]
  2. [b][color=FUCHSIA]([/color][/b]and [b][color=NAVY]([/color][/b]setq i -1
  3.            ss [b][color=MAROON]([/color][/b]ssget '[b][color=GREEN]([/color][/b][b][color=BLUE]([/color][/b]0 . [color=#2f4f4f]"INSERT"[/color][b][color=BLUE])[/color][/b][b][color=BLUE]([/color][/b]66 . 1[b][color=BLUE])[/color][/b][b][color=GREEN])[/color][/b][b][color=MAROON])[/color][/b][b][color=NAVY])[/color][/b]
  4.       [b][color=NAVY]([/color][/b]while [b][color=MAROON]([/color][/b]setq en [b][color=GREEN]([/color][/b]ssname ss [b][color=BLUE]([/color][/b]setq i [b][color=RED]([/color][/b]1+ i[b][color=RED])[/color][/b][b][color=BLUE])[/color][/b][b][color=GREEN])[/color][/b][b][color=MAROON])[/color][/b]
  5.              [b][color=MAROON]([/color][/b]setq ed [b][color=GREEN]([/color][/b]entget en[b][color=GREEN])[/color][/b]
  6.                    an [b][color=GREEN]([/color][/b]entnext en[b][color=GREEN])[/color][/b]
  7.                    ad [b][color=GREEN]([/color][/b]entget an[b][color=GREEN])[/color][/b]
  8.                    al nil[b][color=MAROON])[/color][/b]
  9.              [b][color=MAROON]([/color][/b]while [b][color=GREEN]([/color][/b]= [color=#2f4f4f]"ATTRIB"[/color] [b][color=BLUE]([/color][/b]cdr [b][color=RED]([/color][/b]assoc 0 ad[b][color=RED])[/color][/b][b][color=BLUE])[/color][/b][b][color=GREEN])[/color][/b]
  10.                     [b][color=GREEN]([/color][/b]setq al [b][color=BLUE]([/color][/b]cons [b][color=RED]([/color][/b]cons [b][color=PURPLE]([/color][/b]cdr [b][color=TEAL]([/color][/b]assoc 2 ad[b][color=TEAL])[/color][/b][b][color=PURPLE])[/color][/b]
  11.                                          [b][color=PURPLE]([/color][/b]cdr [b][color=TEAL]([/color][/b]assoc 1 ad[b][color=TEAL])[/color][/b][b][color=PURPLE])[/color][/b][b][color=RED])[/color][/b] al[b][color=BLUE])[/color][/b]
  12.                           an [b][color=BLUE]([/color][/b]entnext an[b][color=BLUE])[/color][/b]
  13.                           ad [b][color=BLUE]([/color][/b]entget an[b][color=BLUE])[/color][/b][b][color=GREEN])[/color][/b][b][color=MAROON])[/color][/b]
  14.              [b][color=MAROON]([/color][/b]setq al [b][color=GREEN]([/color][/b]reverse al[b][color=GREEN])[/color][/b][b][color=MAROON])[/color][/b]
  15.              [b][color=MAROON]([/color][/b]textpage[b][color=MAROON])[/color][/b]
  16.              [b][color=MAROON]([/color][/b]princ [b][color=GREEN]([/color][/b]strcat [color=#2f4f4f]"\n"[/color] [b][color=BLUE]([/color][/b]cdr [b][color=RED]([/color][/b]assoc 2 ed[b][color=RED])[/color][/b][b][color=BLUE])[/color][/b] [color=#2f4f4f]" Attributes [b][color=BLUE]([/color][/b]Tag . Value[b][color=BLUE])[/color][/b]\n"[/color][b][color=GREEN])[/color][/b][b][color=MAROON])[/color][/b]
  17.              [b][color=MAROON]([/color][/b]prin1 al[b][color=MAROON])[/color][/b]
  18.              [b][color=MAROON]([/color][/b]getstring [color=#2f4f4f]"\nPress Enter To Continue..."[/color][b][color=MAROON])[/color][/b][b][color=NAVY])[/color][/b][b][color=FUCHSIA])[/color][/b]
  19.    [b][color=FUCHSIA]([/color][/b]prin1[b][color=FUCHSIA])[/color][/b][b][color=BLACK])[/color][/b]

 
我是否理解您(2)具有相同标记名的属性-大卫
回复

使用道具 举报

1

主题

4

帖子

3

银币

初来乍到

Rank: 1

铜币
5
发表于 2022-7-6 10:16:18 | 显示全部楼层
谢谢大家,这已经是好消息了。SetAttrib是否可以轻松修改以拾取给定标记的第二个实例?我以前从未使用过lisp,但我开始掌握它了。
 
大卫:是的。没错,该块最初设置为使用相同的信息填充“设计人”和“批准人”字段(我不知道为什么)
 
这是块编辑器的屏幕截图
105607ey4b94e55wqk5kp4.jpg
 
其想法是只在“Approved:”字段中填写一个名称。(在100张图纸上相同)
 
这两个字段当前均为空。
 
以下是该脚本的输出:
  1. STANDARD Attributes (Tag . Value)
  2. (("DRAWING_NAME" . "removed") ("DRAWING-LINE_TWO" . "removed") ("XXX" . "<blank>") ("XXX" . "<blank>") ("MM_YY" . "FEB/05")
  3. ("SCALE" . "NTS") ("X-1" . "removed") ("FILE_NAME" . "removed"))

 
我计划将需要更改的图形复制到一个文件夹中,运行一个批处理文件来处理它们。最初我希望简单地制作一个脚本来做一些类似于-attedit,n,n,standard,XXX,*的事情,但它改变了XXX的两个实例。
 
看起来命令entnext在标记之间循环?
回复

使用道具 举报

26

主题

1495

帖子

20

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
118
发表于 2022-7-6 10:25:28 | 显示全部楼层
你能告诉我你是第一次还是第二次需要更换XXX吗-大卫
回复

使用道具 举报

1

主题

4

帖子

3

银币

初来乍到

Rank: 1

铜币
5
发表于 2022-7-6 10:31:35 | 显示全部楼层
我运行了李的Lisp,它改变了“设计人:”字段。所以我认为我需要改变的是第二次发生。
回复

使用道具 举报

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-6 10:33:55 | 显示全部楼层
 
嗨,论坛,
 
要首先达到第二个目标,请使用以下命令:
 
  1. ;;----------------=={ Set Attribute Value }==-----------------;;
  2. ;;                                                            ;;
  3. ;;  Populates the first attribute matching the tag specified  ;;
  4. ;;  found within the block supplied with the value specified, ;;
  5. ;;  if present.                                               ;;
  6. ;;------------------------------------------------------------;;
  7. ;;  Author: Lee Mac, Copyright © 2010 - www.lee-mac.com       ;;
  8. ;;------------------------------------------------------------;;
  9. ;;  Arguments:                                                ;;
  10. ;;  block - VLA Block Reference Object                        ;;
  11. ;;  tag   - Attribute TagString                               ;;
  12. ;;  value - Value to which the Attribute will be set          ;;
  13. ;;------------------------------------------------------------;;
  14. ;;  Returns:  Value the attribute was set to, else nil        ;;
  15. ;;------------------------------------------------------------;;
  16. ;; Modified to process the attributes in reverse order.
  17. (defun LM:SetAttributeValue ( block tag value )
  18. ;; © Lee Mac 2010
  19. (vl-some
  20.    (function
  21.      (lambda ( attrib )
  22.        (if (eq tag (vla-get-TagString attrib))
  23.          (progn (vla-put-TextString attrib value) value)
  24.        )
  25.      )
  26.    )
  27.    [color=red](reverse[/color] (vlax-invoke block 'GetAttributes)[color=red])[/color]
  28. )
  29. )
回复

使用道具 举报

26

主题

1495

帖子

20

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
118
发表于 2022-7-6 10:38:14 | 显示全部楼层
根据需要更改nv的字符串值
 
这将更改标记名为“XXX”的第二个属性
 
  1. [b][color=BLACK]([/color][/b]defun c:xxx-att [b][color=FUCHSIA]([/color][/b]/ nv i ss en ed an ad tg xt[b][color=FUCHSIA])[/color][/b]
  2. [b][color=FUCHSIA]([/color][/b]setq nv [color=#2f4f4f]"New Name Value"[/color][b][color=FUCHSIA])[/color][/b]
  3. [b][color=FUCHSIA]([/color][/b]and [b][color=NAVY]([/color][/b]setq i -1
  4.            ss [b][color=MAROON]([/color][/b]ssget '[b][color=GREEN]([/color][/b][b][color=BLUE]([/color][/b]0 . [color=#2f4f4f]"INSERT"[/color][b][color=BLUE])[/color][/b][b][color=BLUE]([/color][/b]66 . 1[b][color=BLUE])[/color][/b][b][color=GREEN])[/color][/b][b][color=MAROON])[/color][/b][b][color=NAVY])[/color][/b]
  5.       [b][color=NAVY]([/color][/b]while [b][color=MAROON]([/color][/b]setq en [b][color=GREEN]([/color][/b]ssname ss [b][color=BLUE]([/color][/b]setq i [b][color=RED]([/color][/b]1+ i[b][color=RED])[/color][/b][b][color=BLUE])[/color][/b][b][color=GREEN])[/color][/b][b][color=MAROON])[/color][/b]
  6.              [b][color=MAROON]([/color][/b]setq ed [b][color=GREEN]([/color][/b]entget en[b][color=GREEN])[/color][/b]
  7.                    an [b][color=GREEN]([/color][/b]entnext en[b][color=GREEN])[/color][/b]
  8.                    ad [b][color=GREEN]([/color][/b]entget an[b][color=GREEN])[/color][/b]
  9.                    xt nil[b][color=MAROON])[/color][/b]
  10.              [b][color=MAROON]([/color][/b]while [b][color=GREEN]([/color][/b]= [color=#2f4f4f]"ATTRIB"[/color] [b][color=BLUE]([/color][/b]cdr [b][color=RED]([/color][/b]assoc 0 ad[b][color=RED])[/color][/b][b][color=BLUE])[/color][/b][b][color=GREEN])[/color][/b]
  11.                     [b][color=GREEN]([/color][/b]setq tg [b][color=BLUE]([/color][/b]cdr [b][color=RED]([/color][/b]assoc 2 ad[b][color=RED])[/color][/b][b][color=BLUE])[/color][/b][b][color=GREEN])[/color][/b]
  12.                     [b][color=GREEN]([/color][/b]cond [b][color=BLUE]([/color][/b][b][color=RED]([/color][/b]and [b][color=PURPLE]([/color][/b]= tg [color=#2f4f4f]"XXX"[/color][b][color=PURPLE])[/color][/b]
  13.                                 [b][color=PURPLE]([/color][/b]not xt[b][color=PURPLE])[/color][/b][b][color=RED])[/color][/b]
  14.                            [b][color=RED]([/color][/b]setq xt T[b][color=RED])[/color][/b][b][color=BLUE])[/color][/b]
  15.                           [b][color=BLUE]([/color][/b][b][color=RED]([/color][/b]and [b][color=PURPLE]([/color][/b]= tg [color=#2f4f4f]"XXX"[/color][b][color=PURPLE])[/color][/b]
  16.                                 xt[b][color=RED])[/color][/b]
  17.                            [b][color=RED]([/color][/b]entmod [b][color=PURPLE]([/color][/b]subst [b][color=TEAL]([/color][/b]cons 1 nv[b][color=TEAL])[/color][/b] [b][color=TEAL]([/color][/b]assoc 1 ad[b][color=TEAL])[/color][/b] ad[b][color=PURPLE])[/color][/b][b][color=RED])[/color][/b][b][color=BLUE])[/color][/b][b][color=GREEN])[/color][/b]
  18.                     [b][color=GREEN]([/color][/b]setq an [b][color=BLUE]([/color][/b]entnext an[b][color=BLUE])[/color][/b]
  19.                           ad [b][color=BLUE]([/color][/b]entget an[b][color=BLUE])[/color][/b][b][color=GREEN])[/color][/b][b][color=MAROON])[/color][/b][b][color=NAVY])[/color][/b][b][color=FUCHSIA])[/color][/b]
  20.    [b][color=FUCHSIA]([/color][/b]prin1[b][color=FUCHSIA])[/color][/b][b][color=BLACK])[/color][/b]

 
我明白了,它也会改变第三个、第四个、第五个。。。。XXX也是。只是不是第一个。
 
玩得开心-大卫
回复

使用道具 举报

44

主题

3166

帖子

2803

银币

中流砥柱

Rank: 25

铜币
557
发表于 2022-7-6 10:50:04 | 显示全部楼层
您是否考虑过使用图纸集管理器(SSM)?
 
我们使用属性标题栏,将其转换为字段(属性值),并由SSM自定义属性填充。一次更改,每个具有修订属性的计划表将在打印时反映更改。对于已打开的图形,只需重新生成即可。
 
希望这有帮助!
回复

使用道具 举报

1

主题

4

帖子

3

银币

初来乍到

Rank: 1

铜币
5
发表于 2022-7-6 10:55:12 | 显示全部楼层
你们太棒了。。。。到目前为止,它工作得很好。我在文件夹中运行了一个批处理文件和几个测试pdf。
 
1) 我将lisp放入autoloader for autocad(忘记确切的名称,但在autocad启动时为您加载lsp)。
2) 批处理文件调用acad。exe/b“替换”所有图纸。
3) 更换。scr:基本上运行lsp,提供块。保存,然后退出。
 
可能不是最优雅的解决方案,但可以节省一些人手动编辑图形的时间。
 
SSM嗯?对AutoCAD来说太陌生了,我不熟悉它,但我会用它来看看我能想出什么。
回复

使用道具 举报

发表回复

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

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

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

GMT+8, 2025-3-7 00:30 , Processed in 0.374192 second(s), 74 queries .

© 2020-2025 乐筑天下

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