Сообщество программистов Autodesk в СНГ

ADN Club => AutoCAD .NET API => Тема начата: Алексей Терно от 10-01-2018, 01:31:15

Название: Стиль текста (DBText)
Отправлено: Алексей Терно от 10-01-2018, 01: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.         }
Название: Re: Стиль текста (DBText)
Отправлено: Александр Пекшев aka Modis от 10-01-2018, 09:51:32
Попробуйте после создания текста вызвать .SetDatabaseDefaults();, а потом уже назначить стиль
Название: Re: Стиль текста (DBText)
Отправлено: Алексей Терно от 10-01-2018, 10:19:26
Попробуйте после создания текста вызвать .SetDatabaseDefaults();, а потом уже назначить стиль

Не помогло. Данная процедура устанавливает только:
Стиль текста не устанавливает.
Название: Re: Стиль текста (DBText)
Отправлено: Александр Пекшев aka Modis от 10-01-2018, 11:15:37
И правда - не берутся свойства из стиля некоторые. Конкретно - степень сжатия и уклон. Но вы можете просто пойти костыльным путем - устанавливать эти значения для созданного текста, взяв их из текстового стиля
Название: Re: Стиль текста (DBText)
Отправлено: Дмитрий Загорулькин от 10-01-2018, 11:19:29
Но вы можете просто пойти костыльным путем - устанавливать эти значения для созданного текста, взяв их из текстового стиля
Да, так и есть. Степень сжатия текста и наклон надо принудительно задавать. Почему-то из стиля текста эти свойства не берутся.
Название: Re: Стиль текста (DBText)
Отправлено: Александр Ривилис от 10-01-2018, 16:01:11
Да, так и есть. Степень сжатия текста и наклон надо принудительно задавать. Почему-то из стиля текста эти свойства не берутся.
И не должны. Фактически стилем определяется только шрифт. Остальные значения нужно брать из стиля и принудительно назначать. И так было всегда.
Название: Re: Стиль текста (DBText)
Отправлено: Дмитрий Загорулькин от 10-01-2018, 16:52:51
Мне это кажется нелогичным. Но это лично моё мнение :)
Название: Re: Стиль текста (DBText)
Отправлено: Александр Ривилис от 10-01-2018, 20:47:38
Мне это кажется нелогичным. Но это лично моё мнение :)
Не буду спорить. Эта логика была заложена приблизительно 30 лет назад и её за все эти годы не поменяли.
Название: Re: Стиль текста (DBText)
Отправлено: Алексей Терно от 11-01-2018, 00:16:04
Степень сжатия текста и наклон надо принудительно задавать.
А самое странное, что я уже делал это в этом же проекте неделей ранее...
Название: Re: Стиль текста (DBText)
Отправлено: Александр Ривилис от 11-01-2018, 01:05:30
А самое странное, что я уже делал это в этом же проекте неделей ранее...
Это называется ранний склероз. Дмитрию, я уже об этом говорил...  ;)
Название: Re: Стиль текста (DBText)
Отправлено: Алексей Терно от 11-01-2018, 01:33:51
Это называется ранний склероз.
Я надеюсь, что это обычная рассеяность  ;D