Каждый экземпляр c4d.BaseList2D имеет ссылку на объект класса c4d.BaseContainer. По сути, это ассоциативный массив, содержащий все значения параметров, которые объект имеет в Менеджере атрибутов.
В Cinema 4D Python API, c4d.BaseList2D
является базовым классом для всех объектов, которые могут быть упорядочены в иерархическом списке. Это включает материалы, объекты, теги и др. Этот класс обеспечивает методы для получения и установки бит (выделения, фолдинга и др.), получения и установки пользовательских данных (атрибутов) объекта, работа со слоями, треками и ключами. Далее приведены наиболее важные методы, остальные в документации.
BaseList2D.DelBit(self, mask)
удалить битBaseList2D.GetAllBits(self)
получить все битыBaseList2D.GetBit(self, mask)
получить конкретный битBaseList2D.SetAllBits(self, mask)
установить все битыBaseList2D.SetBit(self, mask)
установить конкретный битBaseList2D.ToggleBit(self, mask)
переключить бит
BaseList2D.GetBubbleHelp(self)
получить всплывающее описание объектаBaseList2D.GetName(self)
получить имяBaseList2D.GetTypeName(self)
Имя категории объекта, например Phong, Spline, BoneBaseList2D.SetName(self, name)
задать имя
BaseList2D.GetLayerData(self, doc[, rawdata])
возвращает данные слоя для этого объекта в виде словаряdict{solo: bool, view: bool, render: bool, manager: bool, locked: bool, generators: bool, expressions: bool, animation: bool, color: Vector, xref: bool}
BaseList2D.GetLayerObject(self, doc)
получить слой этого объектаBaseList2D.SetLayerData(self, doc, data)
устанавливает данные слоя для этого объекта. Параметры в виде словаряdict{solo: bool, view: bool, render: bool, manager: bool, locked: bool, generators: bool, expressions: bool, animation: bool, color: Vector, xref: bool}
BaseList2D.SetLayerObject(self, layer)
установить слой этого объекта
Пример кода с созданием слоев
BaseList2D.GetFirstShader(self)
получить первый шейдерBaseList2D.InsertShader(self, shader[, pred])
вставить шейдер
BaseList2D.FindCTrack(self, id)
найти трек по idBaseList2D.GetCTrackRoot(self)
получить корневой трекBaseList2D.GetCTracks(self)
получить трекиBaseList2D.GetFirstCTrack(self)
получить первый трекBaseList2D.InsertTrackSorted(self, track)
вставляет трек и автоматически помещает его в нужное место
BaseList2D.AddUserData(self, datadescription)
Добавляет контейнер пользовательских данных.BaseList2D.GetUserDataContainer(self)
Получает последовательность контейнеров пользовательских данных.BaseList2D.RemoveUserData(self, id)
Удаляет элемент пользовательских данных.BaseList2D.SetUserDataContainer(self, descid, ...)
Вставляет новые данные пользователя с указанным идентификатором.
BaseList2D.GetMain(self)
Переходит на уровень вверх, например, от тега к объекту или от узла Xpresso к тегу, от объекта к документу и т. д.BaseList2D.GetInfo(self)
Возвращает информационные флаги для объекта. Интерпретация зависит от типа объекта.BaseList2D.GetData(self)
Возвращает копию объекта контейнераBaseList2D.GetDataInstance(self)
Возвращает оригинальный объект контейнер. Контейнер жив только до тех пор, пока жив хост-объект.
import c4d
def main():
# Получить активный документ
doc = c4d.documents.GetActiveDocument()
if doc is None:
return
# Получить все объекты в документе
objects = doc.GetObjects()
# Найти сферу и куб
sphere = None
cube = None
for obj in objects:
if obj.CheckType(c4d.Opolygon):
if obj.GetName() == "Сфера":
sphere = obj
elif obj.GetName() == "Куб":
cube = obj
if sphere is not None and cube is not None:
# Снять выделение с куба
cube.DelBit(c4d.BIT_ACTIVE)
# Установить выделение на сферу
sphere.SetBit(c4d.BIT_ACTIVE)
# Обновить окно Cinema 4D
c4d.EventAdd()
# Вызов основной функции
if __name__=='__main__':
main()
def AddLongDataType(obj):
if obj is None: return
bc = c4d.GetCustomDataTypeDefault(c4d.DTYPE_LONG) # Create default container
bc[c4d.DESC_NAME] = "Test" # Rename the entry
element = obj.AddUserData(bc) # Add userdata container
obj[element] = 30 # Assign a value
c4d.EventAdd() # Update
for id, bc in op.GetUserDataContainer():
print (id, bc)
obj.RemoveUserData(1) # все варианты равнозначны
obj.RemoveUserData([c4d.ID_USERDATA, 1])
obj.RemoveUserData(c4d.DescID(c4d.DescLevel(c4d.ID_USERDATA), c4d.DescLevel(1)))
if bl2D.GetInfo() & c4d.OBJECT_MODIFIER:
print " This bl2D is an object modifier"