如何在 Autocad 中获取关闭的 dwg 文件的 LayoutManager?
How to get the LayoutManager of a closed dwg file in Autocad?
对于 .Net 中的 Autocad,我有一个包含 dwg 文件的文件夹,我想删除除 "Model" 和 "Layout1" 之外的每个文件中的布局。我将此代码用于在 Autocad 中打开的文件:
public void RemoveLayout(Transaction transaction, Database database, ObjectId layoutId)
{
if (!layoutId.IsErased)
{
Layout layout = transaction.GetObject(layoutId, OpenMode.ForRead) as Layout;
LayoutManager.Current.DeleteLayout(layout.LayoutName);
}
}
但是,当我尝试打开文件夹中的文档并将文档设置为活动时:
Document doc = Application.DocumentManager.Open(file, false);
Application.DocumentManager.MdiActiveDocument = doc;
LayoutManager.current
仍然指向我的第一个文档,所以我无法使用下面的代码删除想要的布局:
LayoutManager.Current.DeleteLayout(layout.LayoutName);
您需要将 Session
添加到您的命令标志中。并且文档需要明确锁定:
[CommandMethod("YOURCOMMAND", CommandFlags.Session)]
public void YourCommand()
{
[..]
Document doc = Application.DocumentManager.Open(file);
// No need here to set MdiActiveDocument, it's done by the Open method.
using (doc.LockDocument())
using (Transaction tr = doc.TransactionManager.StartTransaction())
{
LayoutManager.Current.DeleteLayout("Your layout name");
tr.Commit();
}
}
对于 .Net 中的 Autocad,我有一个包含 dwg 文件的文件夹,我想删除除 "Model" 和 "Layout1" 之外的每个文件中的布局。我将此代码用于在 Autocad 中打开的文件:
public void RemoveLayout(Transaction transaction, Database database, ObjectId layoutId)
{
if (!layoutId.IsErased)
{
Layout layout = transaction.GetObject(layoutId, OpenMode.ForRead) as Layout;
LayoutManager.Current.DeleteLayout(layout.LayoutName);
}
}
但是,当我尝试打开文件夹中的文档并将文档设置为活动时:
Document doc = Application.DocumentManager.Open(file, false);
Application.DocumentManager.MdiActiveDocument = doc;
LayoutManager.current
仍然指向我的第一个文档,所以我无法使用下面的代码删除想要的布局:
LayoutManager.Current.DeleteLayout(layout.LayoutName);
您需要将 Session
添加到您的命令标志中。并且文档需要明确锁定:
[CommandMethod("YOURCOMMAND", CommandFlags.Session)]
public void YourCommand()
{
[..]
Document doc = Application.DocumentManager.Open(file);
// No need here to set MdiActiveDocument, it's done by the Open method.
using (doc.LockDocument())
using (Transaction tr = doc.TransactionManager.StartTransaction())
{
LayoutManager.Current.DeleteLayout("Your layout name");
tr.Commit();
}
}