корявенько, но получилось
public void selectDynamicBlockReferences2()
{
Editor ed = Application.DocumentManager.MdiActiveDocument.Editor;
Database db = Application.DocumentManager.MdiActiveDocument.Database;
using (Transaction trans = db.TransactionManager.StartTransaction())
{
// получаем таблицу блоков
BlockTable bt =
(BlockTable)trans.GetObject(db.BlockTableId, OpenMode.ForRead);
ObjectId btrId = ObjectId.Null;
btrId = bt["Штамп"];
// получаем запись таблицы блоков и смотри анонимная ли она
BlockTableRecord btr = (BlockTableRecord)trans.GetObject(btrId, OpenMode.ForRead);
if (btr.IsDynamicBlock)
{
// получаем все анонимные блоки динамического блока
ObjectIdCollection anonymousIds = btr.GetAnonymousBlockIds();
// получаем все прямые вставки динамического блока
ObjectIdCollection dynBlockRefs = btr.GetBlockReferenceIds(true, true);
foreach (ObjectId anonymousBtrId in anonymousIds)
{
// получаем анонимный блок
BlockTableRecord anonymousBtr = (BlockTableRecord)trans.GetObject(anonymousBtrId, OpenMode.ForRead);
// получаем все вставки этого блока
ObjectIdCollection blockRefIds = anonymousBtr.GetBlockReferenceIds(true, true);
foreach (ObjectId id in blockRefIds)
{
dynBlockRefs.Add(id);
BlockReference blkRef = (BlockReference)trans.GetObject(id, OpenMode.ForRead);
BlockTableRecord btr2 = (BlockTableRecord)trans.GetObject(blkRef.BlockTableRecord, OpenMode.ForRead);
ed.WriteMessage("\nBlock: " + btr2.Name);
btr2.Dispose();
AttributeCollection attCol = blkRef.AttributeCollection;
foreach (ObjectId attId in attCol)
{
AttributeReference attRef = (AttributeReference)trans.GetObject(attId, OpenMode.ForRead);
string str = ("\n Attribute Tag: " + attRef.Tag + "\n Attribute String: " + attRef.TextString);
ed.WriteMessage(str);
}
}
}
// Что-нибудь делаем с созданным нами набором
ed.WriteMessage("\nДинамическому блоку \"{0}\" соответствуют {1} анонимных блоков и {2} вставок блока\n",
btr.Name, anonymousIds.Count, dynBlockRefs.Count);
}
}
}
вопрос,
никак не нашел объяснения путнего между Анонимным блоком и Вхождением блока
(в целях ликвидации безграмотности, среди отдельно взятого индивидума, объясните пожалуйста)
как это понимаю я:
в чертеже, в Таблице блоков хранятся все Именованные блоки, которые создал пользователь
Когда блок вставляем на лист или модель - получаем Вхождение блока и сразу Анонимный блок (*U)
Когда блок вставили на лист 10 раз - получили 10 Вхождений и 10 Анонимных блоков (*U1, *U2, ... ,*U10)
Еще, если блок ставить несколько раз(вхождения) то данные фрагмент кода, не видит другие копии