Обновление чертежа после внесения изменений извне

Автор Тема: Обновление чертежа после внесения изменений извне  (Прочитано 4401 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн ДаниилАвтор темы

  • ADN Club
  • Сообщений: 31
  • Карма: 2
Здравствуйте. В процессе написания плагин для AutoCAD столкнулся с небольшой проблемой.
Плагин позволяет изменять свойства графических примитивов и слоев,  а также подсвечивать на чертеже объект, выбранный в диалоговом окне приложения-плагина. Проблема такова:

1. Выбираю элемент в treeView WPF-диалога
1. Задаю новые значения для примитивов в открытом WPF диалоге.
2. Нажимаю кнопку изменить объект

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

Привожу для примера метод, который позволяет мне выделить на чертеже элемент, который я выбрал в treeView в WPF-диалоге (проблема такая же, пока не сменю фокус на чертеж, объект не подсвечивается)

Код - C# [Выбрать]
  1. public static void HighlightObject(string id)
  2.         {
  3.             doc = Application.DocumentManager.MdiActiveDocument;
  4.             db = doc.Database;
  5.             using (doc.LockDocument())
  6.  
  7.             {
  8.                 using (trans = db.TransactionManager.StartOpenCloseTransaction())
  9.                 {
  10.                     PromptSelectionResult getSel = doc.Editor.SelectAll();
  11.  
  12.                     if (getSel.Status == PromptStatus.OK)
  13.                     {
  14.                         SelectionSet selSet = getSel.Value;
  15.  
  16.                         foreach (SelectedObject selObj in selSet)
  17.                         {
  18.                             var entity = trans.GetObject(selObj.ObjectId, OpenMode.ForWrite) as Entity;
  19.  
  20.                             if (entity != null && entity.Id.ToString() == id)
  21.                             {
  22.                                 entity.Highlight();
  23.                             }
  24.                             else
  25.                             {
  26.                                 if (entity != null) entity.Unhighlight();
  27.                             }
  28.                         }
  29.                     }
  30.                     trans.Commit();
  31.                 }
  32.             }
  33.         }

В процессе поиска решения проблемы искал много документации, но, к сожалению, по данной проблеме ничего не нашел. Думаю, что лучший документацией в этом случае будет опыт. Буду благодарен за Вашу помощь.

Отмечено как Решение Даниил 14-02-2015, 12:47:29

Оффлайн Дима_

  • ADN Club
  • ****
  • Сообщений: 473
  • Карма: 66
После trans.Commit() добавь doc.Editor.UpdateScreen()

Оффлайн ДаниилАвтор темы

  • ADN Club
  • Сообщений: 31
  • Карма: 2
Помогло, спасибо Вам)