Text Frame у MText

Автор Тема: Text Frame у MText  (Прочитано 3519 раз)

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

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

  • ADN Club
  • *****
  • Сообщений: 805
  • Карма: 166
    • Мои плагины к Автокаду
Text Frame у MText
« : 06-10-2018, 01:07:18 »
Скажите, как доктор доктору, у меня плохо со зрением, или у MText правда нет свойства TextFrame? В упор не вижу даже в библиотеках от Автокад 2019. Склоняюсь, что все-таки со зрением что-то, т.к. ни в одном форуме по этому поводу ни слова...

Отмечено как Решение avc 06-10-2018, 11:34:56

Оффлайн Вильдар

  • ADN Club
  • ****
  • Сообщений: 405
  • Карма: 77
  • Skype: vildar82
Re: Text Frame у MText
« Ответ #1 : 06-10-2018, 10:54:49 »
Рамка вокруг текста?
ShowBorders не оно?

Оффлайн Владимир Шу

  • ADN Club
  • *****
  • Сообщений: 611
  • Карма: 155
    • ПГСу Бложик
Re: Text Frame у MText
« Ответ #2 : 06-10-2018, 11:22:50 »
Оно и есть.  В панели свойств MText - Text Frame, в API .NET .ShowBorders

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

  • ADN Club
  • *****
  • Сообщений: 805
  • Карма: 166
    • Мои плагины к Автокаду
Re: Text Frame у MText
« Ответ #3 : 06-10-2018, 11:34:45 »
Оно! Спасибо! И ведь все свойства перечитал 3 раза, понимал, что как то по другому назвали, и все равно сам не нашел. Появилось оно только в версии 2016.

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

  • ADN Club
  • *****
  • Сообщений: 805
  • Карма: 166
    • Мои плагины к Автокаду
Re: Text Frame у MText
« Ответ #4 : 13-10-2018, 14:58:28 »
Пожалуй продолжу тему.
Как включить рамку я понял. Дальше засада еще интересней. ActualHeight и GeometricExtents игнорят рамку. Т.е. оба свойства показывают габариты текста без рамки, а рамка далеко за этими габаритами! Ок, добавлю размер рамки сам. ...А сколько добавлять-то?! Ни каких указаний ни в какой документации не вижу. Наверняка системная переменная есть управляющая отступом рамки, но я ее найти не смог. Чисто эмпирически - похоже на половину TextHeight в каждую сторону. Но всегда ли?
За неимение лучшего, написал такой велосипед на замену ActualHeight:
Код - C# [Выбрать]
  1.     /// <summary>
  2.     /// Высота текста с учетом рамки. Сработает и в старых версиях автокада, где рамок нет.
  3.     /// </summary>
  4.     public static double FrameHeight(this MText mt)
  5.     {
  6.       double height = mt.ActualHeight;
  7.       if (mt.ExistsProp("ShowBorders") && (bool)mt.GetProp("ShowBorders")) // свойство появилось только в AutoCAD 2016 и так и не появилось в прочих API
  8.         height += mt.TextHeight; // ActualHeight игнорирует рамку. вроде бы она всегда отступает на пол высоты шрифта
  9.       return height;
  10.     }
ExistsProp и GetProp это мои хелперы для обращения к свойству через Reflection т.к. не во всех автокадах есть это свойство.

Оффлайн Александр Ривилис

  • Administrator
  • *****
  • Сообщений: 13829
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: Text Frame у MText
« Ответ #5 : 13-10-2018, 20:32:30 »
https://knowledge.autodesk.com/search-result/caas/CloudHelp/cloudhelp/2018/ENU/AutoCAD-DXF/files/GUID-5E5DB93B-F8D3-4433-ADF7-E92E250D2BAB-htm.html

DXF группа 45: Fill box scale (optional):

Determines how much border there is around the text.



В первом случае с рамкой, второй без. Похоже это MText.BackgroundScaleFactor
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

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

  • ADN Club
  • *****
  • Сообщений: 805
  • Карма: 166
    • Мои плагины к Автокаду
Re: Text Frame у MText
« Ответ #6 : 14-10-2018, 00:06:59 »
Отличный ребус для суботнего вечера :) Я понял, что в недрах DXF есть параметр 45,  как то связанный с рамками. Честно говоря,  я не понял ничего из скрина командной строки. 45 со значением 1.5? Кому-то удалось это использовать это на практике ?

Оффлайн Александр Ривилис

  • Administrator
  • *****
  • Сообщений: 13829
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: Text Frame у MText
« Ответ #7 : 14-10-2018, 01:20:55 »
avc,
Думаю что вместо
Код - C# [Выбрать]
  1. height += mt.TextHeight;
должно быть
Код - C# [Выбрать]
  1. height += 2 * mt.BackgroundScaleFactor; // mt.BackgroundScaleFactor - это как раз код DXF 45
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

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

  • ADN
  • *
  • Сообщений: 2531
  • Карма: 735
Re: Text Frame у MText
« Ответ #8 : 14-10-2018, 01:33:58 »
avc,
Думаю что вместо
Код - C# [Выбрать]
  1. height += mt.TextHeight;
должно быть
Код - C# [Выбрать]
  1. height += 2 * mt.BackgroundScaleFactor; // mt.BackgroundScaleFactor - это как раз код DXF 45
Хм, а точно? Это же вроде как коэффициент, а не абсолютная величина.

Оффлайн Александр Ривилис

  • Administrator
  • *****
  • Сообщений: 13829
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: Text Frame у MText
« Ответ #9 : 14-10-2018, 02:00:57 »
Хм, а точно? Это же вроде как коэффициент, а не абсолютная величина.
Я не прав. Должно быть так (судя по документации):
Код - C# [Выбрать]
  1. height += 2 * (mt.BackgroundScaleFactor - 1.0) * mt.TextHeight;
В документации:
Цитировать
Border Offset Factor
Specifies the margin around the text for the opaque background. The value is based on the text height. A factor of 1.0 exactly fits the multiline text object. A factor of 1.5 extends the background by 0.5 times the text height.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн Александр Ривилис

  • Administrator
  • *****
  • Сообщений: 13829
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: Text Frame у MText
« Ответ #10 : 14-10-2018, 02:04:40 »
avc,
Кстати, в случае mt.BackgroundScaleFactor == 1.5 результат в точности совпадает с твоим, т.к.  2 * (mt.BackgroundScaleFactor - 1.0) * mt.TextHeight в этом случае равно mt.TextHeight.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение