81
AutoCAD .NET API / Ошибка при открытии файла
« Последний ответ от Derie1 23-04-2025, 15:31:45 »Привет форумчанам.
Обыскал весь интернет, изнасиловал CatGPT (или он меня...) но так и не пойму в чем проблема и как решить.
Я хочу написать команду которая при запуске должна открывать определенный файл dwg (некий шаблон), выполнять в нем некоторые действия и предлагать пользователю сохранить его под новым именем. При этом запуск команды осуществляется из некого другого открытого документа.
Мой код открывает нужный файл-шаблон, но дальне при попытке что-то сделать выскакивает ошибка "Autodesk.AutoCAD.Runtime.Exception: eLockViolation". Я так понимаю, что только что открытый файл не становится текущим, и как это исправить я не разберусь.
Код моего скрипта:
Обыскал весь интернет, изнасиловал CatGPT (или он меня...) но так и не пойму в чем проблема и как решить.
Я хочу написать команду которая при запуске должна открывать определенный файл dwg (некий шаблон), выполнять в нем некоторые действия и предлагать пользователю сохранить его под новым именем. При этом запуск команды осуществляется из некого другого открытого документа.
Мой код открывает нужный файл-шаблон, но дальне при попытке что-то сделать выскакивает ошибка "Autodesk.AutoCAD.Runtime.Exception: eLockViolation". Я так понимаю, что только что открытый файл не становится текущим, и как это исправить я не разберусь.
Код моего скрипта:
Код - C [Выбрать]
- namespace SLDBuilder_2
- {
- public class RunSLDbuilder : IExtensionApplication
- {
- [CommandMethod("sldbuilder")]
- public void RunSLD()
- {
- Document currentDoc = Application.DocumentManager.MdiActiveDocument;
- Database currentDataBase = currentDoc.Database;
- Editor currentEditor = currentDoc.Editor;
- currentEditor.WriteMessage("\nSLD Builder started...");
- string dwgFilePath = @"C:\Users\11177\Documents\SLDBuilder_2\_test\SLD_template_EN.dwg";
- string dwgFileName = Path.GetFileName(dwgFilePath);
- Document dwgDoc = Application.DocumentManager.Open(dwgFilePath, false);
- Application.DocumentManager.MdiActiveDocument = dwgDoc; // Эту строчку советует добавить Copilot, но это ничего не меняет.
- Database newDatabase = dwgDoc.Database;
- Editor newEditor = dwgDoc.Editor;
- using (Transaction tr = newDatabase.TransactionManager.StartTransaction())
- {
- BlockTable blockTable = (BlockTable)tr.GetObject(newDatabase.BlockTableId, OpenMode.ForRead);
- BlockTableRecord modelSpace = (BlockTableRecord)tr.GetObject(blockTable[BlockTableRecord.ModelSpace], OpenMode.ForWrite);
- Line line = new Line();
- line.StartPoint = new Point3d(-100, -100, 0);
- line.EndPoint = new Point3d(100, 100, 0);
- line.ColorIndex = 7;
- ObjectId objectIdLine = modelSpace.AppendEntity(line);
- tr.AddNewlyCreatedDBObject(line, true);
- tr.Commit();
- }
- }
- public void Initialize()
- {
- Editor editor = Application.DocumentManager.MdiActiveDocument.Editor;
- editor.WriteMessage("\nSLD Builder loaded...");
- }
- public void Terminate()
- {
- }
- }
- }