Кастомные свойства custom entity

Автор Тема: Кастомные свойства custom entity  (Прочитано 10364 раз)

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

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

  • ADN OPEN
  • **
  • Сообщений: 66
  • Карма: 1
Здравствуйте, необходимо сделать отображение некоторых свойств custom entity в панели свойств автокада. Из примеров что я увидел в sdk добавление новых свойств выглядит просто ужасно - необходимо создать файл idl вручную там прописать эти свойства для каждого custom entity. потом для каждого entity создать com interface где прописать геттеры и сеттеры каждого из свойств. А если элементы имеют общие свойства - опять же их приходится дублировать в этой куче файлов - нет ли более простого и элегантного способа добавление свойств обьекту и наследования общих свойств - спасибо.

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

  • Administrator
  • *****
  • Сообщений: 13829
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: Кастомные свойства custom entity
« Ответ #1 : 23-09-2018, 12:02:54 »
Вот это может несколько облегчить задачу, но всё равно будет много ручных правок:



Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

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

  • ADN OPEN
  • **
  • Сообщений: 66
  • Карма: 1
Re: Кастомные свойства custom entity
« Ответ #2 : 24-09-2018, 16:19:52 »
Александр Ривилис, Спасибо за совет.

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

  • Administrator
  • *****
  • Сообщений: 13829
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: Кастомные свойства custom entity
« Ответ #3 : 24-09-2018, 18:31:17 »
Александр Ривилис, Спасибо за совет.
Кстати, работает не без глюков и потом приходится кое-что править ручками - результат работы этого визарда у меня не компилировался, пока я не изменил/добал некоторые include'ы
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

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

  • ADN OPEN
  • **
  • Сообщений: 66
  • Карма: 1
Re: Кастомные свойства custom entity
« Ответ #4 : 25-09-2018, 10:18:28 »
Александр Ривилис,  Я посмотрел что делает визард он генерирует болванку com  класса, но поля свойств все равно приходится вручную добавлять в idl классе а так же в классах com. как я понял какое-то наследование общих полей в данной реализации нельзя сделать, все равно в idl надо прописывать id параметров вручную а потом то же делать в com. у меня вопрос по одному из примеров asdkcomwrapper (нижу я привел отрывки кода) как я понял здесь инициализируются три свойства NUMBER  SQUARESIZE CENTERPOINT:
1. в com_wrapper.h #define DISPID_NUMBER       0x01 соответствует propget, id(1), в idl могут ли данные id идти не по порядку или порядок обязателен?
2. почему только два параметра присутствуют между BEGIN_OPMPROP_MAP() и END_OPMPROP_MAP() и зачем их там прописывать ?
3 функции типа STDMETHOD(get_CenterPoint)/STDMETHOD(put_CenterPoint) необходимы для чтения и установки свойств но каким образом они присваиваются соответствующему свойству?
4. зачем нужны функции STDMETHOD(GetElementValue) и STDMETHOD(SetElementValue) могут ли они заменить отдельное создание put и get функций из пункта 3 для минификации написания кода ?

Буду благодарен за разъяснение.

