Тема: Изменение имени динамического блока c *U###

метод BlockTableRecord.Name некоторых блоков возвращает значение равное *U###. Как я понял это значение Anonymous Name. Подскажите пожалуйста как изменить это значение на значение Block Name этих блоков?

(изменено: Boxa Shu, 6 мая 2014г. 19:39:28)

Re: Изменение имени динамического блока c *U###

Тут посмотри: http://adn-cis.org/forum/index.php?topi … 07#msg2607

                //Получаю выбранный блок
                Db.BlockReference acBlock  = acTrans.GetObject(EntRes.ObjectId, Db.OpenMode.ForRead) as Db.BlockReference;
                //Получаю определение блока в таблице блоков
                Db.BlockTableRecord acBlkTblRec = acTrans.GetObject(acBlock.BlockTableRecord, Db.OpenMode.ForRead) as Db.BlockTableRecord;
                // Получаю определение блока в таблице динамических блоков
                // Запоминаю истинное имя блока
                acBlockName = acBlock.Name;
                if (acBlock.IsDynamicBlock)
                {
                    acBlkTblRec = acTrans.GetObject(acBlock.DynamicBlockTableRecord, Db.OpenMode.ForRead) as Db.BlockTableRecord;
                    Db.BlockTableRecord blr_nam = acTrans.GetObject(acBlkTblRec.ObjectId, Db.OpenMode.ForRead) as Db.BlockTableRecord;
                    acBlockName = blr_nam.Name;
                }

(изменено: Антон Калинченко, 7 мая 2014г. 14:38:14)

Re: Изменение имени динамического блока c *U###

Спасибо за подсказку. Но мне нужно было вернуть значение имени из списка вставленных блоков - "INSERT" из которых нет динамических (IsDynamicBlock = false). Я в итоге нашел метод блока .DynamicBlockTableRecord, который возвращает id его динамической копии из таблицы блоков модели. И присвоил ему имя этой копии.

using(Transaction tr=doc.TransactionManager.StartTransaction())
{
    List<BlockReference> br=new List<BlockReference>();
    string str=null;
    PromptSelectionResult psr = ed.GetSelection();
    if(psr.Status== PromptStatus.OK)
    {
        foreach(ObjectId obj in psr.Value.GetObjectIds())
        {
            if(obj.ObjectClass.DxfName=="INSERT")
            {
                BlockReference blref = (BlockReference)tr.GetObject(obj,OpenMode.ForRead);
                br.Add(blref);
            }
        }
        BlockTable bt = (BlockTable)tr.GetObject(doc.Database.BlockTableId,OpenMode.ForRead);
        foreach(ObjectId obj in bt)
        {
            BlockTableRecord btr = (BlockTableRecord)tr.GetObject(obj,OpenMode.ForRead);
            if(br.Exists(delegate(BlockReference b){return b.DynamicBlockTableRecord==btr.ObjectId;}))
            {
                str+="\n" + btr.Name + ":  " + 
                br.Count(delegate(BlockReference b){return b.DynamicBlockTableRecord==btr.ObjectId;});
            }
        }
        MessageBox.Show(str);
    }
    tr.Commit();
}