Проблемы с "быстрым выбором" при добавлении свойств в окно свойств AutoCAD

Автор Тема: Проблемы с "быстрым выбором" при добавлении свойств в окно свойств AutoCAD  (Прочитано 8807 раз)

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

Тема содержит сообщение с Решением. Нажмите здесь чтобы посмотреть его.

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

  • ADN Club
  • Сообщений: 44
  • Карма: 3
На днях прислали баг: обнаружилось ,что имеются проблемы с работой команды "Быстрый выбор". Выяснилось, что проблемы возникают при добавлении кастомных свойств в окно свойcтв AutoCAD. Проблема точно проявляется, если в файле есть размеры. Суть в том, что выбираются либо просто все объекты в чертеже, либо вообще ничего, не смотря на то, что задан правильный фильтр.
Посмотрел другие разработки, например GeomProps Александра Ривилиса (там также используется окно свойств акада) - проблема также есть.
Может кто-то сталкивался с подобной проблемой и знает, как её решить или обойти?


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

  • Administrator
  • *****
  • Сообщений: 13829
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
Посмотрел другие разработки, например GeomProps Александра Ривилиса (там также используется окно свойств акада) - проблема также есть.
А если перед запуском QSELECT выполнить GeomPropsStop? У меня в этом случае окно QSELECT становится обычным (нормальным). Если это сработает, то дальше разовью идею.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

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

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

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

  • ADN Club
  • Сообщений: 44
  • Карма: 3
А если перед запуском QSELECT выполнить GeomPropsStop? У меня в этом случае окно QSELECT становится обычным (нормальным). Если это сработает, то дальше разовью идею.
Это (даже не знал, что есть такая команда) работает! А что Вы делаете на stop? Я так понимаю на commandWillStart можно сделать stop, а на commandEnded и commandCancelled сделать start?

Отмечено как Решение VetalBY 29-01-2018, 20:35:13

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

  • Administrator
  • *****
  • Сообщений: 13829
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
Я так понимаю на commandWillStart можно сделать stop, а на commandEnded и commandCancelled сделать start?
Именно так.
А что Вы делаете на stop?
Я делаю элементарную вещь - взвожу глобальный флажок, который проверяется в различных методах. Но подозреваю, что достаточно проверять только в методе ::Connect как-то так:
Код - C++ [Выбрать]
  1. STDMETHODIMP CCAreaProps::Connect (IDynamicPropertyNotify2 *pSink) {
  2.         if ( pSink == NULL   || !GeomPropsWorking) // GeomPropsWorking - это как раз наш глобальный флажок
  3.                 return (E_POINTER) ;
  4.         m_pNotify =pSink ;
  5.         m_pNotify->AddRef () ;
  6.         _variant_t l_sel;  
  7.         if (SUCCEEDED(m_pNotify->GetCurrentSelectionSet(&l_sel))) {
  8.                 UpdateInfo(&l_sel); // Обновляем данные
  9.                 DocVars.docData().GetGeomProperties();
  10.         }
  11.         return (S_OK) ;
  12. }
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

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

  • Administrator
  • *****
  • Сообщений: 13829
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
Я так понимаю на commandWillStart можно сделать stop, а на commandEnded и commandCancelled сделать start?
Еще немножко подумал, и решил, что можно обойтись и без реакторов. Достаточно проверить текущее имя команды (если оно есть) при помощи
функции acedGetCommandForDocument.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

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

  • ADN Club
  • Сообщений: 44
  • Карма: 3
Еще немножко подумал, и решил, что можно обойтись и без реакторов. Достаточно проверить текущее имя команды (если оно есть) при помощи функции acedGetCommandForDocument.
Да, этого достаточно.
Конкретно для этой проблемы минимально достаточно провериться в GetCurrentValueType (именно он вызывается первым).
Но я думаю, возможно перестрахуюсь и проверю в IsPropertyEnabled и возможно Connect.
Спасибо за помощь :)

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

  • ADN Club
  • Сообщений: 44
  • Карма: 3
Рано радовался, не всё так гладко, попозже отпишусь...

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

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

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

  • ADN Club
  • Сообщений: 44
  • Карма: 3
Интересно что не так?
Плохо проверил, не во всех случаях срабатывает. Правильнее провериться в GetCategoryName и этого достаточно. Если в процессе тестов что-то вылезет, напишу. А в целом мысль правильная. Интересно, это баг или так задумано AutoDesk'ом?

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

  • Administrator
  • *****
  • Сообщений: 13829
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
Правильнее провериться в GetCategoryName и этого достаточно.
У меня там тоже проверяется. Т.е. внутри класса проверки только в методах Connect и GetCategoryName.
Интересно, это баг или так задумано AutoDesk'ом?
Баг. Но похоже очень древний и вероятность его исправления невелика. Тем более, что его можно "обойти" не слишком сложным образом.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн Anatoly

  • ADN OPEN
  • **
  • Сообщений: 62
  • Карма: 3
  • Skype: ant_nkh
А если перед запуском QSELECT выполнить GeomPropsStop? У меня в этом случае окно QSELECT становится обычным (нормальным)
А если потом выполнить GeomPropsStart, то GeomProps восстановятся в палитре свойств?

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

  • Administrator
  • *****
  • Сообщений: 13829
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
А если перед запуском QSELECT выполнить GeomPropsStop? У меня в этом случае окно QSELECT становится обычным (нормальным)
А если потом выполнить GeomPropsStart, то GeomProps восстановятся в палитре свойств?
Да, конечно.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение