Стиль текста (DBText)

Автор Тема: Стиль текста (DBText)  (Прочитано 259 раз)

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

Тема содержит сообщение с Решением. Нажмите здесь чтобы посмотреть его.

Оффлайн Алексей ТерноАвтор темы

  • ADN Club
  • ***
  • Сообщений: 181
  • Карма: 16
    • C3D Extensions
  • Skype: alexeyterno
Стиль текста (DBText)
« : 10-01-2018, 02:31:15 »
Как-то странно ведет себя только что созданный однострочный текст.
Вначале я создаю текстовый стиль, затем текст и назначаю созданный стиль. Текст создается, но отображается неправильным стилем, хотя в свойствах все корректно. Достаточно вручную сменить стиль текста и вернуть обратно старый, как текст отображается корректно:



Я разделил создание стиля и текста в разные транзакции.
Вот код:
Код - C# [Выбрать]
  1. [CommandMethod("testtext")]
  2.         public static void testtext()
  3.         {
  4.             Document doc = Application.DocumentManager.MdiActiveDocument;
  5.             Database db = doc.Database;
  6.             Editor ed = doc.Editor;
  7.  
  8.             using (DocumentLock docloc = doc.LockDocument())
  9.             {
  10.                 using (Transaction trans = doc.Database.TransactionManager.StartTransaction())
  11.                 {
  12.                     TextStyleTable tst = (TextStyleTable)trans.GetObject(doc.Database.TextStyleTableId, OpenMode.ForWrite);
  13.                     TextStyleTableRecord ts1 = new TextStyleTableRecord();
  14.  
  15.                     string name = "my_text_style";
  16.  
  17.                     if (!tst.Has(name))
  18.                     {
  19.                         try
  20.                         {
  21.                             ts1.Name = name;
  22.                             ts1.FileName = "simplex8.shx";
  23.                             ts1.Font = new Autodesk.AutoCAD.GraphicsInterface.FontDescriptor();
  24.                             ts1.ObliquingAngle = 15 * Math.PI / 180;
  25.                             ts1.PriorSize = 1.0;
  26.                             ts1.TextSize = 0.0;
  27.                             ts1.XScale = 0.8;
  28.                             tst.Add(ts1);
  29.                             trans.AddNewlyCreatedDBObject(ts1, true);
  30.                         }
  31.                         catch { }
  32.                     }
  33.                     else
  34.                     {
  35.                         ObjectId id = tst[name];
  36.                         TextStyleTableRecord t = (TextStyleTableRecord)trans.GetObject(id, OpenMode.ForRead);
  37.                     }
  38.  
  39.                     trans.Commit();
  40.                 }
  41.             }
  42.  
  43.             using (OpenCloseTransaction trans = db.TransactionManager.StartOpenCloseTransaction())
  44.             {
  45.                 BlockTable bt = (BlockTable)trans.GetObject(db.BlockTableId, OpenMode.ForRead);
  46.                 BlockTableRecord ms = (BlockTableRecord)trans.GetObject(bt[BlockTableRecord.ModelSpace], OpenMode.ForWrite);
  47.  
  48.                 Point3d pnt = ed.GetPoint("\npoint:").Value;
  49.  
  50.                 TextStyleTable tst = (TextStyleTable)trans.GetObject(db.TextStyleTableId, OpenMode.ForRead);
  51.                 TextStyleTableRecord style;
  52.  
  53.                 string name = "my_text_style";
  54.  
  55.                 foreach (ObjectId ltid in tst)
  56.                 {
  57.                     style = (TextStyleTableRecord)trans.GetObject(ltid, OpenMode.ForRead);
  58.  
  59.                     if (style.Name == name)
  60.                     {
  61.                         DBText txt = new DBText()
  62.                         {
  63.                             TextStyleId = style.Id,
  64.                             LineWeight = LineWeight.LineWeight030,
  65.                             Height = 2.5,
  66.                             TextString = "test",
  67.                             Position = pnt
  68.                         };
  69.                         ms.AppendEntity(txt);
  70.                         trans.AddNewlyCreatedDBObject(txt, true);
  71.  
  72.                         break;
  73.                     }
  74.                 }
  75.                
  76.                 trans.Commit();
  77.             }
  78.         }

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

  • ADN Club
  • *****
  • Сообщений: 839
  • Карма: 144
  • Отец modplus.org
Re: Стиль текста (DBText)
« Ответ #1 : 10-01-2018, 10:51:32 »
Попробуйте после создания текста вызвать .SetDatabaseDefaults();, а потом уже назначить стиль
ModPlus
Отвечаю в надежде получить плюсики в карму =))

Оффлайн Алексей ТерноАвтор темы

  • ADN Club
  • ***
  • Сообщений: 181
  • Карма: 16
    • C3D Extensions
  • Skype: alexeyterno
Re: Стиль текста (DBText)
« Ответ #2 : 10-01-2018, 11:19:26 »
Попробуйте после создания текста вызвать .SetDatabaseDefaults();, а потом уже назначить стиль

Не помогло. Данная процедура устанавливает только:
  • Color
  • Layer
  • Linetype
  • Linetype scale
  • Visibility
  • Plot style name
  • Line weight
Стиль текста не устанавливает.

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

  • ADN Club
  • *****
  • Сообщений: 839
  • Карма: 144
  • Отец modplus.org
Re: Стиль текста (DBText)
« Ответ #3 : 10-01-2018, 12:15:37 »
И правда - не берутся свойства из стиля некоторые. Конкретно - степень сжатия и уклон. Но вы можете просто пойти костыльным путем - устанавливать эти значения для созданного текста, взяв их из текстового стиля
ModPlus
Отвечаю в надежде получить плюсики в карму =))

Отмечено как Решение Алексей Терно 11-01-2018, 01:16:12

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

  • ADN
  • *
  • Сообщений: 1431
  • Карма: 301
  • LISP/C#, AutoCAD/Civil 3D
  • Skype: zagor_dmtr
Re: Стиль текста (DBText)
« Ответ #4 : 10-01-2018, 12:19:29 »
Но вы можете просто пойти костыльным путем - устанавливать эти значения для созданного текста, взяв их из текстового стиля
Да, так и есть. Степень сжатия текста и наклон надо принудительно задавать. Почему-то из стиля текста эти свойства не берутся.

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

  • Administrator
  • *****
  • Сообщений: 7235
  • Карма: 831
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: Стиль текста (DBText)
« Ответ #5 : 10-01-2018, 17:01:11 »
Да, так и есть. Степень сжатия текста и наклон надо принудительно задавать. Почему-то из стиля текста эти свойства не берутся.
И не должны. Фактически стилем определяется только шрифт. Остальные значения нужно брать из стиля и принудительно назначать. И так было всегда.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

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

  • ADN
  • *
  • Сообщений: 1431
  • Карма: 301
  • LISP/C#, AutoCAD/Civil 3D
  • Skype: zagor_dmtr
Re: Стиль текста (DBText)
« Ответ #6 : 10-01-2018, 17:52:51 »
Мне это кажется нелогичным. Но это лично моё мнение :)

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

  • Administrator
  • *****
  • Сообщений: 7235
  • Карма: 831
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: Стиль текста (DBText)
« Ответ #7 : 10-01-2018, 21:47:38 »
Мне это кажется нелогичным. Но это лично моё мнение :)
Не буду спорить. Эта логика была заложена приблизительно 30 лет назад и её за все эти годы не поменяли.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн Алексей ТерноАвтор темы

  • ADN Club
  • ***
  • Сообщений: 181
  • Карма: 16
    • C3D Extensions
  • Skype: alexeyterno
Re: Стиль текста (DBText)
« Ответ #8 : 11-01-2018, 01:16:04 »
Степень сжатия текста и наклон надо принудительно задавать.
А самое странное, что я уже делал это в этом же проекте неделей ранее...

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

  • Administrator
  • *****
  • Сообщений: 7235
  • Карма: 831
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: Стиль текста (DBText)
« Ответ #9 : 11-01-2018, 02:05:30 »
А самое странное, что я уже делал это в этом же проекте неделей ранее...
Это называется ранний склероз. Дмитрию, я уже об этом говорил...  ;)
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн Алексей ТерноАвтор темы

  • ADN Club
  • ***
  • Сообщений: 181
  • Карма: 16
    • C3D Extensions
  • Skype: alexeyterno
Re: Стиль текста (DBText)
« Ответ #10 : 11-01-2018, 02:33:51 »
Это называется ранний склероз.
Я надеюсь, что это обычная рассеяность  ;D