BaseList2D
Каждый экземпляр 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"
Last updated
Was this helpful?