Здравствуйте. Я пытаюсь написать небольшое приложение-плагин для AutoCAD 2012, которое позволит редактировать графические примитивы на чертеже. Графический интерфейс на WPF.
Я сделал Class Library в который добавил UserControl WPF, на него разместил кнопку, по нажатию на которую должна вызываться тестовая команда команда, которая позволяет сменить цвет для выбранных объектов на чертеже:
[CommandMethod("SelectObjectsOnscreen")]
public static void SelectObjectsOnscreen()
{
acDoc = Application.DocumentManager.MdiActiveDocument;
acCurDB = acDoc.Database;
using (acTrans = acCurDB.TransactionManager.StartTransaction())
{
PromptSelectionResult acSSPromt = acDoc.Editor.GetSelection();
if (acSSPromt.Status == PromptStatus.OK)
{
SelectionSet acSSet = acSSPromt.Value;
foreach (SelectedObject acSObj in acSSet)
{
if ( acSObj != null )
{
MessageBox.Show(acSObj.ObjectId.ToString());
acEnt = acTrans.GetObject(acSObj.ObjectId, OpenMode.ForWrite) as Entity;
if (acEnt != null)
{
acEnt.ColorIndex = 3;
}
}
}
acTrans.Commit();
}
}
}
Если для вызова команды я использую CommandMethod, т.е. вызываю команду "SelectObjectsOnscreen" из командной строки AutoCAD, все работает замечательно:
1. Вызов команды
2. Выбор объектов
3 Enter -> Смена цвета
Однако если я пытаюсь вызвать данную команду по нажатию кнопки, приложение валится со следующей ошибкой:
---------------------------
Аварийное завершение AutoCAD
---------------------------
ФАТАЛЬНАЯ ОШИБКА: Unhandled e0434352h Exception at de4d606ch
---------------------------
ОК
---------------------------
При дебаге локализовал место ошибки: acEnt = acTrans.GetObject(acSObj.ObjectId, OpenMode.ForWrite) as Entity
ругается из-за метода ForWrite (пробовал брать объект для чтения ForRead, ошибок не возникало), есть предположение, что документ каким-либо образом может быть защищен от записи.
Соответственно возникли два вопроса:
1. Почему при вызове команды из командной строки метод отработал верно SelectObjectsOnscreen(), а при вызове его из кнопки выдал ошибку?
2. Как решить проблему?
Прошу Вас поделиться опытом, буду очень признателен за помощь.