Unload Xref in .NET

Unload Xref in .NET

Anonymous
Not applicable
1,548 Views
3 Replies
Message 1 of 4

Unload Xref in .NET

Anonymous
Not applicable

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,
Drew

0 Likes
Accepted solutions (1)
1,549 Views
3 Replies
Replies (3)
Message 2 of 4

Anonymous
Not applicable

With a little more digging into some reference material; perhaps I should be asking whether anyone has an example of how they use XrefReloadOperation?

0 Likes
Message 3 of 4

absStructural
Enthusiast
Enthusiast
Accepted solution

Have you had a look at Database.UnloadXrefs?

Message 4 of 4

Anonymous
Not applicable

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
colObjId.Add(acBlkTblRec.ObjectId)

 

'unload the xref in the collection
acCurDb.UnloadXrefs(colObjId)

 

'document the change
acDocEd.WriteMessage(vbLf & strName & " unloaded")

 

End If

 

End If

 

Next

 

'commit the changes and dispose of the transaction
acTrans.Commit()

 

End Using

 

End Sub

0 Likes