Alembic Python Вопрос: Как получить значение из arbGeomParams?

Наверное, это простой вопрос. Я новичок в перегонном питоне, а не хардкорный программист, я пытаюсь получить строковое значение атрибута перегонного куба, добавленного в кэш-память сфера из майя. Я начал со скрипта, который нашел здесь (спасибо BigRoy!)

https://gist.github.com/BigRoy/eea07a0fb60437eb5cecd9fc6c4fd324

Моя урезанная версия теперь выглядит так:

      import alembic

def _print_properties(property, depth=1):
    
    # Property name
    print ("\t" * depth) + property.getName()
    
    # Metadata
    metadata = property.getMetaData()
    if metadata.size():
        # Can hold things like "sourceName" for UVs
        print ("\t" * depth) + "      - metadata -> %s" % metadata      
    
    print("")
    
    # CompoundProperty print children
    if isinstance(property, alembic.Abc.ICompoundProperty):
        num_sub_properties = property.getNumProperties()

        for i in range(num_sub_properties):
            sub_property = property.getProperty(i)
            _print_properties(sub_property, depth+1)    

def print_alembic_shape_attributes(filename):

    filename = str(filename)    # ensure str
    archive = alembic.Abc.IArchive(filename)
    root = archive.getTop()

    iterator = list(root.children)

    for obj in iterator:

        md = obj.getMetaData()
        if alembic.AbcGeom.IPolyMesh.matches(md):
            
            polymesh = alembic.AbcGeom.IPolyMesh(obj, alembic.Abc.WrapExistingFlag.kWrapExisting)

            schema = polymesh.getSchema()
            print obj
            meshSamp = schema.getValue
            
            # Arbitrary Geometry Parms
            arbgeomparms = schema.getArbGeomParams()

            if arbgeomparms.valid():
                # Should always be valid
                _print_properties(arbgeomparms)               
            
            print("")

        # include children for coming iterations
        iterator.extend(obj.children)
    

path = "test4.abc"
print_alembic_shape_attributes(path)

Вывод выглядит следующим образом:

      /pSphere1/pSphereShape1
    .arbGeomParams
          - metadata -> .arbGeomParams

        myMaterialTag
              - metadata -> arrayExtent=1;isGeomParam=true;podExtent=1;podName=string

Итак, скрипт работает — он находит мой пользовательский атрибут «myMaterialTag». Мой вопрос в том, как заставить его распечатать значение этого атрибута, которое должно читаться как «тест».

Что мне не хватает?

Заранее спасибо!

0 ответов

Другие вопросы по тегам