public static double AcadTextLen(ObjectId styleId, string str, double height)
{
double len = 0.0;
Database db = styleId.Database;
using (Transaction tr = db.TransactionManager.StartTransaction())
using (DBText dbTxt = new DBText())
{
dbTxt.TextStyleId = styleId;
// Помимо назначения стиля, нужно еще дополнительно
// назначить угол наклона букв и коэффициент ширины
TextStyleTableRecord txtStyle = tr.GetObject(styleId, OpenMode.ForRead) as TextStyleTableRecord;
dbTxt.Oblique = txtStyle.ObliquingAngle;
dbTxt.WidthFactor = txtStyle.XScale;
// Если тексту принудительно не задана высота
if (txtStyle.TextSize.Equal(0.0))
// Задаем желаемую
dbTxt.Height = height;
// Дополнительные настройки
dbTxt.Normal = Vector3d.ZAxis;
dbTxt.Rotation = 0.0;
dbTxt.Position = Point3d.Origin;
dbTxt.TextString = str;
Point3d ptMin = dbTxt.GeometricExtents.MinPoint;
Point3d ptMax = dbTxt.GeometricExtents.MaxPoint;
len = ptMax.X - ptMin.X;
dbTxt.Erase();
tr.Commit();
}
return len;
}