Hi,
Try this:
public ObjectIdCollection GetBlockReferenceByName(string blkName, Database db)
{
ObjectIdCollection result = new ObjectIdCollection();
using (Transaction tr = db.TransactionManager.StartTransaction())
{
BlockTable bt = (BlockTable)tr.GetObject(db.BlockTableId, OpenMode.ForRead);
if (!bt.Has(blkName))
return null;
BlockTableRecord btr = (BlockTableRecord)tr.GetObject(bt[blkName], OpenMode.ForRead);
GetRefs(btr, ref result);
foreach (ObjectId anonId in btr.GetAnonymousBlockIds())
{
BlockTableRecord anonBtr = (BlockTableRecord)tr.GetObject(anonId, OpenMode.ForRead);
GetRefs(anonBtr, ref result);
}
}
return result;
}
private void GetRefs(BlockTableRecord btr, ref ObjectIdCollection ids)
{
foreach (ObjectId id in btr.GetBlockReferenceIds(true, false))
{
BlockReference br = (BlockReference)id.GetObject(OpenMode.ForRead);
BlockTableRecord owner = (BlockTableRecord)br.OwnerId.GetObject(OpenMode.ForRead);
if (owner.IsLayout)
ids.Add(br.Id);
}
}