乐筑天下

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

深层克隆VB网络

[复制链接]

116

主题

996

帖子

9

银币

顶梁支柱

Rank: 50Rank: 50

铜币
1466
发表于 2015-11-25 11:24:31 | 显示全部楼层
johnpolob,
请张贴一个示例图纸并重新陈述问题。
回复

使用道具 举报

85

主题

404

帖子

7

银币

中流砥柱

Rank: 25

铜币
751
发表于 2015-11-25 12:20:03 | 显示全部楼层
John,MC正在为您指明正确的方向。您可能正在正确地创建新的块定义但在绘图中没有插入该块,之前的插入可能是旧的块定义。我看到至少两种可能性,重新定义块定义(这应该更新该块的插入)(修改BlockTableRecord)。
添加新的块定义,并将旧的插入更新为新定义(add BlockTableRecord]修改BlockResources。
回复

使用道具 举报

3

主题

23

帖子

1

银币

初来乍到

Rank: 1

铜币
35
发表于 2015-11-25 13:10:40 | 显示全部楼层
你好,Kerry,
请参阅附件中的示例图。
我需要用数字扩展名重命名我的绘图中的一些块。
这不是问题,因为我下面的代码做得很好。
但是当我清除我的绘图时,所有重命名的块都消失了。
我不知道我是否正确使用了“DeepClone”方法。
有人能帮我解决这个问题吗?
欢迎所有建议。
提前谢谢您。
  1.         Public Sub test()
  2.             Dim zDoc As Document = Application.DocumentManager.MdiActiveDocument
  3.             Dim zDb As Database = zDoc.Database
  4.             Dim zEd As Editor = zDoc.Editor
  5.             Using mTrans As Transaction = zDb.TransactionManager.StartTransaction()
  6.                 Try
  7.                     Dim mBlkTbl As BlockTable = mTrans.GetObject(zDb.BlockTableId, OpenMode.ForWrite)
  8.                     Dim zBlkTblRec As BlockTableRecord = mTrans.GetObject(mBlkTbl("test"), OpenMode.ForWrite)
  9.                     Dim i As Integer
  10.                     For Each zBlkTableRecId As ObjectId In zBlkTblRec.GetBlockReferenceIds(True, False)
  11.                         Dim BlkRef As BlockReference = mTrans.GetObject(zBlkTableRecId, OpenMode.ForWrite)
  12.                         Dim zMap As New IdMapping
  13.                         Dim newzBlkTblRec As BlockTableRecord = zBlkTblRec.DeepClone(mBlkTbl, zMap, True)
  14.                         newzBlkTblRec.Name = zBlkTblRec.Name & i
  15.                         BlkRef.BlockTableRecord = mBlkTbl.Add(newzBlkTblRec)
  16.                         mTrans.AddNewlyCreatedDBObject(newzBlkTblRec, True)
  17.                         i = i + 1
  18.                     Next
  19.                 Catch ex As SystemException
  20.                     MsgBox(ex.Message.ToString, MsgBoxStyle.Critical, "Rename block.")
  21.                 End Try
  22.                 mTrans.Commit()
  23.             End Using
  24.         End Sub

回复

使用道具 举报

3

主题

23

帖子

1

银币

初来乍到

Rank: 1

铜币
35
发表于 2015-11-25 13:13:36 | 显示全部楼层
嗨,阿图克,
我理解,但我已经尝试过这样做,但没有成功。
你能给我举个例子吗?
谢谢。
回复

使用道具 举报

23

主题

239

帖子

6

银币

后起之秀

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

铜币
327
发表于 2015-11-25 17:00:26 | 显示全部楼层
我认为需要使用属性命名不同的块引用。对我来说,仅仅为了给同一事物起一个不同的名字而对它们有许多重复的定义是没有意义的。这与复制粘贴完全相同的代码来创建一个新的静态类是一样的(在代码中),每次您需要一个具有不同名称的完全相同的对象的新实例时
您真正的问题似乎是如何识别每个不同的块参照。使用块中的特性对其进行命名。属性是最简单的方法。确保该属性不是常量属性。
回复

使用道具 举报

发表回复

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

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

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

GMT+8, 2024-11-22 01:06 , Processed in 0.181872 second(s), 60 queries .

© 2020-2024 乐筑天下

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