Hi All,
I need to rename some blocks in my drawing. That's the reason why I wrote the code below on VB.net for renaming several block at a time .
But when I launch my command in AutoCad 2011 I have this message "eDuplicateRecordName".
Could someone help to fix this issue.
All suggestions are welcome.
Thank you in advance.
<CommandMethod("RENBLK")>
Public Sub RenameBlockInModelSpace()
Dim zDoc As Document = Application.DocumentManager.MdiActiveDocument
Dim zDb As Database = zDoc.Database
Dim zEd As Editor = zDoc.Editor
Dim i As Integer = 0
'Début de l'opération
Using zTrans As Transaction = zDb.TransactionManager.StartTransaction()
'Ouverture de la TABLE des blocs en écriture
Dim zBlkTbl As BlockTable = zTrans.GetObject(zDb.BlockTableId, OpenMode.ForWrite)
'Ouverture des enregistrements de la TABLE des blocs en lecture
Dim zBlkTblRec As BlockTableRecord = zTrans.GetObject(zBlkTbl(BlockTableRecord.ModelSpace), OpenMode.ForWrite)
Dim zBlkCl As RXClass = RXClass.GetClass(GetType(BlockReference))
Dim zBlkRefCol As ObjectIdCollection = zBlkTblRec.GetBlockReferenceIds(True, False)
For Each zBlkTblRecId As ObjectId In zBlkTblRec 'zBlkTblRec.GetBlockReferenceIds(True, False) 'zBlkRefCol
Try
If zBlkTblRecId.ObjectClass = zBlkCl Then
Dim zBlkRef As BlockReference = TryCast(zTrans.GetObject(zBlkTblRecId, OpenMode.ForWrite, False), BlockReference)
zEd.WriteMessage(String.Format(vbLf + "Block : {0} -- Id : {1} -- Layer : {2}", zBlkRef.Name, zBlkTblRecId, zBlkRef.Layer))
i = i + 1
If zBlkRef.Name = "BAT-10" Then
Dim MYmap As New IdMapping
Dim newzBlkTblRec As BlockTableRecord = zBlkTblRec.DeepClone(zBlkTbl, MYmap, True)
'MsgBox(zBlkRef.Name)
newzBlkTblRec.Name = "VUU-10"
zBlkRef.BlockTableRecord = zBlkTbl.Add(newzBlkTblRec)
zTrans.AddNewlyCreatedDBObject(newzBlkTblRec, True)
End If
End If
Catch ex As SystemException
End Try
Next
zEd.WriteMessage(String.Format(vbLf + "Total des blocs : {0} ", i))
zTrans.Commit()
End Using
End Sub