Пишем первый плагин
Напишем ObjectData плагин
ObjectData плагин создает на сцене объект. Это может быть c4d.PolygonObject
или c4d.SplineObject
. Так же ObjectData плагин может создавать модификатор, например полигонов или системы частиц. В официальном репозитории от Maxon - есть примеры плагинов: Py-RoundedTube, Py-DoubleCircle, Py-SpherifyModifier и Py-Gravitation
Итак, первым делом создадим в папке plugins
директорию с названием своего плагина - пусть это будет SimpleGenerator
. Папка plugins
находится примерно по такому пути C:\Users\UserName\AppData\Roaming\MAXON\Maxon CINEMA 4D Studio R20.030\plugins
. Имя пользователя UserName
и версию CINEMA в пути - меняете на свои. В папке SimpleGenerator
создаем папку res
, в которую положим файл иконки нашего плагина. Обычно это файл формата .tif
размером 32х32 пикселя.
Дальше, нам нужно создать каталоги и ресурсные файлы плагина. В нашем случае это должно выглядеть так:
Можно создать все ресурсные файлы вручную в текстовом редакторе. О том как это сделать можно посмотреть, например здесь.
А можно воспользоваться утилитой написанной nrosenstein
- "Cinema 4D Prototype Converter". Подробнее, как установить и использовать - смотреть тут
Правда, для ее использования понадобится Cinema 4D версии R20. Скачиваем пакет, создаем в папке plugins
папку converter
и распаковываем в нее содержимое пакета. Запускаем Cinema 4D R20 и проверяем тут в меню > Скрипт:
Теперь создаем Null-объект и назовем его SimpleGenerator
:
Если мы хотим, чтобы у созданного объекта можно было менять параметры (в том числе анимировать их) - нам нужно добавить их через опцию "Данные пользователя">"Добавить данные пользователя...". Мы создадим эти данные на нашем Null-объекте:
Сделаем две группы "Diametrs" и "Segments". В каждой группе добавим по 2 поля для данных "Lines" и "Spheres". В первой группе поля будут иметь вещественный тип, а во второй - целый. Выделяем наш Null-объект и запускаем Prototype Converter:
Заполняем поля Prototype Converter:
Sourse
- здесь указываем с какого объекта считывать пользовательские данные (в нашем случае - null-object SimpleGenerator)Plugin Name
- название нашего плагинаPlugin ID
- уникальный ID нашего плагинаResource Name
- имя файла ресурсов для нашего плагинаSymbol Prefix
- префикс для переменных в коде нашего плагинаIcon
- путь до иконки.Plugin Directory
- указываем путь к папке плагина
Больше ничего менять не нужно. На моем скрине я ввел все данные соответсвенно своим настройкам. Жмем кнопочку Create
и переходим к папке своего плагина. В ней находим файл simplegenerator.pyp
и открываем его в редакторе:
Это уже рабочий плагин. Он загружается и запускается без ошибок. Но пока ничего не создает. Чтобы это исправить изменяем в этой строке 0 на c4d.OBJECT_GENERATOR
:
осталось добавить метод, который будет создавать и возвращать объект:
и конечно это:
Разумеется, оба метода должны принадлежать классу SimpleGeneratorData
, который является основным для нашего плагина и наследуется от c4d.plugins.ObjectData
. Вот теперь наш плагин при запуске создает на сцене сферу! Правда, у сферы все параметры фиксированы, а созданные нами никак не влияют на неё... Сейчас мы это исправим!
Изменение полей Spheres
приводит к изменениям диаметра сферы и количества её сегментов! Но на этом еще не всё. Мы ведь зачем-то создали и параметры Lines
, значит мы хотели создать по крайней мере два объекта. Но метод GetVirtualObjects
всегда должен возвращать только один объект! Тут мы можем либо создать Null-объект, подчинить ему все остальные объекты и вернуть этот Null. Либо сделать один из имеющихся объектов корневым и остальные подчинить ему в нужной иерархии (и вернуть корневой объект). Мы поступим первым способом:
Конечно, можно было использовать примитив-объект Cylinder
вместо того чтобы создавать сплайн и свип к нему. А можно было построить объект из отдельных полигонов и еще кучей способов на которые хватит вашей фантазии!
В итоге мы получили такой объект, созданный нашим плагином:
Теперь, вы можете создавать и свои объекты, назначать им параметры и свою логику. Сконвертируйте полученный объект в полигональный клавишей C
- вы увидите что он состоит из тех объектов, которые мы создавали в методе GetVirtualObjects
PS. Созданный таким образом плагин - прекрасно работает в Cinema 4d R23 !
Last updated