Active Contributor
Posts: 42
Registered: ‎11-06-2012
Message 1 of 3 (527 Views)
Accepted Solution

Adjust attribute text width

527 Views, 2 Replies
06-25-2013 12:32 AM

Hi All,


Is there any way to adjust width of attribute text so that it is not out of contained block. The attribute is set at left alignment and width factor <=1. Please see picture below:




Thanks so much.

*Expert Elite*
Posts: 966
Registered: ‎04-27-2009
Message 2 of 3 (496 Views)

Re: Adjust attribute text width

06-25-2013 02:24 PM in reply to: xdbk07

You need to find out the attribte text's width, and then you need to find out the allowed/desired width. Once you get these 2 widths, you can calculate the WidthFactor of AttributeReference.


I put together some quick code that does it:


using System;
using Autodesk.AutoCAD.ApplicationServices;
using Autodesk.AutoCAD.DatabaseServices;
using Autodesk.AutoCAD.EditorInput;
using Autodesk.AutoCAD.Geometry;
using Autodesk.AutoCAD.Runtime;

[assembly: CommandClass(typeof(AttributeWidthFactor.MyCommands))]

namespace AttributeWidthFactor
    public class MyCommands
        public static void SetAttrWidthFactor()
            Document dwg = Application.DocumentManager.MdiActiveDocument;
            Editor ed = dwg.Editor;

            //Pick an attributereference in a block
            PromptNestedEntityOptions opt = new 
                PromptNestedEntityOptions("\nPick an attribute:");
            PromptNestedEntityResult res = ed.GetNestedEntity(opt);

            if (res.Status == PromptStatus.OK)
                if (res.ObjectId.ObjectClass.DxfName.ToUpper() == "ATTRIB")
                    //Ask user to pick a distance as desired width for 
                    //the attribute to fit in. Based on the block, the width 
                    //could be a known value
                    PromptPointOptions popt = new 
                        PromptPointOptions("\nPick width base point:");
                    PromptPointResult pres = ed.GetPoint(popt);
                    if (pres.Status != PromptStatus.OK) return;
                    Point3d basePt = pres.Value;

                    PromptDistanceOptions dopt = 
                        new PromptDistanceOptions("\nPick width: ");
                    dopt.UseBasePoint = true;
                    dopt.BasePoint = basePt;

                    PromptDoubleResult dres = ed.GetDistance(dopt);
                    if (dres.Status != PromptStatus.OK) return;

                    //This is the width we want to fit the attribute text's width
                    double w = dres.Value;

                    using (Transaction tran = 
                        AttributeReference att = (AttributeReference)tran.GetObject(
                            res.ObjectId, OpenMode.ForWrite);

                        //Get attribute's width, assuming it is placed horizontally
                        double aw = Math.Abs(att.GeometricExtents.MaxPoint.X 
                            - att.GeometricExtents.MinPoint.X);

                        //This is the WidthFactor
                        double factor = w / aw;
                        att.WidthFactor = factor;

                    Application.ShowAlertDialog("Not an attribute!");

 The code will stretch or narrow the attribute to fit it into a given width.



Active Contributor
Posts: 42
Registered: ‎11-06-2012
Message 3 of 3 (462 Views)

Re: Adjust attribute text width

06-26-2013 06:08 PM in reply to: xdbk07

Thanks a lot. It's OK.

You are not logged in.

Log into access your profile, ask and answer questions, share ideas and more. Haven't signed up yet? Register

Are you familiar with the Autodesk Expert Elites? The Expert Elite program is made up of customers that help other customers by sharing knowledge and exemplifying an engaging style of collaboration. To learn more, please visit our Expert Elite website.

Need installation help?

Start with some of our most frequented solutions to get help installing your software.

Ask the Community