Ширина текста в ячейке таблицы

Автор Тема: Ширина текста в ячейке таблицы  (Прочитано 6067 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн avcАвтор темы

  • ADN Club
  • *****
  • Сообщений: 822
  • Карма: 166
    • Мои плагины к Автокаду
Пытаюсь подравнять столбцы автокадовской таблицы под размер контента. Вроде бы просто: пройтись по ячейкам столбца, да назначить ширину столбца на максимальную ширину контента. Но вот засада - нигде не могу найти свойства актуальной ширины текста/блока, как у MText.ActualWidth. Даже если не брать в расчет блоки, а только текстовый контент - как получить ширину без переносов строк? но с учетом стиля ячейки, разворота текста и т.п.

Оффлайн Дмитрий Загорулькин

  • ADN
  • *
  • Сообщений: 2531
  • Карма: 737
Re: Ширина текста в ячейке таблицы
« Ответ #1 : 29-08-2017, 15:06:12 »
Я такими методами пользуюсь:
Код - C# [Выбрать]
  1. /// <summary>
  2. /// Получение длины текста в единицах чертежа для текстовой строки
  3. /// </summary>
  4. /// <param name="styleId">Стиль текста</param>
  5. /// <param name="str">Строка</param>
  6. /// <param name="height">Высота текста</param>
  7. /// <returns>Длина текста в единицах чертежа</returns>
  8. public static double AcadTextLength(string str, ObjectId styleId, double height)
  9. {
  10.     // Переменная для значения длины
  11.     double len = 0.0;
  12.  
  13.     using (DBText dbTxt = new DBText())
  14.     {
  15.         // Задаем стиль тексту
  16.         dbTxt.TextStyleId = styleId;
  17.  
  18.         // Дополнительные настройки
  19.         dbTxt.Normal = Vector3d.ZAxis;
  20.         dbTxt.Rotation = 0.0;
  21.         dbTxt.Position = Point3d.Origin;
  22.  
  23.         // Задаем строку тексту
  24.         dbTxt.TextString = str;
  25.  
  26.         // Помимо назначения стиля, нужно еще дополнительно
  27.         // назначить угол наклона букв и коэффициент ширины
  28.  
  29.         using (TextStyleTableRecord txtStyle = styleId.
  30.             SafeOpen<TextStyleTableRecord>(OpenMode.ForRead))
  31.         {
  32.             if (txtStyle != null)
  33.             {
  34.                 dbTxt.Oblique = txtStyle.ObliquingAngle;
  35.                 dbTxt.WidthFactor = txtStyle.XScale;
  36.  
  37.                 // Если тексту принудительно не задана высота
  38.                 if (txtStyle.TextSize.Equal(0.0))
  39.                 {
  40.                     // Задаем желаемую
  41.                     dbTxt.Height = height;
  42.                 }
  43.             }
  44.         }
  45.         // Вычисляем длину текста
  46.         Point3d ptMin = dbTxt.GeometricExtents.MinPoint;
  47.         Point3d ptMax = dbTxt.GeometricExtents.MaxPoint;
  48.         len = ptMax.X - ptMin.X;
  49.     }
  50.  
  51.     return len;
  52. }
  53.  
  54. /// <summary>
  55. /// Получение длины и высоты мультитекста
  56. /// </summary>
  57. /// <param name="content"></param>
  58. /// <param name="styleId"></param>
  59. /// <param name="txtHeight"></param>
  60. /// <param name="length"></param>
  61. /// <param name="height"></param>
  62. public static void GetLengthAndHeigth
  63.     (string content, ObjectId styleId, double txtHeight,
  64.     out double length, out double height)
  65. {
  66.     using (MText mText = new MText())
  67.     {
  68.         mText.TextStyleId = styleId;
  69.         mText.SetFromStyle();
  70.         mText.TextHeight = txtHeight;
  71.         mText.Contents = content;
  72.         Extents3d exts = mText.GeometricExtents;
  73.         length = exts.MaxPoint.X - exts.MinPoint.X;
  74.         height = exts.MaxPoint.Y - exts.MinPoint.Y;
  75.     }
  76. }
  77.  
  78.  

Оффлайн avcАвтор темы

  • ADN Club
  • *****
  • Сообщений: 822
  • Карма: 166
    • Мои плагины к Автокаду
Re: Ширина текста в ячейке таблицы
« Ответ #2 : 29-08-2017, 15:17:39 »
Я такими методами пользуюсь
Да, создать временный MText - первая же мысль, которая приходит в голову. Если встроенных в таблицу методов нет - то так и сделаю. Просто я думал, что упускаю из виду что-то по проще.

Оффлайн Дмитрий Загорулькин

  • ADN
  • *
  • Сообщений: 2531
  • Карма: 737
Re: Ширина текста в ячейке таблицы
« Ответ #3 : 29-08-2017, 15:30:30 »
Просто я думал, что упускаю из виду что-то по проще.
Я года 3-4 тому назад не нашёл способов проще. С тех пор пользуюсь этими. Найдёте что-то проще - делитесь :)
Ну разве что можно ещё вот этот способ глянуть: http://adndevblog.typepad.com/autocad/2012/05/actual-width-and-height-of-a-text-string.html