public void Initialize() {
App.Document doc = cad.DocumentManager.MdiActiveDocument;
Db.Database db = doc.Database;
Ed.Editor ed = doc.Editor;
using (Db.Transaction tr = db.TransactionManager.StartTransaction()) {
Db.BlockTable bt = tr.GetObject(db.BlockTableId, Db.OpenMode.ForRead) as Db.BlockTable;
List
<String> processed
= new List
<String>(); Db.BlockTableRecord btr = tr.GetObject(bt[Db.BlockTableRecord.ModelSpace],
Db.OpenMode.ForRead) as Db.BlockTableRecord;
Int32 count = GetReferencesCount(btr, ref processed);
ed.WriteMessage("\nCommon count of block references: {0}", count);
tr.Commit();
}
}
Int32 GetReferencesCount(Db.BlockTableRecord btr, ref List<String> processed) {
App.Document doc = cad.DocumentManager.MdiActiveDocument;
Db.Database db = doc.Database;
Ed.Editor ed = doc.Editor;
Int32 result = 0;
using (Db.Transaction tr = db.TransactionManager.StartTransaction()) {
foreach (Db.ObjectId id in btr.Cast<Db.ObjectId>()
.Where(n => !n.IsErased && n.IsValid && n.ObjectClass.Name
.Equals("AcDbBlockReference", StringComparison.CurrentCulture))) {
++result;
Db.BlockReference br = tr.GetObject(id, Db.OpenMode.ForRead) as Db.BlockReference;
if (!processed.Contains(br.Name)) {
Db.BlockTableRecord btr2 = tr.GetObject(br.BlockTableRecord, Db.OpenMode.ForRead)
as Db.BlockTableRecord;
processed.Add(br.Name);
result += GetReferencesCount(btr2, ref processed);
}
}
tr.Commit();
}
return result;
}