Skip to content

Latest commit

 

History

History
95 lines (62 loc) · 5 KB

BaseContainer.md

File metadata and controls

95 lines (62 loc) · 5 KB

Контейнер — это коллекция отдельных значений. Каждое значение имеет свой идентификатор и тип. Контейнер также может содержать любое количество дочерних контейнеров. Нет никакой гарантии, что значение находится в контейнере. По возможности используйте значения по умолчанию при доступе к значениям.

После того как вы установили значение контейнера с использованием одного типа, вы не должны ни пытаться получить к нему доступ с использованием другого типа, ни перезаписывать его значением другого типа!

Оригинал или копию контейнера можно получить из объекта c4d.BaseList2D с помощью методов BaseList2D.GetDataInstance(self) и BaseList2D.GetData(self) соответсвенно:

import c4d

def main():
    shader = c4d.BaseShader(c4d.Xfusion)

    bc = shader.GetDataInstance() // оригинал контейнера
    bc.SetInt32(c4d.SLA_FUSION_MODE,c4d.SLA_FUSION_MODE_NORMAL)
    bc.SetFloat(c4d.SLA_FUSION_BLEND,0.1)
    bc.SetBool(c4d.SLA_FUSION_USE_MASK,True)
    bc.SetBool(c4d.SLA_FUSION_INVERT_MASK,True)
    bc.SetBool(c4d.SLA_FUSION_INVERT_OUTPUT,True)

if __name__=='__main__':
    main()

Следующие методы иллюстрируют какие типы данных могут быть получены из контейнера: BaseContainer.GetData(self, id) Возвращает данные элемента по идентификатору.

BaseContainer.GetDataPointer(self, id) Получает указатель для прямого доступа к данным.

BaseContainer.GetBool(self, id[, preset]) Возвращает логическое значение с указанным идентификатором или заданное значение, если оно не существует.

BaseContainer.GetInt32(self, id[, preset]) .. целое ..

BaseContainer.GetInt64(self, id[, preset]) .. целое ..

BaseContainer.GetFloat(self, id[, preset]) .. десятичное ..

BaseContainer.GetVector(self, id[, preset]) .. вектор ..

BaseContainer.GetMatrix(self, id[, preset]) .. матрицу ..

BaseContainer.GetString(self, id[, preset]) .. строковое ..

BaseContainer.GetFilename(self, id[, preset]) .. строковое (путь к файлу) ..

BaseContainer.GetUuid(self, id, preset) .. UUID ..

BaseContainer.GetTime(self, id[, preset]) .. c4d.BaseTime ..

BaseContainer.GetContainer(self, id) Возвращает копию подконтейнера с указанным идентификатором или пустой контейнер, если он не существует.

BaseContainer.GetContainerInstance(self, id) живой подконтейнер или пустой контейнер, если он не существует

BaseContainer.GetLink(self, id[, doc, ...]) возвращает связанный объект (c4d.BaseList2D)

BaseContainer.GetObjectLink(self, id[, doc]) возвращает связанный объект (c4d.BaseObject)

BaseContainer.GetMaterialLink(self, id[, doc]) возвращает связанный материал

BaseContainer.GetCustomDataType(self, id) Возвращает копию пользовательского типа данных или None, если не существует.

Помимо методов получения свойств, существуют аналогичные методы для установки свойств, например:

BaseContainer.SetBool(self, id, b) устанавливает логическое свойство

Примеры кода:

import c4d

bc = c4d.BaseContainer() # создаем пустой контейнер
bc[1000] = "hello" # заполняем данными
bc[2000] = "world"

# выведем текушее содержимое
print ("Original:")
for dataid, data in bc:
    print (dataid, data)
# 1000 hello
# 2000 world

dataptr = bc.GetDataPointer(1000) # получим указатель
bc.InsDataAfter(3000, "beautiful", dataptr) # добавим новые данные после указателя

# выведем новое содержимое
print ("Changed:")
for dataid, data in bc:
    print (dataid, data)
# 1000 hello
# 3000 beautiful
# 2000 world