using (DocumentLock docLock = doc.LockDocument())
{
using (Transaction tr = db.TransactionManager.StartTransaction())
{
//Алгоритм для отбора динамических вставок блока в т.ч. и их аннонимных копий
//Алгоритм для определения координат атрибутов определения блока
ObjectIdCollection dynBlockRefsFull = new ObjectIdCollection();
// получаем таблицу блоков и проходим по всем записям таблицы блоков
BlockTable bt = (BlockTable)tr.GetObject(db.BlockTableId, OpenMode.ForRead);
foreach (ObjectId btrId in bt)
{
// получаем запись таблицы блоков и смотри анонимная ли она
BlockTableRecord btr = (BlockTableRecord)tr.GetObject(btrId, OpenMode.ForRead);
if ((btr.IsDynamicBlock) && (btr.Name.Contains("Осн. надпись") == true))
{
// получаем все анонимные блоки динамического блока
ObjectIdCollection anonymousIds = btr.GetAnonymousBlockIds();
// получаем все прямые вставки динамического блока
//foreach (ObjectId id in btr.GetBlockReferenceIds(true, true))
// {
// dynBlockRefsFull.Add(id);
// }
foreach (ObjectId anonymousBtrId in anonymousIds)
{
// получаем анонимный блок
BlockTableRecord anonymousBtr = (BlockTableRecord)tr.GetObject(anonymousBtrId, OpenMode.ForRead);
// получаем все вставки этого блока
ObjectIdCollection blockRefIds = anonymousBtr.GetBlockReferenceIds(true, true);
foreach (ObjectId id in blockRefIds)
{
dynBlockRefsFull.Add(id);
}
}
}
}