Код - C++ [Выбрать]
  1. //com_wrapper.h
  2. #define DISPID_NUMBER       0x01
  3. #define DISPID_SQUARESIZE   0x02
  4. #define DISPID_CENTERPOINT  0x03
  5.  
  6. ......................................
  7.  
  8.    
  9. // IAsdkSquareWrapper
  10. public:
  11.     STDMETHOD(get_CenterPoint)(/*[out, retval]*/ VARIANT *pVal);
  12.     STDMETHOD(put_CenterPoint)(/*[in]*/ VARIANT newVal);
  13.     STDMETHOD(get_SquareSize)(/*[out, retval]*/ double *pVal);
  14.     STDMETHOD(put_SquareSize)(/*[in]*/ double newVal);
  15.     STDMETHOD(get_Number)(/*[out, retval]*/ short *pVal);
  16.     STDMETHOD(put_Number)(/*[in]*/ short newVal);
  17.  
  18. // OPM
  19. //
  20. // IOPMPropertyExtension
  21. //
  22. BEGIN_OPMPROP_MAP()
  23.     OPMPROP_ENTRY(0, 0x00000001, PROPCAT_Data, \
  24.         0, 0, 0, _T(""), 0, 1, IID_NULL, IID_NULL, "")
  25.     OPMPROP_ENTRY(0, 0x00000003, PROPCAT_Geometry, \
  26.         0, 0, 0, _T(""), 0, 1, IID_NULL, IID_NULL, "")
  27. END_OPMPROP_MAP()
  28.  
  29.     STDMETHOD(GetCategoryName)(THIS_
  30.                            /* [in]  */ PROPCAT propcat,
  31.                            /* [in]  */ LCID lcid,
  32.                            /* [out] */ BSTR* pbstrName) { return S_FALSE;}
  33.  
  34.     virtual HINSTANCE GetResourceInstance()
  35.     {
  36.         return _Module.GetResourceInstance();
  37.     }
  38.  
  39.     STDMETHOD(GetElementValue)(
  40.         /* [in] */ DISPID dispID,
  41.         /* [in] */ DWORD dwCookie,
  42.         /* [out] */ VARIANT * pVarOut) ;
  43.  
  44.     //Used for property expansion (currently variant types)
  45.     STDMETHOD(SetElementValue)(
  46.         /* [in] */ DISPID dispID,
  47.         /* [in] */ DWORD dwCookie,
  48.         /* [in] */ VARIANT VarIn) ;      
  49.  
  50.     //Used for property expansion (currently variant types)
  51.     STDMETHOD(GetElementStrings)(
  52.         /* [in] */ DISPID dispID,
  53.         /* [out] */ OPMLPOLESTR __RPC_FAR *pCaStringsOut,
  54.         /* [out] */ OPMDWORD __RPC_FAR *pCaCookiesOut) ;
  55.  
  56.     //Used for property expansion (currently variant types)
  57.     STDMETHOD(GetElementGrouping)(
  58.         /* [in] */ DISPID dispID,
  59.         /* [out] */ short *groupingNumber) ;
  60.  
  61.     //Used for property expansion (currently variant types)
  62.     STDMETHOD(GetGroupCount)(
  63.         /* [in] */ DISPID dispID,
  64.         /* [out] */ long *nGroupCnt) ;
  65.     STDMETHOD(GetPredefinedStrings)(
  66.         /* [in] */ DISPID dispID,
  67.         /* [out] */ CALPOLESTR *pCaStringsOut,
  68.         /* [out] */ CADWORD *pCaCookiesOut);
  69.     STDMETHOD(GetPredefinedValue)(
  70.         /* [in] */ DISPID dispID,
  71.         /* [out] */ DWORD dwCookie,
  72.         /* [out] */ VARIANT *pVarOut);
  73.  
  74. private:
  75.     //short mNumber;
  76. };
  77.  

idl file

Код - C++ [Выбрать]
  1. ...
  2.  interface IAsdkSquareWrapper : IAcadEntity
  3.     {
  4.         [propget, id(1), helpstring("property Number")] HRESULT Number([out, retval] short *pVal);
  5.         [propput, id(1), helpstring("property Number")] HRESULT Number([in] short newVal);
  6.         [propget, id(2), helpstring("property SquareSize")] HRESULT SquareSize([out, retval] double *pVal);
  7.         [propput, id(2), helpstring("property SquareSize")] HRESULT SquareSize([in] double newVal);
  8.         [propget, id(3), helpstring("property CenterPoint")] HRESULT CenterPoint([out, retval] VARIANT *pVal);
  9.         [propput, id(3), helpstring("property CenterPoint")] HRESULT CenterPoint([in] VARIANT newVal);
  10.     };
  11. ....
  12.  

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

  • Administrator
  • *****
  • Сообщений: 13829
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: Кастомные свойства custom entity
« Ответ #5 : 25-09-2018, 11:20:53 »
1. в com_wrapper.h #define DISPID_NUMBER       0x01 соответствует propget, id(1), в idl могут ли данные id идти не по порядку или порядок обязателен?
В смысле могут ли быть пропуски типа 1, 3, 5, 105, и т.д. ??? Могут. Более того есть зарезервированные AutoCAD'ом значения.
2. почему только два параметра присутствуют между BEGIN_OPMPROP_MAP() и END_OPMPROP_MAP() и зачем их там прописывать ?
Вообще-то должно быть по одной записи на каждое свойство.
3 функции типа STDMETHOD(get_CenterPoint)/STDMETHOD(put_CenterPoint) необходимы для чтения и установки свойств но каким образом они присваиваются соответствующему свойству?
Не понял вопроса. По OPMPROP_MAP они определяются, по номеру.
4. зачем нужны функции STDMETHOD(GetElementValue) и STDMETHOD(SetElementValue) могут ли они заменить отдельное создание put и get функций из пункта 3 для минификации написания кода ?
Насколько я помню они используются для изменения значений в составных свойствах, типа массива (например, координата X для точки). Передается DispId и номер элемента массива - для точки от 0 до 2.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

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

  • ADN OPEN
  • **
  • Сообщений: 66
  • Карма: 1
Re: Кастомные свойства custom entity
« Ответ #6 : 25-09-2018, 11:49:18 »
Цитата: Vitaut Tryputsin от 25-09-2018, 10:18:28
3 функции типа STDMETHOD(get_CenterPoint)/STDMETHOD(put_CenterPoint) необходимы для чтения и установки свойств но каким образом они присваиваются соответствующему свойству?
Не понял вопроса. По OPMPROP_MAP они определяются, по номеру.
Спасибо за ответ. Я имел ввиду почему именно функция put_CenterPoint является set методом свойства centerpoint а не к примеру функция put_centrpoint1, просто я не увидел где указатель на сеттер или геттер сопоставляется со свойством. Или сопоставление этих функций где-то внутри происходит по имени переменной?

И еще один вопрос - можно ли к примеру наследовать класс обьекта от какого нибудь стандартного (Mleader к примеру) не переопределять его виртуальные методы subworldraw и тп - что бы он полностью сохранил функционал родителя в тч и свойства и добавить просто одно доп свойство и один сохраняемый параметр в базе автокада? (к примеру id Какого либо элемента)?

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

  • Administrator
  • *****
  • Сообщений: 13829
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: Кастомные свойства custom entity
« Ответ #7 : 25-09-2018, 12:07:34 »
И еще один вопрос - можно ли к примеру наследовать класс обьекта от какого нибудь стандартного (Mleader к примеру) не переопределять его виртуальные методы subworldraw и тп - что бы он полностью сохранил функционал родителя в тч и свойства и добавить просто одно доп свойство и один сохраняемый параметр в базе автокада? (к примеру id Какого либо элемента)?
Так просто не получится. Если это необходимо, то имеет смысл подумать не о Custom Entity, а о динамических свойствах.

Я имел ввиду почему именно функция put_CenterPoint является set методом свойства centerpoint а не к примеру функция put_centrpoint1, просто я не увидел где указатель на сеттер или геттер сопоставляется со свойством. Или сопоставление этих функций где-то внутри происходит по имени переменной?
При компиляции AsdkSquareLib.idl получаются файлы AsdkSquareLib_i.c и AsdkSquareLib_i.h и соответственно для
   
Код - C++ [Выбрать]
  1. interface IAsdkSquareWrapper : IAcadEntity
  2.     {
  3.         [propget, id(1), helpstring("property Number")] HRESULT Number([out, retval] short *pVal);
  4.         [propput, id(1), helpstring("property Number")] HRESULT Number([in] short newVal);
  5.         [propget, id(2), helpstring("property SquareSize")] HRESULT SquareSize([out, retval] double *pVal);
  6.         [propput, id(2), helpstring("property SquareSize")] HRESULT SquareSize([in] double newVal);
  7.         [propget, id(3), helpstring("property CenterPoint")] HRESULT CenterPoint([out, retval] VARIANT *pVal);
  8.         [propput, id(3), helpstring("property CenterPoint")] HRESULT CenterPoint([in] VARIANT newVal);
  9.     };
