Наблюдение первое:
Если создать объект DBText, настроить его, но
не добавлять в какое-либо пространство и транзакцию, текст все равно создастся в текущем пространстве. Чтобы этого не происходило, нужно обязательно вызывать метод Erase для него.
Наблюдение второе:
При задании стиля для этого текста, свойства угла наклона текста и коэффициента ширины почему-то не берутся из стиля, их нужно дополнительно "вручную" задавать.
Код для проверки можно сделать на основе этого метода:
public static double AcadTextLen(ObjectId styleId, string str, double height)
{
double len = 0.0;
Database db = styleId.Database;
using (Transaction tr = db.TransactionManager.StartTransaction())
using (DBText dbTxt = new DBText())
{
dbTxt.TextStyleId = styleId;
// Помимо назначения стиля, нужно еще дополнительно
// назначить угол наклона букв и коэффициент ширины
TextStyleTableRecord txtStyle = tr.GetObject(styleId, OpenMode.ForRead) as TextStyleTableRecord;
dbTxt.Oblique = txtStyle.ObliquingAngle;
dbTxt.WidthFactor = txtStyle.XScale;
// Если тексту принудительно не задана высота
if (txtStyle.TextSize.Equal(0.0))
// Задаем желаемую
dbTxt.Height = height;
// Дополнительные настройки
dbTxt.Normal = Vector3d.ZAxis;
dbTxt.Rotation = 0.0;
dbTxt.Position = Point3d.Origin;
dbTxt.TextString = str;
Point3d ptMin = dbTxt.GeometricExtents.MinPoint;
Point3d ptMax = dbTxt.GeometricExtents.MaxPoint;
len = ptMax.X - ptMin.X;
dbTxt.Erase();
tr.Commit();
}
return len;
}
Или это так работает только в 2014 версии?