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

ADN Club => ObjectARX => Тема начата: Vt от 15-10-2018, 01:32:45

Название: Порядок расположения динамических свойств внутри категории.
Отправлено: Vt от 15-10-2018, 01:32:45
Здравствуйте, Появился такой вопрос можно ли настроить порядок динамических свойств внутри категории. Так как я создал несколько динамических свойств но их порядок выглядит случайным образом внутри категории. Спасибо.
Название: Re: Порядок расположения динамических свойств внутри категории.
Отправлено: Александр Ривилис от 15-10-2018, 01:34:09
Так как я создал несколько динамических свойств но их порядок выглядит случайным образом внутри категории.
Случайный или отсортированный по алфавиту или по порядку создания?
Название: Re: Порядок расположения динамических свойств внутри категории.
Отправлено: Vt от 15-10-2018, 01:40:02
Названия свойств на русском, но я обратил внимание что название классов на английском соответствует порядку. Порядку создания не соответствует. Может быть сортировано по имени класса? Можно отсортировать по другому?
Название: Re: Порядок расположения динамических свойств внутри категории.
Отправлено: Александр Ривилис от 15-10-2018, 01:52:44
Может быть сортировано по имени класса? Можно отсортировать по другому?
Похоже что можно, но тогда тебе кое что сделать самостоятельно. А именно - переписать класс AcRxDynPropManager (из dynpropmgr.h) под себя. Ну или полностью переписываешь логику подключения свойств - смотри в ObjectARX SDK: samples\editor\simpledynprops
Название: Re: Порядок расположения динамических свойств внутри категории.
Отправлено: Александр Ривилис от 15-10-2018, 02:01:45
Альтернативный вариант - переименовать классы. :)
Название: Re: Порядок расположения динамических свойств внутри категории.
Отправлено: Vt от 15-10-2018, 02:13:05
Альтернативный вариант - переименовать классы. :)

Я уже попробовал переименовать что бы проверить  :). Не помогло поставил перед классом на a z. Возможно если если пересоздать с учетом такой особенности :).
В сдк я не нашел того примера про который вы писали. вот то что у меня в папке editor
custobj_dg\
mfcsamps\
SimpleToolPalette_dg\
Название: Re: Порядок расположения динамических свойств внутри категории.
Отправлено: Александр Ривилис от 15-10-2018, 02:14:14
В сдк я не нашел того примера про который вы писали. вот то что у меня в папке editor
Код: [Выделить]

custobj_dg\
mfcsamps\
SimpleToolPalette_dg\
Ищи в старых версиях ObjectARX SDK (в 2008 точно есть).
Название: Re: Порядок расположения динамических свойств внутри категории.
Отправлено: Vt от 15-10-2018, 02:44:41
Спасибо, буду смотреть. Но я еще попробовал создать класс на Z и он стал последним а потом на A и он стал первым
Название: Re: Порядок расположения динамических свойств внутри категории.
Отправлено: Vt от 25-10-2018, 00:52:10
В итоге воспользовался 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.  
Название: Re: Порядок расположения динамических свойств внутри категории.
Отправлено: Александр Ривилис от 25-10-2018, 09:17:45
В итоге воспользовался IPropertyManager2.
Собственно о чем я и писал в http://adn-cis.org/forum/index.php?topic=8807.msg34552#msg34552