имеем:
Код - C++ [Выбрать]
  1.     MIDL_INTERFACE("F27668A9-2E2D-4931-886F-ED93EF812D4E")
  2.     IAsdkSquareWrapper : public IAcadEntity
  3.     {
  4.     public:
  5.         virtual /* [helpstring][id][propget] */ HRESULT STDMETHODCALLTYPE get_Number(
  6.             /* [retval][out] */ short *pVal) = 0;
  7.        
  8.         virtual /* [helpstring][id][propput] */ HRESULT STDMETHODCALLTYPE put_Number(
  9.             /* [in] */ short newVal) = 0;
  10.        
  11.         virtual /* [helpstring][id][propget] */ HRESULT STDMETHODCALLTYPE get_SquareSize(
  12.             /* [retval][out] */ double *pVal) = 0;
  13.        
  14.         virtual /* [helpstring][id][propput] */ HRESULT STDMETHODCALLTYPE put_SquareSize(
  15.             /* [in] */ double newVal) = 0;
  16.        
  17.         virtual /* [helpstring][id][propget] */ HRESULT STDMETHODCALLTYPE get_CenterPoint(
  18.             /* [retval][out] */ VARIANT *pVal) = 0;
  19.        
  20.         virtual /* [helpstring][id][propput] */ HRESULT STDMETHODCALLTYPE put_CenterPoint(
  21.             /* [in] */ VARIANT newVal) = 0;
  22.        
  23.     };
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

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

  • ADN OPEN
  • **
  • Сообщений: 66
  • Карма: 1
Re: Кастомные свойства custom entity
« Ответ #8 : 25-09-2018, 12:16:07 »
Супер  :), спасибо большое. Почитаю про динамические свойства.

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

  • ADN OPEN
  • **
  • Сообщений: 66
  • Карма: 1
Re: Кастомные свойства custom entity
« Ответ #9 : 25-09-2018, 12:18:41 »
Цитата: Vitaut Tryputsin от 25-09-2018, 11:49:18
И еще один вопрос - можно ли к примеру наследовать класс обьекта от какого нибудь стандартного (Mleader к примеру) не переопределять его виртуальные методы subworldraw и тп - что бы он полностью сохранил функционал родителя в тч и свойства и добавить просто одно доп свойство и один сохраняемый параметр в базе автокада? (к примеру id Какого либо элемента)?
Так просто не получится. Если это необходимо, то имеет смысл подумать не о Custom Entity, а о динамических свойствах.
Я еще подумал что вроде можно и xdata использовать для записи каких то своих свойств и значений а потом при наличии динамических свойств их выводить. Я примерно правильно думаю?

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

  • Administrator
  • *****
  • Сообщений: 13829
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: Кастомные свойства custom entity
« Ответ #10 : 25-09-2018, 12:23:49 »
Я еще подумал что вроде можно и xdata использовать для записи каких то своих свойств и значений а потом при наличии динамических свойств их выводить. Я примерно правильно думаю?
Да. Я попробую сделать пример. Если речь идёт о свойстве для AcDbMLeader, то какое именно дополнительное свойство ты хотел бы сделать?
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

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

  • ADN OPEN
  • **
  • Сообщений: 66
  • Карма: 1
Re: Кастомные свойства custom entity
« Ответ #11 : 25-09-2018, 12:40:53 »
Да. Я попробую сделать пример. Если речь идёт о свойстве для AcDbMLeader, то какое именно дополнительное свойство ты хотел бы сделать?
Спасибо,Александр Ривилис,  это было бы здорово. Ну для мультивыноски к примеру текстовое поле формат. (это шаблон по которому будут вписывться данные). А так же в xdata хранить id элемента с которым связана мультивыноска. Предпологается что будет команда которая найдет все мои выноски и пересчитает тексовый месседж выносок используя присвоеный формат. И еще вопрос по дин свойствам они могут добавлятся к одному определенному классу примитивов или его можно на множество классов распространить (типо как общее свойство для нескольких классов)?

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

  • Administrator
  • *****
  • Сообщений: 13829
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: Кастомные свойства custom entity
« Ответ #12 : 25-09-2018, 12:52:15 »
И еще вопрос по дин свойствам они могут добавлятся к одному определенному классу примитивов или его можно на множество классов распространить (типо как общее свойство для нескольких классов)?
Его можно добавить к базовому классу, общему для всех твоих классов (например, если добавить для AcDbCurve, то сработает и для AcDbLine, и для AcDbPolyline, и для AcDbArc и т.д.) А можно добавить для AcDbEntity и управлять его появлением в OPM и выводимым значением в зависимости от того, что выбрано.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

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

  • Administrator
  • *****
  • Сообщений: 13829
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: Кастомные свойства custom entity
« Ответ #13 : 25-09-2018, 13:20:53 »
Ну для мультивыноски к примеру текстовое поле формат. (это шаблон по которому будут вписывться данные).
Это поле редактируется в панели свойств или только показывается?
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

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

  • ADN OPEN
  • **
  • Сообщений: 66
  • Карма: 1
