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

ADN Club => ObjectARX => Тема начата: Georg от 06-11-2022, 18:13:43

Название: Динамические свойства. Возможность создания новых свойств в Runtime
Отправлено: Georg от 06-11-2022, 18:13:43
Добрый день, по мере анализа функциональности динамических свойств задался вопросом, а можно ли реализовать добавление новых свойств и новых категорий, определив в коде конструкторы/методы для них?
Во всех примерах что я вижу вводится некоторый класс, наследующий интерфейс в том числе IDynamicProperty и для этого класса вводится пустой конструктор в реализации которого задаются нужные Автору кода имена и тип данных ... как я понял пустой конструктор это вынужденная мера для логики функции COM CreateInstance, верно же? Даже введя вспомогательные методы а-ля
Код - C++ [Выбрать]
  1. void set_name(bstr_t name);
  2. void set_type(VARTYPE type);
  3. void set_order(int order);
и реализовав их после отработки CreateInstance я не наблюдаю новые свойства в перечне своей категории (в качестве контейнера для всех свойств категории создал контейнер вида
Код - C++ [Выбрать]
  1. static std::vector< CComObject<my_class>*> categorized_props;
Но ненаблюдение наверное следствие того что я не сохраняю их в XData ...


В общем интересует в принципе, можно ли создавать произвольные свойства во время работы с чертежом (например из отдельного диалогового окна из пользовательского ввода - типа "создать свойство типа string для всех объектов" с его появлением у объектов), оставив в коде функциональность для этого, или это невозможно в принципе и динамические свойства могут лишь описываться в коде и никак их не видоизменить уже в модели (исключая настройку отображения свойств в окне настройки cuix)?
Название: Re: Динамические свойства. Возможность создания новых свойств в Runtime
Отправлено: Александр Ривилис от 08-11-2022, 20:48:29
Несколько раз перечитал, но ничего не понял.
Название: Re: Динамические свойства. Возможность создания новых свойств в Runtime
Отправлено: Georg от 09-11-2022, 15:23:44
Попробую перефразировать от обратного:

Пользователь с помощью этого приложения сможет создавать (регистрировать) новые свойства (имя, тип, к каким классам относится), и они будут появляться у соответствующих объектов. И храниться в файлах. Функциональный аналог - Property Sets в Civil3D.
Вопрос в принципиальной возможности сделать такое при помощи динамических свойств.
Во всяком случае, добавить новое свойство у меня получилось ... интересны границы применимости подхода.

Я тут в вопросе копался и выяснил что COM-обёртки якобы не являются обязательными (или не в полной мере) если нет цели поддерживать доступ к ним из других языков (?), а то количество вспомогательного кода напрягает....
Название: Re: Динамические свойства. Возможность создания новых свойств в Runtime
Отправлено: Александр Ривилис от 10-11-2022, 02:10:50
Я тут в вопросе копался и выяснил что COM-обёртки якобы не являются обязательными (или не в полной мере) если нет цели поддерживать доступ к ним из других языков (?), а то количество вспомогательного кода напрягает...
Они действительно необязательны (смотри эти статьи: https://adn-cis.org/search.html?query=НЕ-COM (https://adn-cis.org/search.html?query=НЕ-COM) )
Но у них есть ограничения по сравнению с COM.