乐筑天下

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

用VBA重定义块。。

[复制链接]

154

主题

1274

帖子

8

银币

顶梁支柱

Rank: 50Rank: 50

铜币
1936
发表于 2008-3-20 10:28:51 | 显示全部楼层
属性don#039;t更新
It'更容易找到每个blockref并将其替换为;一个新的,首先匹配属性
回复

使用道具 举报

154

主题

1274

帖子

8

银币

顶梁支柱

Rank: 50Rank: 50

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

使用道具 举报

154

主题

1274

帖子

8

银币

顶梁支柱

Rank: 50Rank: 50

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

使用道具 举报

170

主题

1424

帖子

8

银币

顶梁支柱

Rank: 50Rank: 50

铜币
2119
发表于 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

..你的功劳赢了#039;t工作
我试过了,但还是一无所获。我要做的就是从块中删除属性(和所有块实体),使其为空,然后将程序在块中执行的所有操作放回原处,因此如果用户在任何地方插入了任何块,这些块将反映用户在程序中选择的内容;这是该程序的简要说明:它从用户定义的数据创建一个固定图表/表(用户还可以从图形中插入的块中选择一个固定点,并在所选固定点的文本框中输入块名。可以创建10行,每行由复选框选择/取消选择。运行时,它为表/图表的每行添加两种类型的属性,一种是项目的参考号(常数)(即:FX1、FX2等),第二个是描述(普通),用户可以在userform的文本框中编辑。加载(userform_Initialise)时,程序搜索表的任何现有插入,并用该数据填充userform,以便用户可以编辑/添加到/删除等。完成后,它插入块(如果找到新的/没有现有表)或只是更新现有的。现在,使用我的代码(和Keith的添加),它可以工作99%,但刚刚赢了;t删除现有的正常属性(但它确实删除了常量属性(参考属性)…我认为,由于它删除了这些常量属性(顺便说一句,这个程序中的所有属性都是由Block.AddAttribute创建的),它也会删除正常属性,但它不会't、 这是因为'常数#039;属性的属性
回复

使用道具 举报

154

主题

1274

帖子

8

银币

顶梁支柱

Rank: 50Rank: 50

铜币
1936
发表于 2008-3-20 13:51:43 | 显示全部楼层
您不理解…..VBA编辑块时,仅编辑块表中的属性。它不影响块引用b)如果在使用命令后使用attsync,则所有不't存在于块中,但附加到块引用的属性将从块引用中删除,并且块中但不在块引用中的所有属性将添加到块引用中
VBA没有处理代码的机制,因此,您必须创建自己的
我之前发布的代码实际上删除了块中的属性,但没有删除块引用。在VBA中没有这样做的方法,您可以执行以下操作之一:
1)运行程序后在命令行执行attsync<2)删除图形中所有出现的Fixings\u图表,并将其替换为新的块引用
  1.     Dim OldBlkRef As AcadBlockReference
  2.     Dim NewBlkRef As AcadBlockReference
  3.    
  4.     For Each OldBlkRef In ThisDrawing.ModelSpace
  5.         With OldBlkRef
  6.             If UCase(.Name) = "FIXINGS_CHART" Then
  7.                 Set NewBlkRef = ThisDrawing.ModelSpace.InsertBlock(.InsertionPoint, .Name, .XScaleFactor, .YScaleFactor, .ZScaleFactor, .Rotation)
  8.                 NewBlkRef.layer = .layer
  9.                 NewBlkRef.Color = .Color
  10.                 NewBlkRef.Linetype = .Linetype
  11.                 NewBlkRef.LinetypeScale = .LinetypeScale
  12.                 NewBlkRef.Lineweight = .Lineweight
  13.                 NewBlkRef.Normal = .Normal
  14.                 NewBlkRef.Visible = .Visible
  15.                 ' transfer all of the attribute tag values over in this area
  16.                 ' if you want to keep the existing values in the attributes
  17.                 .Delete
  18.             End If
  19.         End With
  20.     Next OldBlkRef
现在需要记住的重要一点是,如果使用代码替换现有块引用,则需要手动填充所有属性,除非在块中使用默认值设置属性值。
回复

使用道具 举报

发表回复

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

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

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

GMT+8, 2025-7-5 02:05 , Processed in 1.484285 second(s), 71 queries .

© 2020-2025 乐筑天下

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