Панель свойств захлопывает список слоев при открытии транзакции

Автор Тема: Панель свойств захлопывает список слоев при открытии транзакции  (Прочитано 15568 раз)

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

Оффлайн Александр Ривилис

  • Administrator
  • *****
  • Сообщений: 13882
  • Карма: 1787
  • Рыцарь ObjectARX
  • Skype: rivilis
Проблема в том, что при перемещении курсора по списку слоёв начинается просто спам событий модификации и последующий за ними Idle.
Проверил и в AutoCAD 2019.1.2 (до того проверял в AutoCAD 2020) - и с Property Preview включенном и выключенном - только одно событие Database.ObjectModified показывает MGDDBG.
P.S.: Из спортивного интереса отключи аппаратное ускорение видео. Возможно это как-то связано с ним.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

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

  • ADN Club
  • *****
  • Сообщений: 822
  • Карма: 166
    • Мои плагины к Автокаду
Именно так. MGDDBG умеет отфильтровывать эти события! Надо научиться делать также

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

  • ADN Club
  • *****
  • Сообщений: 822
  • Карма: 166
    • Мои плагины к Автокаду
То есть ObjectModified точно происходит и мой обработчик вызывается. Я вижу это в окне вывода VS - специально пишу туда через Debug.Print, потому что в командную строку может неизвестно когда вывестись сообщение. А вот MGDDBG в командную строку ничего не пишет, как будто событий не происходит.

И у меня в коде ни один объект не открывается на запись. Только чтение. Я даже блокировки документа не делаю.

Оффлайн Дмитрий Загорулькин

  • ADN
  • *
  • Сообщений: 2531
  • Карма: 737
А вот MGDDBG в командную строку ничего не пишет, как будто событий не происходит.
Я думаю просто потому, что в этот момент невозможен вывод в комстроку. Я посмотрел исходники MGDDBG, там просто вывод данных в комстроку при наступлении события, никаких фильтров-проверок и т.п.

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

  • ADN Club
  • *****
  • Сообщений: 822
  • Карма: 166
    • Мои плагины к Автокаду
Из спортивного интереса отключи аппаратное ускорение видео. Возможно это как-то связано с ним.
Проверил. Разницы нет

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

  • ADN Club
  • *****
  • Сообщений: 822
  • Карма: 166
    • Мои плагины к Автокаду
никаких фильтров-проверок и т.п.
А я так надеялся...

Оффлайн Дмитрий Загорулькин

  • ADN
  • *
  • Сообщений: 2531
  • Карма: 737
А я так надеялся...
Ну как минимум, это значит, что если сделать метод модификации в виде команды и вызывать её через Document.SendStringToExecute с правильными аргументами, то должно будет отрабатывать нормально.

Оффлайн Александр Ривилис

  • Administrator
  • *****
  • Сообщений: 13882
  • Карма: 1787
  • Рыцарь ObjectARX
  • Skype: rivilis
Дмитрий Загорулькин,
Мне тоже кажется, что это оптимальный вариант. Команде добавит флаг NoHistory, чтобы она не была видна в стеке команд.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

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

  • ADN Club
  • *****
  • Сообщений: 822
  • Карма: 166
    • Мои плагины к Автокаду
Метода модификации у меня и нет, только считывание. Но попробую прямо в обработчиках событий вызывать свою команду.
Цитировать
вызывать её через Document.SendStringToExecute с правильными аргументами
С правильными - это с какими? эхо отключить? true, true, false - годится?

Оффлайн Александр Ривилис

  • Administrator
  • *****
  • Сообщений: 13882
  • Карма: 1787
  • Рыцарь ObjectARX
  • Skype: rivilis
Метода модификации у меня и нет, только считывание.
Тогда попробуй без транзакции или с эмуляцией транзакции.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн Александр Ривилис

  • Administrator
  • *****
  • Сообщений: 13882
  • Карма: 1787
  • Рыцарь ObjectARX
  • Skype: rivilis
С правильными - это с какими? эхо отключить? true, true, false - годится?
Я бы запускал в данном случае со всеми false. И еще команда должна быть с флагами NoHistory (как я писал выше) | Redraw | UsePickSet
Последние два флага чтобы не сбрасывался набор предварительного выбора.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

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

  • ADN Club
  • *****
  • Сообщений: 822
  • Карма: 166
    • Мои плагины к Автокаду
Честно говоря боюсь. Не работал никогда без транзакций. И надо две недели переписывать все исходники - везде транзакции. Проще для начала попробовать вызывать SendStringToExecute

Оффлайн Александр Ривилис

  • Administrator
  • *****
  • Сообщений: 13882
  • Карма: 1787
  • Рыцарь ObjectARX
  • Skype: rivilis
avc,
Попробуй пока только в Database_ObjectModified заменить StartTransaction на StartOpenCloseTransaction, а всё остальное оставить как было.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

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

  • ADN Club
  • *****
  • Сообщений: 822
  • Карма: 166
    • Мои плагины к Автокаду
И еще команда должна быть с флагами NoHistory (как я писал выше) | Redraw | UsePickSet
UsePickSet само собой, понимаю. А флаг Redraw, судя по названию, вызовет перерисовку всего чертежа? Это же на долго. Стараюсь его не писать никогда, если и так все работает.

Оффлайн Александр Ривилис

  • Administrator
  • *****
  • Сообщений: 13882
  • Карма: 1787
  • Рыцарь ObjectARX
  • Skype: rivilis
А флаг Redraw, судя по названию, вызовет перерисовку всего чертежа?
Нет конечно:



Я конечно понимаю, что читать документацию это "последнее дело"... :)
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение