AutoCAD C # Release .dwl файл - PullRequest
       6

AutoCAD C # Release .dwl файл

0 голосов
/ 28 сентября 2018

Здравствуйте, Мастера AutoCAD C #, здесь у меня есть этот код, который открывает чертеж, меняет некоторые слои и закрывает, но после того, как это сделано и чертеж закрывается, в файле есть файл с именем DocName.dwl та же папка, что и dwg, которую я не могу удалить, не закрывая autocad.

Есть ли место, где я могу снять блокировку, а я не делаю?

    [CommandMethod("Test", CommandFlags.UsePickSet | CommandFlags.Redraw | CommandFlags.Session | CommandFlags.Modal)]
    public void Test()
    {
        var DocList = AskUserToSelectDocs();
        foreach (string FileName in DocList.Files)
        {
            Application.DocumentManager.Open(FileName, false);
            Document zcDoc = Application.DocumentManager.MdiActiveDocument;
            Database zcDB = zcDoc.Database;

            using (DocumentLock acLckDoc = zcDoc.LockDocument())
            {
                using (Transaction ZcTran = zcDoc.TransactionManager.StartTransaction())
                {
                    BlockTable zcBLT = (BlockTable)ZcTran.GetObject(zcDB.BlockTableId, OpenMode.ForWrite);
                    BlockTableRecord zcBLTR = (BlockTableRecord)ZcTran.GetObject(zcBLT[BlockTableRecord.ModelSpace], OpenMode.ForWrite);

                    zcBLTR.UpgradeOpen();
                    var editor = zcDoc.Editor;

                    var SelectionSet = editor.SelectAll().Value;

                    foreach (ObjectId Objeto in SelectionSet.GetObjectIds())
                    {
                        Entity ent = ZcTran.GetObject(Objeto, OpenMode.ForWrite) as Entity;
                        if (ent is Viewport)
                        {
                            var VP = ent as Viewport;
                            VP.Layer = "Defpoints";
                        }
                    }

                    editor.Regen();

                    ZcTran.Commit();
                }

            }

            zcDB.SaveAs(zcDB.Filename, zcDB.OriginalFileVersion);
            zcDoc.CloseAndSave(zcDoc.Name);
            zcDoc.Dispose();
        }
    }

РЕДАКТИРОВАТЬ: Теперь полный код

Спасибо!

1 Ответ

0 голосов
/ 28 сентября 2018

Для чего-то подобного нет необходимости открывать документ.Я бы предложил просто загрузить базу данных в память, манипулировать ею и затем сохранять.Все это будет за пределами DocumentManager.Отлично подходит для производительности, особенно с увеличением количества обрабатываемых файлов

Неважно, какой документ открыт в данный момент, если только он не обрабатывается (вы можете проверить это).

Попробуйте это:

public static void Test()
{
    var DocList = AskUserToSelectDocs();
    //save working db reference
    Database originalDB = HostApplicationServices.WorkingDatabase;
    foreach (string FileName in DocList.Files)
    {
        //a little trick here:
        //construct the database in memory, and read in the target file.
        //now your database is your working database, not the active doc!!
        using (Database database = new Database(false, true))
        {
            database.ReadDwgFile(FileName, System.IO.FileShare.ReadWrite, true, string.Empty);
            HostApplicationServices.WorkingDatabase = database;//important!
            using (Transaction transaction = database.TransactionManager.StartTransaction())
            {
                //do your stuff
            }
            //reset WorkingDB to original db
            HostApplicationServices.WorkingDatabase = originalDB;
            database.SaveAs(FileName, DwgVersion.Current);
        }
    }
}
...