Kerry 发表于 2015-11-25 11:24:31

johnpolob,
请张贴一个示例图纸并重新陈述问题。

Atook 发表于 2015-11-25 12:20:03

John,MC正在为您指明正确的方向。您可能正在正确地创建新的块定义但在绘图中没有插入该块,之前的插入可能是旧的块定义。我看到至少两种可能性,重新定义块定义(这应该更新该块的插入)(修改BlockTableRecord)。
添加新的块定义,并将旧的插入更新为新定义(add BlockTableRecord]修改BlockResources。

johnpolob 发表于 2015-11-25 13:10:40

你好,Kerry,
请参阅附件中的示例图。
我需要用数字扩展名重命名我的绘图中的一些块。
这不是问题,因为我下面的代码做得很好。
但是当我清除我的绘图时,所有重命名的块都消失了。
我不知道我是否正确使用了“DeepClone”方法。
有人能帮我解决这个问题吗?
欢迎所有建议。
提前谢谢您。

      Public Sub test()
            Dim zDoc As Document = Application.DocumentManager.MdiActiveDocument
            Dim zDb As Database = zDoc.Database
            Dim zEd As Editor = zDoc.Editor
            Using mTrans As Transaction = zDb.TransactionManager.StartTransaction()
                Try
                  Dim mBlkTbl As BlockTable = mTrans.GetObject(zDb.BlockTableId, OpenMode.ForWrite)
                  Dim zBlkTblRec As BlockTableRecord = mTrans.GetObject(mBlkTbl("test"), OpenMode.ForWrite)
                  Dim i As Integer
                  For Each zBlkTableRecId As ObjectId In zBlkTblRec.GetBlockReferenceIds(True, False)
                        Dim BlkRef As BlockReference = mTrans.GetObject(zBlkTableRecId, OpenMode.ForWrite)
                        Dim zMap As New IdMapping
                        Dim newzBlkTblRec As BlockTableRecord = zBlkTblRec.DeepClone(mBlkTbl, zMap, True)
                        newzBlkTblRec.Name = zBlkTblRec.Name & i
                        BlkRef.BlockTableRecord = mBlkTbl.Add(newzBlkTblRec)
                        mTrans.AddNewlyCreatedDBObject(newzBlkTblRec, True)
                        i = i + 1
                  Next
                Catch ex As SystemException
                  MsgBox(ex.Message.ToString, MsgBoxStyle.Critical, "Rename block.")
                End Try
                mTrans.Commit()
            End Using
      End Sub

johnpolob 发表于 2015-11-25 13:13:36

嗨,阿图克,
我理解,但我已经尝试过这样做,但没有成功。
你能给我举个例子吗?
谢谢。

CADbloke 发表于 2015-11-25 17:00:26

我认为需要使用属性命名不同的块引用。对我来说,仅仅为了给同一事物起一个不同的名字而对它们有许多重复的定义是没有意义的。这与复制粘贴完全相同的代码来创建一个新的静态类是一样的(在代码中),每次您需要一个具有不同名称的完全相同的对象的新实例时
您真正的问题似乎是如何识别每个不同的块参照。使用块中的特性对其进行命名。属性是最简单的方法。确保该属性不是常量属性。
页: 1 [2]
查看完整版本: 深层克隆VB网络