Retrieve all the fields from the AutoCAD object

By Virupaksha Aithal

AutoCAD Objects like (Mtext/Text) can contain more than 1 field.  To access these field objects you need to use “Field” API “GetChildren”. Below code shows the procedure to use “GetChildren” API. To get the field object, API “GetField” (without any parameter) is used.

[CommandMethod("GetAllFields")]
public void GetAllFields()
{
    Document doc = Application.DocumentManager.MdiActiveDocument;
    Database db = doc.Database;
    Editor ed = doc.Editor;
 
    PromptEntityOptions options =
            new PromptEntityOptions("nSelect a Mtext object");
    options.SetRejectMessage("nSelect Mtext object");
    options.AddAllowedClass(typeof(MText), false);
 
    PromptEntityResult acSSPrompt = ed.GetEntity(options);
 
    if (acSSPrompt.Status != PromptStatus.OK)
        return;
 
    using (Transaction Tx = db.TransactionManager.StartTransaction())
    {
        //get the mtext
        MText mtext = Tx.GetObject(acSSPrompt.ObjectId,
                                   OpenMode.ForRead) as MText;
 
        if (!mtext.HasFields)
        {
            ed.WriteMessage("nObject does not contain fields.");
            return;
        }
 
        ObjectId id = mtext.GetField();
        Field field = Tx.GetObject(id, OpenMode.ForRead) as Field;
 
        Field[] fields = field.GetChildren();
 
        foreach (Field childField in fields)
        {
            string fldCode = childField.GetFieldCode(
                FieldCodeFlags.AddMarkers| FieldCodeFlags.FieldCode);
            ed.WriteMessage("nField code: " + fldCode);
        }
 
        Tx.Commit();
    }
}

Comments

Leave a Reply

Discover more from Autodesk Developer Blog

Subscribe now to keep reading and get access to the full archive.

Continue reading