乐筑天下

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

用VBA重新定义块..

[复制链接]

46

主题

118

帖子

23

银币

后起之秀

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

铜币
291
发表于 2008-3-20 10:28:51 | 显示全部楼层
属性不会更新。
找到每个块ref并用一个新的替换它更容易,首先匹配属性
回复

使用道具 举报

154

主题

1274

帖子

8

银币

顶梁支柱

Rank: 50Rank: 50

铜币
1936
发表于 2008-3-20 11:30:00 | 显示全部楼层
但是可以肯定的是,使用Keith提供的删除块中所有实体的函数,不会有任何不会更新的属性,因此只有新属性会出现并显示?
回复

使用道具 举报

46

主题

118

帖子

23

银币

后起之秀

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

铜币
291
发表于 2008-3-20 11:44:50 | 显示全部楼层
啊..现在我更充分地理解了你的要求的性质...
据我所知,如果更改属性的数量,更新属性的唯一方法是同步块引用。你也可以用VBA插入块,然后获取属性并修改它们。
在VBA中,您只能将属性附加到块、模型空间或图纸空间,没有addattributereference方法来添加对块中属性的引用。
假设您正在使用AddAttribute将属性添加回块中,那么您必须遍历每个AcadBlockReference,获取您想要保持不变的原点、比例、旋转、图层等,然后插入具有相同信息的新块,然后根据需要更新属性。
回复

使用道具 举报

154

主题

1274

帖子

8

银币

顶梁支柱

Rank: 50Rank: 50

铜币
1936
发表于 2008-3-20 12:15:39 | 显示全部楼层
哦,对了,所以还要加上:
  1. ' Checks if table exists and redefines (clearsout) the block of all data..
  2. Function CleanoutBlock(currentBlock As AcadBlock)
  3.     Dim blkItem As AcadEntity
  4.     [color=red]Dim blkAtt As AcadAttribute[/color]
  5.     For Each blkItem In currentBlock
  6.         blkItem.Delete
  7.     Next blkItem
  8. [color=red]    For Each blkAtt In currentBlock
  9.         blkAtt.Delete
  10.     Next blkAtt[/color]
  11. End Function

...对你的功能不起作用?
我试过了,但还是没用。我想做的就是从块中删除属性(和所有块实体),所以它是空的,然后把程序做的所有东西放回块中,所以如果用户在任何地方插入了任何块,这些块将反映用户在程序中的选择..
下面简单介绍一下该程序的功能:它从用户定义的数据中创建一个固定图表/表格(用户也可以从图纸中插入的块中选择一个固定,它会在文本框中输入所选固定的块名。有10行可以创建,每一行都通过复选框选中/取消选中。运行时,它为表格/图表的每一行添加两种类型的属性,一种是项目的参考号(一个常数)(即:FX1、FX2等),第二种是用户可以在用户表单的文本框中编辑的描述(一个标准)。当加载(userform _ Initialise)时,程序搜索表格的任何现有插入,并用该数据填充用户表单,因此用户可以编辑/添加/删除etc..当完成时,它插入块(如果新的/没有找到现有的表)或者只更新现有的..
现在有了我的代码(和Keith添加的代码),它可以工作99%,但是不会删除现有的普通属性(但是会删除常量属性(引用属性)..
我想,因为它删除了这些常量属性(该程序中的所有属性都是由块创建的。顺便说一下,AddAttribute)它也会删除正常的,但是它没有。这是因为属性的“常量”属性吗?
回复

使用道具 举报

46

主题

118

帖子

23

银币

后起之秀

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

铜币
291
发表于 2008-3-20 13:51:43 | 显示全部楼层
你不明白....
a)使用VBA编辑块时,只能编辑块表中的属性。它不影响块参照
b)如果在使用命令后使用attsync,块中不存在但附着到块参照的所有属性将从块参照中删除,块中但不在块参照中的所有属性将添加到块参照中。c) VBA没有用代码实现这一点的机制,所以你必须自己创建。d)我之前发布的代码实际上删除了块中的属性,但没有删除块引用。在VBA中没有这样做的方法
您可以执行以下操作之一:
1)运行程序后在命令行中执行at tsync
2)删除图形中Fixings_Chart的所有实例,并用新的块参照替换它们代码6]
现在要记住的重要事情是,如果您利用代码替换现有的块引用,您将需要手动填充所有属性,除非您在块中用默认值设置属性值。
回复

使用道具 举报

发表回复

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

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

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

GMT+8, 2025-7-5 02:51 , Processed in 0.740303 second(s), 60 queries .

© 2020-2025 乐筑天下

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