/// <summary>
/// Получение длины текста в единицах чертежа для текстовой строки
/// </summary>
/// <param name="styleId">Стиль текста</param>
/// <param name="str">Строка</param>
/// <param name="height">Высота текста</param>
/// <returns>Длина текста в единицах чертежа</returns>
public static double AcadTextLength(string str, ObjectId styleId, double height)
{
// Переменная для значения длины
double len = 0.0;
using (DBText dbTxt = new DBText())
{
// Задаем стиль тексту
dbTxt.TextStyleId = styleId;
// Дополнительные настройки
dbTxt.Normal = Vector3d.ZAxis;
dbTxt.Rotation = 0.0;
dbTxt.Position = Point3d.Origin;
// Задаем строку тексту
dbTxt.TextString = str;
// Помимо назначения стиля, нужно еще дополнительно
// назначить угол наклона букв и коэффициент ширины
using (TextStyleTableRecord txtStyle = styleId.
SafeOpen<TextStyleTableRecord>(OpenMode.ForRead))
{
if (txtStyle != null)
{
dbTxt.Oblique = txtStyle.ObliquingAngle;
dbTxt.WidthFactor = txtStyle.XScale;
// Если тексту принудительно не задана высота
if (txtStyle.TextSize.Equal(0.0))
{
// Задаем желаемую
dbTxt.Height = height;
}
}
}
// Вычисляем длину текста
Point3d ptMin = dbTxt.GeometricExtents.MinPoint;
Point3d ptMax = dbTxt.GeometricExtents.MaxPoint;
len = ptMax.X - ptMin.X;
}
return len;
}
/// <summary>
/// Получение длины и высоты мультитекста
/// </summary>
/// <param name="content"></param>
/// <param name="styleId"></param>
/// <param name="txtHeight"></param>
/// <param name="length"></param>
/// <param name="height"></param>
public static void GetLengthAndHeigth
(string content, ObjectId styleId, double txtHeight,
out double length, out double height)
{
using (MText mText = new MText())
{
mText.TextStyleId = styleId;
mText.SetFromStyle();
mText.TextHeight = txtHeight;
mText.Contents = content;
Extents3d exts = mText.GeometricExtents;
length = exts.MaxPoint.X - exts.MinPoint.X;
height = exts.MaxPoint.Y - exts.MinPoint.Y;
}
}