乐筑天下

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

[编程交流] 从复制属性定义

[复制链接]

15

主题

243

帖子

228

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
75
发表于 2022-7-5 22:55:22 | 显示全部楼层 |阅读模式
嘿,大家好——尽管有各种各样的属性例程可以复制属性值,复制属性标签/提示,等等,放在互联网上的各种论坛上,但经过一个多小时的查找,我还没有找到一个可以完成以下任务的例程,希望有人能够提供一个。
 
 
*允许选择“源”块
*将所有属性定义从源块复制到位于同一空间内的任意数量的其他块。
 
 
这些“其他块”此时将没有属性-此例程应是在选择源块后创建这些定义并将其添加到所选每个块的例程。
 
 
提前感谢!!
回复

使用道具 举报

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-5 23:15:05 | 显示全部楼层
请尝试以下代码:
  1. [color=GREEN];; Copy Attribute Definitions  -  Lee Mac[/color]
  2. ([color=BLUE]defun[/color] c:copyattdef ( [color=BLUE]/[/color] blk bln cmd doc idx lst sel src tmp )
  3.    ([color=BLUE]if[/color]
  4.        ([color=BLUE]and[/color]
  5.            ([color=BLUE]princ[/color] [color=MAROON]"\nSelect source block..."[/color])
  6.            ([color=BLUE]setq[/color] src ([color=BLUE]ssget[/color] [color=MAROON]"_+.:E:S"[/color] '((0 . [color=MAROON]"INSERT"[/color]) (66 . 1))))
  7.            ([color=BLUE]princ[/color] [color=MAROON]"\nSelect blocks to copy attributes to..."[/color])
  8.            ([color=BLUE]setq[/color] sel ([color=BLUE]ssget[/color] '((0 . [color=MAROON]"INSERT"[/color]))))
  9.        )
  10.        ([color=BLUE]progn[/color]
  11.            ([color=BLUE]setq[/color] doc ([color=BLUE]vla-get-activedocument[/color] ([color=BLUE]vlax-get-acad-object[/color]))
  12.                  blk ([color=BLUE]vla-get-blocks[/color] doc)
  13.            )
  14.            ([color=BLUE]vlax-for[/color] obj ([color=BLUE]vla-item[/color] blk (LM:blockname ([color=BLUE]vlax-ename->vla-object[/color] ([color=BLUE]ssname[/color] src 0))))
  15.                ([color=BLUE]if[/color] ([color=BLUE]=[/color] [color=MAROON]"AcDbAttributeDefinition"[/color] ([color=BLUE]vla-get-objectname[/color] obj))
  16.                    ([color=BLUE]setq[/color] lst ([color=BLUE]cons[/color] obj lst))
  17.                )
  18.            )
  19.            ([color=BLUE]if[/color] ([color=BLUE]setq[/color] lst ([color=BLUE]reverse[/color] lst))
  20.                ([color=BLUE]progn[/color]
  21.                    ([color=BLUE]repeat[/color] ([color=BLUE]setq[/color] idx ([color=BLUE]sslength[/color] sel))
  22.                        ([color=BLUE]if[/color] ([color=BLUE]not[/color] ([color=BLUE]member[/color] ([color=BLUE]setq[/color] bln (LM:blockname ([color=BLUE]vlax-ename->vla-object[/color] ([color=BLUE]ssname[/color] sel ([color=BLUE]setq[/color] idx ([color=BLUE]1-[/color] idx)))))) tmp))
  23.                            ([color=BLUE]progn[/color]
  24.                                ([color=BLUE]setq[/color] tmp ([color=BLUE]cons[/color] bln tmp))
  25.                                ([color=BLUE]vlax-invoke[/color] doc 'copyobjects lst ([color=BLUE]vla-item[/color] blk bln))
  26.                            )
  27.                        )
  28.                    )
  29.                    ([color=BLUE]setq[/color] cmd ([color=BLUE]getvar[/color] 'cmdecho))
  30.                    ([color=BLUE]setvar[/color] 'cmdecho 0)
  31.                    ([color=BLUE]foreach[/color] itm tmp ([color=BLUE]vl-cmdf[/color] [color=MAROON]"_.attsync"[/color] [color=MAROON]"_n"[/color] itm))
  32.                    ([color=BLUE]setvar[/color] 'cmdecho cmd)
  33.                )
  34.            )
  35.        )
  36.    )
  37.    ([color=BLUE]princ[/color])
  38. )
  39. [color=GREEN];; Block Name  -  Lee Mac[/color]
  40. [color=GREEN];; Returns the true (effective) name of a supplied block reference[/color]
  41.                        
  42. ([color=BLUE]defun[/color] LM:blockname ( obj )
  43.    ([color=BLUE]if[/color] ([color=BLUE]vlax-property-available-p[/color] obj 'effectivename)
  44.        ([color=BLUE]defun[/color] LM:blockname ( obj ) ([color=BLUE]vla-get-effectivename[/color] obj))
  45.        ([color=BLUE]defun[/color] LM:blockname ( obj ) ([color=BLUE]vla-get-name[/color] obj))
  46.    )
  47.    (LM:blockname obj)
  48. )
  49. ([color=BLUE]vl-load-com[/color]) ([color=BLUE]princ[/color])
回复

使用道具 举报

15

主题

243

帖子

228

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
75
发表于 2022-7-5 23:40:01 | 显示全部楼层
美丽的李,像一个迷人的作品
问题:这是否需要我进入beditor将def保存到文件中,或者在我的块上执行此例程的过程中会处理好吗?
非常感谢。
回复

使用道具 举报

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-5 23:40:39 | 显示全部楼层
 
不客气Brandon
 
 
我不确定您所说的“将定义保存到文件”是指使用WBLOCK命令将块定义导出到外部图形文件吗?
 
程序将在源块中找到的属性定义复制到选定“目标块”的块定义中,然后执行ATTSYNC,将这些新属性定义同步到修改的块定义的所有块引用中。
回复

使用道具 举报

15

主题

243

帖子

228

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
75
发表于 2022-7-5 23:56:16 | 显示全部楼层
 
嘿,又来了。为了澄清,是的,这些块定义都有自己的定义。存储在服务器网络上的dwg文件。
我想知道使用此例程添加属性是否会永久添加它们,或者只是将它们添加到执行例程的图形中当前正在使用的块中。
Blerg,这很有意思,但我只是想确定是否需要“保存到文件”,然后在运行此例程后覆盖现有的块定义。
为了安全起见,也为了不想在我两次创建的区块库上运行这个公认的、非常好的例程。。。我继续通过这个例程添加属性,然后右键单击块,块编辑器,保存。。。保存到文件。。。但是有必要吗?
 
 
干杯,希望一切顺利
回复

使用道具 举报

发表回复

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

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

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

GMT+8, 2025-3-11 03:16 , Processed in 0.486310 second(s), 62 queries .

© 2020-2025 乐筑天下

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