Сообщество программистов Autodesk в СНГ

ADN Club => AutoCAD .NET API => Тема начата: Даниил от 03-02-2015, 11:16:14

Название: Unhandled exception при попытке вызова команды по нажатии на кнопку
Отправлено: Даниил от 03-02-2015, 11:16:14
Здравствуйте. Я пытаюсь написать небольшое приложение-плагин для AutoCAD 2012, которое позволит редактировать графические примитивы на чертеже. Графический интерфейс на WPF.

Я сделал Class Library в который добавил UserControl WPF, на него разместил кнопку, по нажатию на которую должна вызываться тестовая команда команда, которая позволяет сменить цвет для выбранных объектов на чертеже:

Код - C# [Выбрать]
  1. [CommandMethod("SelectObjectsOnscreen")]
  2.         public static void SelectObjectsOnscreen()
  3.         {
  4.             acDoc = Application.DocumentManager.MdiActiveDocument;
  5.             acCurDB = acDoc.Database;
  6.  
  7.             using (acTrans = acCurDB.TransactionManager.StartTransaction())
  8.             {
  9.                 PromptSelectionResult acSSPromt = acDoc.Editor.GetSelection();
  10.  
  11.                 if (acSSPromt.Status == PromptStatus.OK)
  12.                 {
  13.                     SelectionSet acSSet = acSSPromt.Value;
  14.  
  15.                     foreach (SelectedObject acSObj in acSSet)
  16.                     {
  17.                         if ( acSObj != null )
  18.                         {
  19.                             MessageBox.Show(acSObj.ObjectId.ToString());
  20.                             acEnt = acTrans.GetObject(acSObj.ObjectId, OpenMode.ForWrite) as Entity;
  21.  
  22.                             if (acEnt != null)
  23.                             {
  24.                                 acEnt.ColorIndex = 3;
  25.                             }
  26.                            
  27.                         }
  28.                     }
  29.  
  30.                     acTrans.Commit();
  31.                 }
  32.             }
  33.         }
  34.  

Если для вызова команды я использую 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. Как решить проблему?

Прошу Вас поделиться опытом, буду очень признателен за помощь.
Название: Re: Unhandled exception при попытке вызова команды по нажатии на кнопку
Отправлено: German от 03-02-2015, 11:33:36
https://sites.google.com/site/bushmansnetlaboratory/translate-manual/upravlenie-sredoj-autocad/blokirovka-i-razblokirovka-dokumenta?
Название: Re: Unhandled exception при попытке вызова команды по нажатии на кнопку
Отправлено: bargool от 03-02-2015, 11:34:42
Сразу вопрос: UserControl запускается в модальном режиме? Если нет (или на палитре находится), то необходимо блокировать документ перед работой с ним.
А. Уже ответили
Название: Re: Unhandled exception при попытке вызова команды по нажатии на кнопку
Отправлено: Даниил от 03-02-2015, 11:46:27
Действительно, блокировка текущего документа решила все проблемы. Благодарю Вас за помощь)
Название: Re: Unhandled exception при попытке вызова команды по нажатии на кнопку
Отправлено: Александр Ривилис от 03-02-2015, 12:50:20
Даниил
Пользуйся пожалуйста кнопкой "Решение" для отметки правильного ответа.