Как получить LayoutManager закрытого файла dwg в ​​Autocad?

Для Autocad в .Net у меня есть папка, содержащая файлы dwg, и я хочу удалить макеты, которые есть в каждом файле, кроме «Модель» и «Макет1». Я использую этот код для открытого файла в 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);

person Community    schedule 04.09.2015    source источник


Ответы (1)


Вам нужно добавить 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();
  }
}
person Maxence    schedule 07.09.2015