Re: Кастомные свойства custom entity
« Ответ #14 : 25-09-2018, 13:48:06 »
Это поле редактируется в панели свойств или только показывается?
Редактируется. - это что то меняет? - Если это можно реализовать но много возни просто напишите как я сам разберусь

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

  • Administrator
  • *****
  • Сообщений: 13829
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: Кастомные свойства custom entity
« Ответ #15 : 25-09-2018, 13:54:01 »
Это поле редактируется в панели свойств или только показывается?
Редактируется. - это что то меняет? - Если это можно реализовать но много возни просто напишите как я сам разберусь
Я для того, чтобы понять как ты с этим собираешься работать. А если выбрано несколько разных MLeader и у них эти поля разные? Или показывать и позволять редактировать только если выбран один MLeader? Там есть тоже куча нюансов.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

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

  • ADN OPEN
  • **
  • Сообщений: 66
  • Карма: 1
Re: Кастомные свойства custom entity
« Ответ #16 : 25-09-2018, 14:06:59 »
Я для того, чтобы понять как ты с этим собираешься работать. А если выбрано несколько разных MLeader и у них эти поля разные? Или показывать и позволять редактировать только если выбран один MLeader? Там есть тоже куча нюансов.
Ну для такого случая я видел как автокад показывает свойство одного имени с разными значениями - в поле "значение" будет что то вроде *Разные* - и если задать какое-то конкретное - то это значение примениться ко всем обьектам. Тоесть я не думал о какой-то специальной логике.

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

  • Administrator
  • *****
  • Сообщений: 13829
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: Кастомные свойства custom entity
« Ответ #17 : 25-09-2018, 14:31:44 »
Я приаттачил проект, но не проверял его. Будем считать, что он может использоваться в качестве учебного пособия.

UPD. Проект удалил, так как в нём много ошибок.
« Последнее редактирование: 25-09-2018, 17:39:27 от Александр Ривилис »
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

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

  • ADN OPEN
  • **
  • Сообщений: 66
  • Карма: 1
Re: Кастомные свойства custom entity
« Ответ #18 : 25-09-2018, 14:39:14 »
Спасибо большое!

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

  • Administrator
  • *****
  • Сообщений: 13829
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: Кастомные свойства custom entity
« Ответ #19 : 25-09-2018, 15:07:28 »
А вот этот проект я проверил и на первый взгляд он вполне рабочий.  Не забудь только в Autodesk.arx-2018.props изменить путь к ObjectARX SDK. У меня он так записан:
Код - XML [Выбрать]
  1. <ArxSdkDir>E:\ObjectARX2018\</ArxSdkDir>

Так это у меня выглядит:
« Последнее редактирование: 25-09-2018, 17:38:33 от Александр Ривилис »
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

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

  • ADN OPEN
  • **
  • Сообщений: 66
  • Карма: 1
Re: Кастомные свойства custom entity
« Ответ #20 : 25-09-2018, 16:57:12 »
Спасибо, за видео. Я посмотрел проект - чуть позже более глубоко поразбираюсь. Просто несколько вопросов по дин свойствам которые у меня возникли:
1. Можно ли ли порядок отображения в окне свойств настраивать чтобы новые свойства были выше свойств TEXT?
2. Можно ли в одном классе обьявлять несколько свойств?
3. Я заметил в idl файле не прописываются геттеры и сеттеры как в случае с  со статическими свойствами?

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

  • Administrator
  • *****
  • Сообщений: 13829
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: Кастомные свойства custom entity
« Ответ #21 : 25-09-2018, 17:03:06 »
1. Можно ли ли порядок отображения в окне свойств настраивать чтобы новые свойства были выше свойств TEXT?
Нет. Этим управляет AutoCAD. Можно попробовать поиграться с именем категории. Возможно изменится порядок - я не проверял.
2. Можно ли в одном классе обьявлять несколько свойств?
Нет. Один класс - одно свойство.
3. Я заметил в idl файле не прописываются геттеры и сеттеры как в случае с  со статическими свойствами?
Да. Всё в классе.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

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

  • ADN OPEN
  • **
  • Сообщений: 66
  • Карма: 1
