Порядок расположения динамических свойств внутри категории.

Автор Тема: Порядок расположения динамических свойств внутри категории.  (Прочитано 9203 раз)

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

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

  • ADN OPEN
  • **
  • Сообщений: 66
  • Карма: 1
Здравствуйте, Появился такой вопрос можно ли настроить порядок динамических свойств внутри категории. Так как я создал несколько динамических свойств но их порядок выглядит случайным образом внутри категории. Спасибо.

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

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

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

  • ADN OPEN
  • **
  • Сообщений: 66
  • Карма: 1
Названия свойств на русском, но я обратил внимание что название классов на английском соответствует порядку. Порядку создания не соответствует. Может быть сортировано по имени класса? Можно отсортировать по другому?

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

  • Administrator
  • *****
  • Сообщений: 13882
  • Карма: 1787
  • Рыцарь ObjectARX
  • Skype: rivilis
Может быть сортировано по имени класса? Можно отсортировать по другому?
Похоже что можно, но тогда тебе кое что сделать самостоятельно. А именно - переписать класс AcRxDynPropManager (из dynpropmgr.h) под себя. Ну или полностью переписываешь логику подключения свойств - смотри в ObjectARX SDK: samples\editor\simpledynprops
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

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

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

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

  • ADN OPEN
  • **
  • Сообщений: 66
  • Карма: 1
Альтернативный вариант - переименовать классы. :)

Я уже попробовал переименовать что бы проверить  :). Не помогло поставил перед классом на a z. Возможно если если пересоздать с учетом такой особенности :).
В сдк я не нашел того примера про который вы писали. вот то что у меня в папке editor
custobj_dg\
mfcsamps\
SimpleToolPalette_dg\

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

  • Administrator
  • *****
  • Сообщений: 13882
  • Карма: 1787
  • Рыцарь ObjectARX
  • Skype: rivilis
В сдк я не нашел того примера про который вы писали. вот то что у меня в папке editor
Код: [Выделить]

custobj_dg\
mfcsamps\
SimpleToolPalette_dg\
Ищи в старых версиях ObjectARX SDK (в 2008 точно есть).
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

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

  • ADN OPEN
  • **
  • Сообщений: 66
  • Карма: 1
Спасибо, буду смотреть. Но я еще попробовал создать класс на Z и он стал последним а потом на A и он стал первым

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

  • ADN OPEN
  • **
  • Сообщений: 66
  • Карма: 1
В итоге воспользовался IPropertyManager2.
Сделал ручное добавление свойств и они стали отображаться в порядке добавления. Правда если сразу за initialize() вызвать uninitialize()  свойства все равно почему то остаются.
Код - C++ [Выбрать]
  1. //закоммитил строку в customDynProperty.h
  2. ...
  3. //OPM_DYNPROP_OBJECT_ENTRY_AUTO(CTVSPropertyMassDyn, AcDbObject)
  4. ...
  5. //использовал следующий код для добавления и удаления свойств
  6. ...
  7. AcRxClass* m_pClass = AcDbEntity::desc();
  8.  
  9. void initialize()
  10. {
  11.         if (m_bInitialized)
  12.                 return;
  13.         m_bInitialized = true;
  14.         try
  15.         {
  16.                 CComPtr<IPropertyManager2> pPropMan = (IPropertyManager2*)GET_OPMPROPERTY_MANAGER(m_pClass);
  17.                 addProperty(pPropMan, m_position);
  18.                 addProperty(pPropMan, m_name);
  19.                 addProperty(pPropMan, m_type);
  20.                
  21.         }
  22.         catch (const _com_error&)
  23.         {
  24.                 acutPrintf(_T("\nDynProps: initialize failed!!!\n"));
  25.                 return;
  26.         }
  27. }
  28.  
  29. void uninitialize()
  30. {
  31.         try
  32.         {
  33.                  CComPtr<IPropertyManager2> pPropMan = (IPropertyManager2*)GET_OPMPROPERTY_MANAGER(m_pClass);
  34.                  removeProperty(pPropMan, m_position);
  35.                  removeProperty(pPropMan, m_name);
  36.                  removeProperty(pPropMan, m_type);
  37.         catch (const _com_error&)
  38.         {
  39.                 acutPrintf(_T("\nDynProps: uninitialize failed!!!\n"));
  40.                 return;
  41.         }
  42. }
  43.  
  44. template<typename T>
  45. void addProperty(CComPtr<IPropertyManager2> &pPropMan,  T*&prop) {
  46.         _com_util::CheckError(T::CreateInstance(&prop));
  47.         prop->AddRef();
  48.         _com_util::CheckError(pPropMan->AddProperty((IDynamicProperty2*)prop));
  49.        
  50. }
  51.  
  52. template<typename T>
  53. void removeProperty(CComPtr<IPropertyManager2> &pPropMan, T*&prop) {
  54.         if (prop)
  55.         {
  56.                 _com_util::CheckError(pPropMan->RemoveProperty((IDynamicProperty2*)prop));
  57.                 prop->Release();
  58.         }
  59. }
  60.  

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

  • Administrator
  • *****
  • Сообщений: 13882
  • Карма: 1787
  • Рыцарь ObjectARX
  • Skype: rivilis
В итоге воспользовался IPropertyManager2.
Собственно о чем я и писал в http://adn-cis.org/forum/index.php?topic=8807.msg34552#msg34552
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение