DBText有两个属性用于确定文本位置,AlignmentPoint(对齐点)和 Position(位置)
方法 Justify(对齐方式)用于确定文本对齐方式,当 Justify 发生变化时,Position 会随之变化,AlignmentPoint 则保持不变
开发过程中,我们一般会指定文本的 AlignmentPoint 和 Justify,而不会麻烦的去计算 Position,这时候可以用 DBText.AdjustAlignment(Database) 方法来自动更新 Position,正常情况下使用没毛病,但在新建数据库里使用就不行
查资料发现这里作为参数的 Database 必须是当前活动数据库,否则该方法无效
重点来了:
DBText dbText = new DBText();
dbText.SetDatabaseDefaults(db);
Database prevWorkingDb = HostApplicationServices.WorkingDatabase;
HostApplicationServices.WorkingDatabase = db;
dbText.AdjustAlignment(db);
HostApplicationServices.WorkingDatabase = prevWorkingDb;
这里面除了切换当前活动数据库是关键外,dbText.SetDatabaseDefaults(db)也是必要的,具体原因还没来得及深究
以下是外网上找的代码:
public void TextAlign()
{
Document activeDoc = Application.DocumentManager.MdiActiveDocument;
// For adding a text with alignment to the current document
bool isInMemory = false;
Database db = activeDoc.Database;
// For adding a text to an in-memory database
//bool isInMemory = true;
//Database db = new Database(true, false);
using (Transaction tr = db.TransactionManager.StartTransaction())
{
BlockTable bt = tr.GetObject(
db.BlockTableId,
OpenMode.ForRead
) as BlockTable;
BlockTableRecord mSpace = tr.GetObject
(
bt[BlockTableRecord.ModelSpace],
OpenMode.ForWrite
) as BlockTableRecord;
DBText dbText = new DBText();
dbText.SetDatabaseDefaults(db);
dbText.Position = Point3d.Origin;
dbText.Height = 5.0;
dbText.TextString = "Autodesk";
dbText.HorizontalMode = TextHorizontalMode.TextRight;
dbText.AlignmentPoint = Point3d.Origin;
if (isInMemory)
{ // For adding a text with an alignment to an in-memory database
// set the working database before using AdjustAlignment
Database prevWorkingDb = HostApplicationServices.WorkingDatabase;
HostApplicationServices.WorkingDatabase = db;
dbText.AdjustAlignment(db);
HostApplicationServices.WorkingDatabase = prevWorkingDb;
}
else
{ // For adding a text with alignment to the current document
// working database is already set
dbText.AdjustAlignment(db);
}
mSpace.AppendEntity(dbText);
tr.AddNewlyCreatedDBObject(dbText, true);
tr.Commit();
}
if (isInMemory)
{
db.SaveAs("C:\\Temp\\Test.dwg", DwgVersion.Current);
db.Dispose();
}
}
代码来自:https://adndevblog.typepad.com/autocad/2012/06/updating-text-alignment-.html