Привет форумчанам.
Обыскал весь интернет, изнасиловал CatGPT (или он меня...) но так и не пойму в чем проблема и как решить.
Я хочу написать команду которая при запуске должна открывать определенный файл dwg (некий шаблон), выполнять в нем некоторые действия и предлагать пользователю сохранить его под новым именем. При этом запуск команды осуществляется из некого другого открытого документа.
Мой код открывает нужный файл-шаблон, но дальне при попытке что-то сделать выскакивает ошибка "Autodesk.AutoCAD.Runtime.Exception:
eLockViolation". Я так понимаю, что только что открытый файл не становится текущим, и как это исправить я не разберусь.
Код моего скрипта:
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()
{
}
}
}