Тема: Нужен пример добаления свойств в "Property manager" к custom-объекту

Господа!
Если не сложно, приведите простой примерчик для добавки свойств в Property manager к custom объекту. (выбор цвета, размер ...)
В доке ObjectARX все привязано к формированию COM/ATL объектов через wizard'ы, которые зачастую, в силу тех или иных причин, просто не работают. Плюс еще привязка к MFC, который иногда вообще не нужен...
Заранее благодарен.

Re: Нужен пример добаления свойств в "Property manager" к custom-объекту

Увы, это так. Без COM-WRAPPER не обойтись :) Если все сделать правильно, все получится

Re: Нужен пример добаления свойств в "Property manager" к custom-объекту

Господа!
HELP!!!!!!!
добавляю к проекту (#include "dynpropmgr.h") - и на этом ВСЕ заканчивается...
error C2501: '_OPM_DYNPROP_ENTRY::_ATL_CREATORFUNC' : missing storage-class or type specifiers
и пр байда... уже добавил все lib'ы, которые относятся к реализации, все одно...
Подскажите что делать?

Re: Нужен пример добаления свойств в "Property manager" к custom-объекту

> Sandrick
1) При создании проекта указал: Implement a COM server using         ATL ? Если нет, то на что расчитываешь?
2) При чем тут lib'ы, когда у тебя не проходит стадия компиляции?
3) Ну "и пр байда..." - это что?

Re: Нужен пример добаления свойств в "Property manager" к custom-объекту

> Александр Ривилис
implement a COM server using ATL?

Re: Нужен пример добаления свойств в "Property manager" к custom-объекту

Дело в том, что я никогда не сталкивался с COM, всегда избегал эту тему... вот @#@ догнало... объект уже почти готов к работе, описана вся  математика, все реализовано. ТАКАЯ ПРОСТАЯ ........ как свойства объекта почему-то вызывают столько проблем...

Re: Нужен пример добаления свойств в "Property manager" к custom-объекту

> Sandrick
Это как раз одно из самых сложных в ObjectARX. Пока не разберешься с COM/ATL - ничего не получится. Похоже, что тебе придется пересоздать проект при помощи ObjectARX Wizard и указать при его создании Implement a COM server using ATL. Кроме того посмотри примеры в ObjectARX SDK. Например, samples\editor\Palettes

Re: Нужен пример добаления свойств в "Property manager" к custom-объекту

> Александр Ривилис
Спасибо. Я уже понял. Могила... братская...

Re: Нужен пример добаления свойств в "Property manager" к custom-объекту

> Александр Ривилис
Появился еще один вопрос. Я разобрался с реализацией всего этого добра... но...
GET_AUTOMATION_PROTOCOL (macro), при помощи которого получаем указатель на интерфейс propertymanager'a, поставил меня в  тупик. Ни реализации оного макроса, даже в сети НИГДЕ!!! нет. Упоминание только в закомментированной строке dynprops.h и в Help'e...

Re: Нужен пример добаления свойств в "Property manager" к custom-объекту

Видимо это какой-то устаревший макрос.
IPropertyManager можно получить так:

OPMPropertyExtension* pExtension = GET_OPMEXTENSION_CREATE_PROTOCOL()->CreateOPMObjectProtocol(pClass1);
IPropertyManager* pManager = pExtension->GetPropertyManager();

Подробнее см. OAX Reference, статья "The Reset() Method".

Re: Нужен пример добаления свойств в "Property manager" к custom-объекту

> Sandrick
Посмотри пример samples\editor\simpledynprops
Думаю, что этот макрос не нужен. Вместо него используется макро GET_OPMPROPERTY_MANAGER()

Re: Нужен пример добаления свойств в "Property manager" к custom-объекту

Все! разобрался. Работает.
Александр. В очередной раз с огромной благодарностью за указание !верного пути! !
Не очень элегантно - но факт.
Если кому потребуется самый короткий путь решения проблемы добавления свойств, мыльте - вышлю.
(реализация класса свойств и прикручивание к объекту...)

Re: Нужен пример добаления свойств в "Property manager" к custom-объекту

По многочисленным просьбам слушателей :)
Кусок кода, реализующий возможность добавления своих данных в ObjectPropertyManager (OPM)

AcRxDynPropManager * pDynPropManager = NULL;
CComObject<CObjectProperty> *pProperty = NULL;
CComPtr<IPropertyManager> pPropMan;
AsdkYourObjectCLASS * Object;
bool isPorpertyInited = false;

//======================================
При создании объекта:

if (!isPorpertyInited)
                        {
                                AcRxClass *pClass = Object->isA();
                                pPropMan.p = GET_OPMPROPERTY_MANAGER(pClass);
                                _com_util::CheckError(CComObject<CProperty>::CreateInstance(&pProperty));
                                pProperty->AddRef();
                                pPropMan.p->AddProperty(pProperty);
                                isPorpertyInited = true;                       }

Дальше смотришь реализацию интерфейса IDynamicProperty в файле dynprops.h
и пишешь свой property (каждое свойство(property) должно иметь свой собственный класс)
Обязательно в заголовке класса твоего свойства (Property.h) - CProperty необходимо прописать до объявления конструктора класса:

BEGIN_COM_MAP (CProperty)
    COM_INTERFACE_ENTRY (IDynamicProperty)
END_COM_MAP()

Все остальное см. в примере SimpleDynProps...
P.S. и не забудь выгрузить все указатели...
//========================================

... On_kUnloadAppMsg (void *pkt) {
                if (!isPorpertyInited)
                        return (AcRx::AppRetCode::kRetOK);
                isPorpertyInited = false;
                try
                        {
                _com_util::CheckError(pPropMan->RemoveProperty(pProperty));
                pProperty->Release();
                        }
           catch(const _com_error& )