Valued Contributor
Posts: 75
Registered: ‎08-10-2007
Message 1 of 4 (332 Views)
Accepted Solution

Unload Xref in .NET

332 Views, 3 Replies
12-13-2012 08:48 AM

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,

Valued Contributor
Posts: 75
Registered: ‎08-10-2007
Message 2 of 4 (320 Views)

Re: Unload Xref in .NET

12-13-2012 11:24 AM in reply to: architectOfIdeas

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

Active Contributor
Posts: 34
Registered: ‎07-15-2010
Message 3 of 4 (279 Views)

Re: Unload Xref in .NET

12-17-2012 05:31 AM in reply to: architectOfIdeas

Have you had a look at Database.UnloadXrefs?

Valued Contributor
Posts: 75
Registered: ‎08-10-2007
Message 4 of 4 (272 Views)

Re: Unload Xref in .NET

12-17-2012 10:48 AM in reply to: absStructural

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")


End If


End If




'commit the changes and dispose of the transaction


End Using


End Sub

You are not logged in.

Log into access your profile, ask and answer questions, share ideas and more. Haven't signed up yet? Register

Are you familiar with the Autodesk Expert Elites? The Expert Elite program is made up of customers that help other customers by sharing knowledge and exemplifying an engaging style of collaboration. To learn more, please visit our Expert Elite website.

Need installation help?

Start with some of our most frequented solutions to get help installing your software.

Ask the Community