In searching some other threads, I see this was discussed, but I can't find any reference to a solution in VB.
I was attempting to change the .IsUnloaded boolean flag on a Block Table Record (as the Developer Help does show this as read/write), but I see that as it changes the flag, even a .Commit won't actually unload the Xref.
Does anyone have some VB code as an example of how to unload an Xref programmatically? Or do I have to resort to feeding the command line some strings?
Thanks in advance,
Solved! Go to Solution.
Solved! by absStructural. See the answer in context.
Have you had a look at Database.UnloadXrefs?
I have now!! Thanks for the help as I didn't know this method existed.
A basic example of how I got it to work:
Public Sub unloadBaseXref(ByVal strName As String)
'get the active document, editor and database
Dim acDoc As Document = Application.DocumentManager.MdiActiveDocument
Dim acDocEd As Editor = acDoc.Editor
Dim acCurDb As Database = acDoc.Database
'start a transaction
Using acTrans As Transaction = acCurDb.TransactionManager.StartTransaction
'create a collection to house the xref object id
Dim colObjId As ObjectIdCollection = New ObjectIdCollection
'open the block table for read
Dim acBlkTbl As BlockTable = acTrans.GetObject(acCurDb.BlockTableId, OpenMode.ForRead)
'step through each record in the table
For Each acObjId As ObjectId In acBlkTbl
'open the block table record for read
Dim acBlkTblRec As BlockTableRecord = acTrans.GetObject(acObjId, OpenMode.ForRead)
'if the current block matches the supplied string
If acBlkTblRec.Name Like strName Then
'and if the current block is loaded
If acBlkTblRec.IsUnloaded = False Then
'add the object id to the collection
'unload the xref in the collection
'document the change
acDocEd.WriteMessage(vbLf & strName & " unloaded")
'commit the changes and dispose of the transaction