public static void ChangeAttr(Document doc, string blockName, string oldValue, string NewValue)
{
System.Threading.Thread.CurrentThread.CurrentCulture = CultureInfo.GetCultureInfo("ru");
Database sourceDb = doc.Database;
Editor ed = doc.Editor;
using (Transaction t = sourceDb.TransactionManager.StartTransaction())
{
// открываем таблицу блоков
BlockTable blockTable = t.GetObject(sourceDb.BlockTableId, OpenMode.ForWrite) as BlockTable;
foreach (ObjectId asObjId in blockTable)
{
BlockTableRecord ent = t.GetObject(asObjId, OpenMode.ForRead) as BlockTableRecord;
if (ent != null)
{
if (ent.Name != blockName)
continue;
ed.WriteMessage("\n Block Name" + ent.Name);
ed.WriteMessage("\n");
// теперь попробуем разобрать его атрибуты
foreach (ObjectId it in ent)
{
if (it.ObjectClass.Name == "AcDbAttributeDefinition")
{
AttributeDefinition attdef = t.GetObject(it, OpenMode.ForWrite) as AttributeDefinition;
if (attdef == null || attdef.Constant)
continue;
if (attdef.TextString == oldValue)
{
attdef.TextString = NewValue;
attdef.Prompt = NewValue;
}
}
}
ent.UpdateAnonymousBlocks();
ent.AttSync(false, true, true);
if (ent.IsDynamicBlock)
{
foreach (ObjectId id in ent.GetAnonymousBlockIds())
{
BlockTableRecord _ent = (BlockTableRecord)t.GetObject(id, OpenMode.ForWrite);
//
foreach (ObjectId it in _ent)
{
if (it.ObjectClass.Name == "AcDbAttributeDefinition")
{
AttributeDefinition attdef = t.GetObject(it, OpenMode.ForWrite) as AttributeDefinition;
if (attdef == null || attdef.Constant)
continue;
if (attdef.TextString == oldValue)
{
attdef.TextString = NewValue;
attdef.Prompt = NewValue;
}
}
}
_ent.UpdateAnonymousBlocks();
_ent.AttSync(false, true, true);
}
}
}
}
t.Commit();
}
}