Как-то странно ведет себя только что созданный однострочный текст.
Вначале я создаю текстовый стиль, затем текст и назначаю созданный стиль. Текст создается, но отображается неправильным стилем, хотя в свойствах все корректно. Достаточно вручную сменить стиль текста и вернуть обратно старый, как текст отображается корректно:
Я разделил создание стиля и текста в разные транзакции.
Вот код:
[CommandMethod("testtext")]
public static void testtext()
{
Document doc = Application.DocumentManager.MdiActiveDocument;
Database db = doc.Database;
Editor ed = doc.Editor;
using (DocumentLock docloc = doc.LockDocument())
{
using (Transaction trans = doc.Database.TransactionManager.StartTransaction())
{
TextStyleTable tst = (TextStyleTable)trans.GetObject(doc.Database.TextStyleTableId, OpenMode.ForWrite);
TextStyleTableRecord ts1 = new TextStyleTableRecord();
string name = "my_text_style";
if (!tst.Has(name))
{
try
{
ts1.Name = name;
ts1.FileName = "simplex8.shx";
ts1.Font = new Autodesk.AutoCAD.GraphicsInterface.FontDescriptor();
ts1.ObliquingAngle = 15 * Math.PI / 180;
ts1.PriorSize = 1.0;
ts1.TextSize = 0.0;
ts1.XScale = 0.8;
tst.Add(ts1);
trans.AddNewlyCreatedDBObject(ts1, true);
}
catch { }
}
else
{
ObjectId id = tst[name];
TextStyleTableRecord t = (TextStyleTableRecord)trans.GetObject(id, OpenMode.ForRead);
}
trans.Commit();
}
}
using (OpenCloseTransaction trans = db.TransactionManager.StartOpenCloseTransaction())
{
BlockTable bt = (BlockTable)trans.GetObject(db.BlockTableId, OpenMode.ForRead);
BlockTableRecord ms = (BlockTableRecord)trans.GetObject(bt[BlockTableRecord.ModelSpace], OpenMode.ForWrite);
Point3d pnt = ed.GetPoint("\npoint:").Value;
TextStyleTable tst = (TextStyleTable)trans.GetObject(db.TextStyleTableId, OpenMode.ForRead);
TextStyleTableRecord style;
string name = "my_text_style";
foreach (ObjectId ltid in tst)
{
style = (TextStyleTableRecord)trans.GetObject(ltid, OpenMode.ForRead);
if (style.Name == name)
{
DBText txt = new DBText()
{
TextStyleId = style.Id,
LineWeight = LineWeight.LineWeight030,
Height = 2.5,
TextString = "test",
Position = pnt
};
ms.AppendEntity(txt);
trans.AddNewlyCreatedDBObject(txt, true);
break;
}
}
trans.Commit();
}
}