Re: Кастомные свойства custom entity
« Ответ #22 : 25-09-2018, 17:26:20 »
Нет. Один класс - одно свойство.
Тоесть если надо создать несколько свойств - мы создаем несколько классов. А сгруппировать их в одной категории в итоге можно или в системную подсунуть в данном случае у вас есть категория "MLeadear - доп. свойства"? и там свойство "Текстовый формат"?
Или только отдельный класс, отдельная категория, отдельное свойство?

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

  • Administrator
  • *****
  • Сообщений: 13829
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: Кастомные свойства custom entity
« Ответ #23 : 25-09-2018, 17:34:50 »
Тоесть если надо создать несколько свойств - мы создаем несколько классов.
Да.
А сгруппировать их в одной категории в итоге можно
Да.
Вот пример моего плагина GeomProps. В нём четыре отдельных класса - четыре отдельных свойства.



Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

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

  • Administrator
  • *****
  • Сообщений: 13829
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: Кастомные свойства custom entity
« Ответ #24 : 25-09-2018, 17:40:29 »
Опс! Обратил внимание, что забыл приаттачить исправленный проект. Исправил в http://adn-cis.org/forum/index.php?topic=8743.msg34096#msg34096
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

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

  • Administrator
  • *****
  • Сообщений: 13829
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: Кастомные свойства custom entity
« Ответ #25 : 26-09-2018, 00:34:48 »
Добавлю ка я сюда кое-что из документации, которую я когда-то сказал в ADN. Сейчас уже сайта нет, так что найти эти файлы негде.
Всё это старое, но это не значит, что устаревшее.
property_palette_-_vol_i.zip
simpledynpropsvs9.zip
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

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

  • ADN OPEN
  • **
  • Сообщений: 66
  • Карма: 1
Re: Кастомные свойства custom entity
« Ответ #26 : 04-10-2018, 16:29:02 »
Как я понял с помощью функции можно управлять отображением видимостью динамического свойства для конкретного обьекта,
Как с помощью  IUnknown *pUnk проверить есть ли у текущего обьекта xdata или нет, спасибо.
Код - C++ [Выбрать]
  1.  STDMETHODIMP CMLeaderDynProp::IsPropertyEnabled (IUnknown *pUnk, BOOL *pbEnabled) {
  2.         if ( pUnk == NULL )
  3.                 return (E_INVALIDARG) ;
  4.         pUnk->QueryInterface()
  5.        
  6.         if ( pbEnabled == NULL )
  7.                 return (E_POINTER) ;
  8.         // TODO: add your code here (and comment the line below)
  9.         *pbEnabled =TRUE ;
  10.  
  11.         return (S_OK) ;
  12. };

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

  • ADN OPEN
  • **
  • Сообщений: 66
  • Карма: 1
Re: Кастомные свойства custom entity
« Ответ #27 : 04-10-2018, 16:53:22 »
Кажется сам нашел в примере что вы скинули, где l_unkn это IUnknown *
Код - C++ [Выбрать]
  1.             IAcadObject *l_base = 0;
  2.             if (!SUCCEEDED(l_unkn->QueryInterface(IID_IAcadObject, (void **)&l_base)))
  3.             {
  4.               continue;
  5.             }
  6.             AcDbObjectId  l_oid;
  7.             LONG_PTR l_long = 0;
  8.             if (SUCCEEDED(l_base->get_ObjectID(&l_long)))
  9.             {
  10.               l_oid.setFromOldId(l_long);
  11.             }
  12.  
  13.  

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

  • Administrator
  • *****
  • Сообщений: 13829
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: Кастомные свойства custom entity
« Ответ #28 : 04-10-2018, 16:57:49 »
Кажется сам нашел в примере что вы скинули, где l_unkn это IUnknown *
Да. Альтернативный вариант:
Код - C++ [Выбрать]
  1. CComQIPtr<IAcadBaseObject> pObj(pUnk);
Ну и дальше по сценарию.

Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение