Active Member
Posts: 8
Registered: ‎08-15-2007
Message 1 of 2 (251 Views)

Block Attribute Text Color

251 Views, 1 Replies
10-31-2012 04:48 AM

Good Day,


I am looking to go through a whole drawing and change the text color of any block attribute to say 0 as the drawings I am recieving have all the text at a weird color. I was unable to find anything on the forum. I already have a routine that changes text of certain blocks based on layer, but I want this to change the color. Any help would be great! Below is code I used for the layer change I talked about earlier.


publicstaticvoid strFind(string sFind, stringsReplace)


string str = "";


Document document = Application.DocumentManager.MdiActiveDocument;


Editoreditor = document.Editor;


Transactiontransaction = document.Database.TransactionManager.StartTransaction();




TypedValue[] valueArray = newTypedValue[] { newTypedValue(0, "TEXT") };


SelectionFilter filter = newSelectionFilter(valueArray);


PromptSelectionResultresult = editor.SelectAll(filter);


ObjectIdCollection ids = newObjectIdCollection(result.Value.GetObjectIds());


foreach (ObjectId id inids)


DBText text = (DBText) transaction.GetObject(id, OpenMode.ForWrite);




str =

Regex.Replace(text.TextString, sFind, sReplace);


text.TextString = str;








Posts: 224
Registered: ‎09-15-2011
Message 2 of 2 (217 Views)

Re: Block Attribute Text Color

11-03-2012 08:36 PM in reply to: GreenMan415



The following code will change all attribute colors to color index 0 (ByBlock color) of all found block references in the current drawing. If you use a SelectionFilter for the editor to get the selection set based on DxfCodes of TypedValues, you should use DxfCode = INSERT for block references.


public static void ChangeBlockAttributeColors()
    Document document = Application.DocumentManager.MdiActiveDocument;
    const int replaceColorIndex = 0; // change color to ByBlock
    ChangeBlockAttributeColors(document, replaceColorIndex);

/// <summary>
/// Change all colors of attributes of all block references to a given color index
/// </summary>
/// <param name="document">Document to change</param>
/// <param name="replaceColorIndex">Color ByBlock: colorIndex = 0, Color ByLayer: colorIndex = 256</param>
public static void ChangeBlockAttributeColors(Document document, int replaceColorIndex = 256)
    using (Transaction trans = document.Database.TransactionManager.StartTransaction())
        Editor editor = document.Editor;
            var valueArray = new TypedValue[]
                    new TypedValue(0, "INSERT")    // Filter block references
            var filter = new SelectionFilter(valueArray);
            PromptSelectionResult result = editor.SelectAll(filter);
            if (result.Value == null)
            var ids = new ObjectIdCollection(result.Value.GetObjectIds());
            foreach (ObjectId id in ids)
                var blockRef = trans.GetObject(id, OpenMode.ForRead) as BlockReference;
                if (blockRef == null)
                AttributeCollection attributes = blockRef.AttributeCollection;
                foreach (ObjectId attributeId in attributes)
                    var attribute = (AttributeReference)trans.GetObject(attributeId, OpenMode.ForRead);
                    if (attribute.ColorIndex != replaceColorIndex)
                        attribute.ColorIndex = replaceColorIndex;
        catch (Runtime.Exception ex)
            editor.WriteMessage(ex.Message + "\n" + ex.StackTrace);





Post to the Community

Have questions about Autodesk products? Ask the community.

New Post
Are You Going To Be @ AU 2014? Feel free to drop by our AU topic post and share your plans, plug a class that you're teaching, or simply check out who else from the community might be in attendance. Ohh and don't forgot to stop by the Autodesk Help | Learn | Collaborate booths in the Exhibit Hall and meet our community team if you get a chance!