乐筑天下

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

用VBA重新定义块..

[复制链接]

46

主题

118

帖子

23

银币

后起之秀

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

铜币
291
发表于 2008-3-19 12:04:49 | 显示全部楼层 |阅读模式
嗨,
有一个程序,可以创建一个块,添加一个attiributes表,然后插入它,现在所有的工作都会到位(感谢所有以前帮助过我的人)...
...但是,如果在绘图中已经存在相同类型的块参照,我想用用户输入的新信息重新定义它,而不是添加到其中,这似乎做了什么......
在程序中,当用户表单加载时,它会检查块是否存在,并用其属性值填充用户表单,这工作正常,这允许用户编辑块中的信息,而不是每次都重新开始,但是当用户完成程序并插入块时,它是现有和新信息的聚合。
有什么想法吗?

本帖以下内容被隐藏保护;需要你回复后,才能看到!

游客,如果您要查看本帖隐藏内容请回复
回复

使用道具 举报

154

主题

1274

帖子

8

银币

顶梁支柱

Rank: 50Rank: 50

铜币
1936
发表于 2008-3-19 14:15:05 | 显示全部楼层
如果图形中已经有一个块参照,则可以执行一些不同的操作...
a) 重命名旧的块引用
b) 以编程方式删除旧定义中的所有对象
c) 删除现有引用并清除图形
3,
b
认为是最理想的
回复

使用道具 举报

16

主题

168

帖子

39

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
197
发表于 2008-3-19 14:18:07 | 显示全部楼层
现在没有时间测试它,但是
如果 blkref.name = “x”,那么对于thisdwg.mspace中的每个blkref尝试一个
,如果


下一个blkref,则blkref.update结束
回复

使用道具 举报

154

主题

1274

帖子

8

银币

顶梁支柱

Rank: 50Rank: 50

铜币
1936
发表于 2008-3-19 15:28:31 | 显示全部楼层
用户只是简单地更改属性信息还是图形本身正在更改?
为什么要重新定义块定义?
回复

使用道具 举报

46

主题

118

帖子

23

银币

后起之秀

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

铜币
291
发表于 2008-3-19 16:17:40 | 显示全部楼层
在将您的数据添加到块
  1. Function CleanoutBlock(currentBlock As AcadBlock)
  2.     Dim blkItem As AcadEntity
  3.     For Each blkItem In currentBlock
  4.         blkItem.Delete
  5.     Next blkItem
  6. End Function

之前尝试此函数
回复

使用道具 举报

154

主题

1274

帖子

8

银币

顶梁支柱

Rank: 50Rank: 50

铜币
1936
发表于 2008-3-20 05:58:32 | 显示全部楼层
嗨,
到目前为止,我已经在我的程序中尝试过这个....
(SSetX 是在加载 UserForm 时创建的选择集,用于检查现有块。
  1. 'Redefine current block info if chart exists..
  2. Dim BlK As AcadBlockReference
  3. Dim EntX As AcadEntity
  4. If SSetX.Count > 0 Then
  5.     For Each BlK In SSetX
  6.         If BlK.Name = "Fixings_Chart" Then
  7.             For Each EntX In BlK
  8.                 EntX.Delete
  9.             Next EntX
  10.         End If
  11.     Next BlK
  12. End If

......它标记了一个错误,说对象不支持此方法,这显然是引用BlockRef,如果我想访问其中的实体,应该是Block而不是BlockRef....那么我该何去何从?
我也喜欢基思的函数:
  1. Function CleanoutBlock(currentBlock As AcadBlock)
  2.     Dim blkItem As AcadEntity
  3.     For Each blkItem In currentBlock
  4.         blkItem.Delete
  5.     Next blkItem
  6. End Function

.....但是如何在添加新数据之前从代码中调用函数?
回复

使用道具 举报

46

主题

118

帖子

23

银币

后起之秀

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

铜币
291
发表于 2008-3-20 08:31:12 | 显示全部楼层
我不知道你的确切情况,但你的代码有一些潜在的问题,也许我们可以解决。
使用您提供的代码,您显然是在选择图形中的所有块,然后遍历所有块。如果要编辑块引用,则必须编辑块定义。如果编辑块定义,它将自动反映在所有块参照中,从而消除了循环访问绘图中所有块参照的需要。使用您提供的代码,如果它有效,它将为该块插入到图形中的每个实例一遍又一遍地重新定义相同的块。这是没有必要的,也是对同一程序的不必要重复。
前面你说过你有将项目放入块中的代码,但你没有代码从块中删除项目。我提供的代码从您作为参数传递给函数的块中删除所有项目。但是你必须通过AcadBlock而不是AcadBlockReference。
下载我在上一个线程中发布的模块并将其导入到您的项目中(在项目资源管理器中右键单击并单击导入文件),然后将此代码添加到表单加载事件
  1. Dim Blk As AcadBlock
  2. If acBlock.BlockExists("Fixings_Chart").Exists = True Then
  3.   Set Blk = ThisDrawing.Blocks.Item("Fixings_Chart")
  4.   CleanoutBlock Blk '<-- call the CleanoutBlock function here
  5. End If
  6. 'Add code here to put the new entities in the block
  7. 'Blk.Addxxx functions to add the entities as needed

将此代码作为新函数添加到表单
  1. Function CleanoutBlock(currentBlock As AcadBlock)
  2.     Dim blkItem As AcadEntity
  3.     For Each blkItem In currentBlock
  4.         blkItem.Delete
  5.     Next blkItem
  6. End Function

您可以提供更多的代码,我们可以为您提供有关您出错的地方的指示。
回复

使用道具 举报

154

主题

1274

帖子

8

银币

顶梁支柱

Rank: 50Rank: 50

铜币
1936
发表于 2008-3-20 09:06:55 | 显示全部楼层
谢谢基思,你抽出时间(以及其他人)。
我已经完全按照你说的做了,它插入的新实例看起来正是它应该的样子,而不是旧元素和新元素的混合.....唯一的问题是所有现有的块插入都没有改变,并且在再次运行程序之前看起来仍然像它们一样。
回复

使用道具 举报

46

主题

118

帖子

23

银币

后起之秀

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

铜币
291
发表于 2008-3-20 09:11:49 | 显示全部楼层

那么你还有别的事情要做...这些可能被编辑并保存为动态块吗?如果是这样,它们可能无法正确更新...或者你应该重新生成所有视图
回复

使用道具 举报

170

主题

1424

帖子

8

银币

顶梁支柱

Rank: 50Rank: 50

铜币
2119
发表于 2008-3-20 09:41:19 | 显示全部楼层
啊,如果我再生,那么块的图形性质会更新,但属性不会更新,如果用户从列表中删除了属性的数量,那么这些属性仍然保留在块中,因此表具有正确的行数,但不是正确的属性数(有些溢出超过表的范围)。
我会发布我的完整代码,但它超出了每个帖子的字符限制。也许,无论如何,它会有所帮助,将代码发布在不同帖子的部分中。
回复

使用道具 举报

发表回复

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

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

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

GMT+8, 2025-7-5 02:48 , Processed in 1.051773 second(s), 72 queries .

© 2020-2025 乐筑天下

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