Пишем первый плагин
Напишем 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 пикселя.
Дальше, нам нужно создать каталоги и ресурсные файлы плагина. В нашем случае это должно выглядеть так:
SimpleGenerator/
simplegenerator.pyp
res/
c4d_symbols.h
description/
Osimplegenerator.h
Osimplegenerator.res
strings_en-US/
c4d_strings.str
description/
Osimplegenerator.str
SimpleGenerator.tifМожно создать все ресурсные файлы вручную в текстовом редакторе. О том как это сделать можно посмотреть, например здесь.
А можно воспользоваться утилитой написанной 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