Purging

Purging

Anonymous
Not applicable
965 Views
2 Replies
Message 1 of 3

Purging

Anonymous
Not applicable
Need a bit of help with purging materials from a drawing. I have managed to purge all items within a named object table like layers and blocks but those in the Named Object dictionary table are confusing me a little.

Do I need to itterate through the named objects dictionarys to get the AEC_MATERIAL_DEFS dictionary then purge the contents from there?

Thanks for any help.
Daniel
0 Likes
966 Views
2 Replies
Replies (2)
Message 2 of 3

_gile
Consultant
Consultant
Hi,

This will purge all non referenced materials

{code}ObjectIdCollection ids = new ObjectIdCollection();
using (Transaction tr = db.TransactionManager.StartTransaction())
{
DBDictionary matDict = (DBDictionary)tr.GetObject(db.MaterialDictionaryId, OpenMode.ForRead, false);
foreach (DBDictionaryEntry entry in matDict)
{
string key = entry.Key;
if ((key != "ByBlock") && (key != "ByLayer") && (key != "Global"))
ids.Add(entry.Value);
}
db.Purge(ids);
foreach (ObjectId id in ids)
{
DBObject obj = (DBObject)tr.GetObject(id, OpenMode.ForWrite);
obj.Erase();
}
tr.Commit();
}{code} Edited by: _gile on Jan 19, 2010 1:28 PM


Gilles Chanteau
Programmation AutoCAD LISP/.NET
GileCAD
GitHub

Message 3 of 3

Anonymous
Not applicable
I see, you can directly access the materialdictionaryID - I thought it would need itterating through each named dictionary to find the materials dictionary.

Thanks Gile.
0 Likes