[CommandMethod("AttributeField")]
public void WriteToAttributeField()
{
var doc =
Autodesk.AutoCAD.ApplicationServices.Core.Application.DocumentManager.MdiActiveDocument;
var ed = doc.Editor;
var db = doc.Database;
string blockName = "Опора 2";
TypedValue[] filList = new TypedValue[2]
{
new TypedValue((int)DxfCode.Start, "INSERT"),
new TypedValue((int)DxfCode.BlockName, blockName)
};
SelectionFilter filter = new SelectionFilter(filList);
var idArray = ed.SelectAll(filter).Value.GetObjectIds();
using (Transaction trx = db.TransactionManager.StartTransaction())
{
foreach (var blockId in idArray)
{
BlockReference bref = trx.GetObject(blockId, OpenMode.ForWrite) as BlockReference;
BlockTableRecord btr = (BlockTableRecord)trx.GetObject(bref.BlockTableRecord, OpenMode.ForWrite);
foreach (ObjectId id in btr)
{
DBObject obj = id.GetObject(OpenMode.ForWrite);
//AttributeDefinition attDef = obj as AttributeDefinition;
if (id.ObjectClass.DxfName == "CIRCLE")
{
var str = blockId.ToString();
char[] circleStr = { '(', ')' };
str.Trim(circleStr);
AttributeCollection attCol = bref.AttributeCollection;
foreach (ObjectId attId in attCol)
{
using (AttributeReference attRef = (AttributeReference)trx.GetObject(attId, OpenMode.ForWrite))
{
ed.WriteMessage("\n Attribute Tag: " + attRef.Tag + "\n Attribute String: " + attRef.TextString);
if (attRef.Tag == "X")
{
attRef.UpgradeOpen();
//attRef.SetAttributeFromBlock(, blockRef.BlockTransform);
attRef.TextString =
$"X = %<\\AcObjProp.16.2 Object(%<\\_ObjId {str}>%,1).Center \\f \"%lu6%pt1\">%";
ed.WriteMessage($"в {attRef.Tag} c id {attRef.Id} записано X = %<\\AcObjProp.16.2 Object(%<\\_ObjId {str}>%,1).Center \\f \"%lu6%pt1\">%");
}
else if (attRef.Tag == "Y")
{
attRef.UpgradeOpen();
//attRef.SetAttributeFromBlock(attDef, blockRef.BlockTransform);
attRef.TextString =
$"Y = %<\\AcObjProp.16.2 Object(%<\\_ObjId {str}>%,1).Center \\f \"%lu6%pt2\">%";
ed.WriteMessage($"в {attRef.Tag} c id {attRef.Id} записано Y = %<\\AcObjProp.16.2 Object(%<\\_ObjId {str}>%,1).Center \\f \"%lu6%pt2\">%");
}
//bref.AttributeCollection.AppendAttribute(attRef);
//trx.AddNewlyCreatedDBObject(attRef, true);
}
}
ed.WriteMessage($"circle id {str}\n");
}
}
}
trx.Commit();
}
}