Как создать пользовательские данные(атрибуты) на объекте
Поскольку в менеджере атрибутов могут быть очень разнообразные виды данных - вкладки, кнопки, разделители, сплайны и др. начнем с простых типов. Создадим сначала
десятичный и целочисленный типы атрибутов.
создаем контейнер с нужным типом.
c4d.DTYPE_REAL- создает число с плавающей точкой. Другие типы смотрим в документации
FloatData = c4d.GetCustomDataTypeDefault(c4d.DTYPE_REAL)дадим ему название
FloatData[c4d.DESC_NAME] = "Float Data"
FloatData[c4d.DESC_SHORT_NAME] = "FData"зададим параметры. Узнать о других можно тут
FloatData[c4d.DESC_MIN] = -10 # минимальное
FloatData[c4d.DESC_MAX] = 10 # максимальное значение
FloatData[c4d.DESC_STEP] = 0.25# шаг изменения
FloatData[c4d.DESC_DEFAULT] = 6.25# можно задать значение по умолчанию
FloatData[c4d.DESC_ANIMATE] = c4d.DESC_ANIMATE_ON # может анимироватьсядобавим этот контейнер на выделенный объект
FloatId = op.AddUserData(FloatData)Получим идентификатор объекта, который будем использовать для назначения и получения данных
op[FloatId] = 3.1415 # зададим значение или
param = op[FloatId] # получим значение
c4d.EventAdd() # для обновленияДля создания атрибута с целочисленным значением все будет то же самое, за исключением того, что в первом пункте используем тип c4d.DTYPE_LONG, а в третьем пункте параметры c4d.DESC_STEP и c4d.DESC_DEFAULT должны быть только целыми числами (иначе будет ошибка)
разделительную линию:
Примечание: разделительная линия становится видна только когда находится между данными, которые разделяет.
группы вкладок:
для создания вкладки используем
c4d.DTYPE_GROUP:
создадим атрибут, который хотим поместить во вкладку:
теперь нужно создать дескриптор, посредством которого можно прикрепить атрибут к созданной вкладке:
сначала, бывает непонятно что это за конструкция. Нужно почитать больше о том, что такое c4d.DescID и c4d.DescLevel
назначаем родителем нашего атрибута созданную вкладку
добавляем вкладку и атрибут на выделенный объект
❗ Внимание: тут важен порядок добавления (нам нужно чтобы ID вкладки был равен единице - именно ее мы использовали в дескрипторе)
создание сплайновых данных
Сначала, создаем контейнер нужного типа
Дадим ему имя и настроим параметры
Другие параметры настройки SPLINECONTROL_ смотрим в документации
добавим этот контейнер на выделенный объект
Теперь создадим сплайн(кубический) из 5 точек
В качестве примера закомментированы сплайн по формуле и линейный. Другие типы сплайнов в документации
назначаем сплайн в атрибут выделенного объекта и обновляем сцену
создание кнопки
В обычном скрипте нет смысла создавать кнопки в атрибутах объекта - скрипт отработал и не сможет реагировать на нажатия. Но если предполагается длительная работа и нужно проверять состояние кнопки то вот:
Так же здесь использован другой синтаксис для назначения параметров объекту контейнера. В плагинах, генераторах и тегах питона используется метод message для доступа к событию нажатия кнопки.
Last updated