Правильное создание многострочного текста

Автор Тема: Правильное создание многострочного текста  (Прочитано 15796 раз)

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

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

  • ADN
  • *
  • Сообщений: 2531
  • Карма: 737

Оффлайн Александр Пекшев aka ModisАвтор темы

  • ADN Club
  • *****
  • Сообщений: 1658
  • Карма: 366
  • Отец modplus.org
    • ModPlus
Я имел в виду вот такие манипуляции: http://through-the-interface.typepad.com/through_the_interface/2007/04/making_autocad_.html
Это уже лишнее, на мой взгляд. При работе моей функции пользователь всегда может изменить масштаб аннотации (немодальное окно). Получается, что текст создается так-же как обычными средствами автокада, только уже со строковым значением

Оффлайн avc

  • ADN Club
  • *****
  • Сообщений: 822
  • Карма: 166
    • Мои плагины к Автокаду
Хоть тема старая, но другой темы про анотативные тексты на форуме нет. Поэтому хочу поставить свою точку над i. У меня работает так:
Код - C# [Выбрать]
  1.     /// <summary>
  2.     /// Создать текст с заданым стилем с учетом аннотативности
  3.     /// </summary>
  4.     /// <param name="content"></param>
  5.     /// <param name="style">может быть пустой - берем текущий</param>
  6.     /// <param name="height">может быть 0 - берем текущий из стиля или TextSize</param>
  7.     /// <param name="textFrame">сработает только в автокад 2016 и старше</param>
  8.     /// <param name="db"></param>
  9.     /// <param name="tr"></param>
  10.     /// <returns></returns>
  11.     public static MText CreateText(string content, string style, double height, bool textFrame, Database db, Transaction tr)
  12.     {
  13.       MText mt = new MText();
  14.       mt.Contents = content;
  15.       mt.SetDatabaseDefaults(db);
  16.       if (!string.IsNullOrEmpty(style))
  17.       {
  18.         TextStyleTable styles = tr.GetObject(db.TextStyleTableId, OpenMode.ForRead) as TextStyleTable;
  19.         if (styles.Has(style))
  20.           mt.TextStyleId = styles[style]; //ToDo сделать загрузку стиля из шаблона
  21.       }
  22.  
  23.       if (textFrame && mt.ExistsProp("ShowBorders")) // свойство появилось только в AutoCAD 2016, поэтому через Reflection
  24.           mt.SetProp("ShowBorders", true);
  25.      
  26.       if (height > 0)
  27.         mt.TextHeight = height;
  28.  
  29.       TextStyleTableRecord ts = tr.GetObject(mt.TextStyleId, OpenMode.ForRead) as TextStyleTableRecord;
  30.       mt.Annotative = ts.Annotative; // свойство не назначается само при назначении стиля. вызывать mt.AddContext(db.Cannoscale) не требуется - вызывается сам
  31.       if (mt.Annotative == AnnotativeStates.True)
  32.         using (AnnotationScale asc = db.Cannoscale) // Автокад без спроса масштабирует заданные размеры по Cannoscale - придется масштабировать обратно
  33.           if (asc.Scale != 1) mt.TransformBy(Matrix3d.Scaling(1 / asc.Scale, Point3d.Origin));
  34.  
  35.       .... тут назначаю слой аннотаций ....
  36.  
  37.       return mt;
  38.     }