乐筑天下

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

深层克隆VB网络

[复制链接]

3

主题

23

帖子

1

银币

初来乍到

Rank: 1

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

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

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

使用道具 举报

23

主题

239

帖子

6

银币

后起之秀

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

铜币
327
发表于 2015-11-25 05:21:52 | 显示全部楼层
Purge将清除所有没有在绘图中插入至少一个块引用的块定义。您已将新定义添加到块表中,但尚未保存对
BlkRef
块引用的更改。
为了证明这一点,请检查属性面板中的块插入的块名称。
但是我不明白为什么您会想要有很多重复的块定义,您可以向块添加一个属性并使用它来按名称识别每个插入吗?
回复

使用道具 举报

3

主题

23

帖子

1

银币

初来乍到

Rank: 1

铜币
35
发表于 2015-11-25 06:16:20 | 显示全部楼层
嗨,卡德布罗克,
感谢您的快速回复。
如果块的名称是“TEST”,我需要像这样重命名每个块,所有同名的块将被重命名为“TEST0”,“TEST1”,“TEST2”等。我的代码做得很好。
我在“块插入”选项板中看到所有重命名的块。
当我尝试保存图形时,我在AutoCAD文本窗口中看到以下消息:“*警告*乘以拥有的对象,处理”193AE“”
您能告诉我如何保存对BlkRef块引用的更改吗?
可能是我的问题。
谢谢。
回复

使用道具 举报

3

主题

23

帖子

1

银币

初来乍到

Rank: 1

铜币
35
发表于 2015-11-25 06:44:34 | 显示全部楼层
有人能帮我吗?
回复

使用道具 举报

24

主题

204

帖子

6

银币

后起之秀

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

铜币
300
发表于 2015-11-25 07:37:58 | 显示全部楼层
一个街区有两个部分。
1。BlockTableRecord,它是位于数据库的BlockTable中的定义。BlockReference是您在模型空间/图纸空间中看到的实体,它引用BlockTableRecord
如果没有block reference引用回您的BlockTableRecord,则当您清除时,您的所有BlockTableRecord都将被删除。您必须更改所有现有的块引用以指向新的块表记录。
我不会将DeepClone用于此应用程序。我会创建新的BlockTableRecords并修改现有的BlockReferences。
回复

使用道具 举报

3

主题

23

帖子

1

银币

初来乍到

Rank: 1

铜币
35
发表于 2015-11-25 07:58:58 | 显示全部楼层
嗨,墨西哥库斯塔德,
感谢您的回复。
请问您有例子吗?
谢谢。
回复

使用道具 举报

3

主题

23

帖子

1

银币

初来乍到

Rank: 1

铜币
35
发表于 2015-11-25 09:58:43 | 显示全部楼层
请需要你的帮助。
谢谢。
回复

使用道具 举报

24

主题

204

帖子

6

银币

后起之秀

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

铜币
300
发表于 2015-11-25 10:12:03 | 显示全部楼层
对不起,我在想你可以爆炸并创建一个新的BlockTableRecord,但如果你保留原始块,那就行不通了。因此,深度克隆是一条出路。您只需要克隆BlockTableRecord,而不是BlockReferences
var db=Application.DocumentManager.MdiActiveDocument.Database
使用(var tr=db.TransactionManager.StartTransaction())
{
var bt=(BlockTable)tr.GetObject(db.BlockTableId,OpenMode.ForWrite)
var ms=(BlockTableRecord)tr.GetObject(bt[BlockTableRecord.ModelSpace],OpenMode.ForRead)
var testBlock=(BlockTableRecord)tr.GetObject(bt[“test”],OpenMode.ForRead)
var newBlock=(BlockTableRecord)测试块。DeepClone(bt,new IdMapping(),true)
tr.AddNewlyCreatedDBObject(newBlock,true)
var references=testBlock。GetBlockReferenceId(真、假)
foreach(references.Cast
()中的var引用)
{
var blockReference=(blockreforence)tr.GetObject(reference,OpenMode.ForWrite)
块引用。BlockTableRecord=newBlock.ObjectId
}
tr.Commit()
}
回复

使用道具 举报

3

主题

23

帖子

1

银币

初来乍到

Rank: 1

铜币
35
发表于 2015-11-25 10:25:52 | 显示全部楼层
谢谢墨西哥Custard,
我会改编它,让你知道是否好。
我认为足以开始工作。
回复

使用道具 举报

3

主题

23

帖子

1

银币

初来乍到

Rank: 1

铜币
35
发表于 2015-11-25 11:05:29 | 显示全部楼层
你好,MexicanCustard,
我在清除我的绘图时遇到了同样的问题->所有的块都消失了。
你能在你的机器上检查一下吗?
非常感谢。
回复

使用道具 举报

发表回复

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

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

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

GMT+8, 2025-4-29 22:27 , Processed in 1.608093 second(s), 73 queries .

© 2020-2025 乐筑天下

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