Files
UnrealEngine/Engine/Source/ThirdParty/Alembic/alembic-1.8.7/python/PyAlembic/Tests/PyAbcEcho.py
2025-05-18 13:04:45 +08:00

156 lines
5.3 KiB
Python

#-******************************************************************************
#
# Copyright (c) 2012,
# Sony Pictures Imageworks Inc. and
# Industrial Light & Magic, a division of Lucasfilm Entertainment Company Ltd.
#
# All rights reserved.
#
# Redistribution and use in source and binary forms, with or without
# modification, are permitted provided that the following conditions are
# met:
# * Redistributions of source code must retain the above copyright
# notice, this list of conditions and the following disclaimer.
# * Redistributions in binary form must reproduce the above
# copyright notice, this list of conditions and the following disclaimer
# in the documentation and/or other materials provided with the
# distribution.
# * Neither the name of Sony Pictures Imageworks, nor
# Industrial Light & Magic, nor the names of their contributors may be used
# to endorse or promote products derived from this software without specific
# prior written permission.
#
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
#
#-******************************************************************************
import sys
from alembic.AbcCoreAbstract import *
from alembic.Abc import *
from alembic.Util import *
def visitSmallArraySamples( iProp, iIndent ):
indent = " " * iIndent
for i, s in enumerate( iProp.arraySamples ):
print ("%ssample %d:" % ( indent, i ))
if s is None:
print (indent, "********** Got nothing **********")
else:
print (indent,)
for j in s:
print (j,)
print
def visitScalarSamples( iProp, iIndent ):
indent = " " * iIndent
for i, s in enumerate( iProp.scalarSamples ):
print ("%ssample %d:" % ( indent, i ))
if s is None:
print (indent, "********** Got nothing **********")
else:
print ("%s%s" % ( indent, s ))
def visitArraySamples( iProp, iIndent ):
indent = " " * iIndent
for i, s in enumerate( iProp.samples ):
print ("%ssample %d:" % ( indent, i ))
if s is None:
print (indent, "********** Got nothing **********")
else:
print (indent,)
for j in s:
print (j,)
print
def visitCompoundProperty( iProp, iIndent ):
indent = " " * iIndent
ptype = "CompoundProperty"
name = "name=%s" % iProp.getName()
interp = "schema=%s" % iProp.getMetaData().get( "schema" )
print ("%s%s %s; %s" % ( indent, ptype, name, interp ))
visitProperties( iProp, iIndent+2 )
def visitSimpleProperty( iProp, iIndent ):
indent = " " * iIndent
ptype = "ScalarProperty" if iProp.isScalar() else "ArrayProperty"
name = "name=%s" % iProp.getName()
md = "interpretation=%s" % iProp.getMetaData().get( "interpretation" )
dtype = "datatype=%s" % iProp.getDataType()
numsamps = "numsamps=%s" %iProp.getNumSamples()
print ("%s%s %s; %s; %s; %s" % ( indent, ptype, name, md, dtype, numsamps ))
if iProp.isScalar():
if iProp.getDataType().getExtent() == 1:
visitScalarSamples( iProp, iIndent+2 )
elif len( iProp.getMetaData().get( "interpretation" ) ) > 0:
visitScalarSamples( iProp, iIndent+2 )
else:
visitSmallArraySamples( iProp, iIndent+2 )
else:
visitArraySamples( iProp, iIndent+2 )
def visitProperties( iParent, iIndent ):
for header in iParent.propertyheaders:
prop = iParent.getProperty( header.getName() )
if header.isCompound():
visitCompoundProperty( prop, iIndent+2 )
elif header.isScalar() or header.isArray():
visitSimpleProperty( prop, iIndent+2 )
def visitObject( iObj, iIndent = 0 ):
path = iObj;
indent = " " * iIndent
ptype = "Object"
name = "name=%s" % path
if path != "/":
iIndent += 2
print ("%s%s %s" % ( indent, ptype, name ))
visitProperties( iObj.getProperties(), iIndent )
for child in iObj.children:
visitObject( child, iIndent )
def visitArchive( iArg ):
iArchive = IArchive( iArg )
print ("AbcEcho for %s" % GetLibraryVersion())
info = GetArchiveInfo ( iArchive )
if len( info['appName'] ) > 0:
print (" file written by : %s" % info['appName'])
print (" using Alembic : %s" % info['libraryVersionString'])
print (" written on : %s" % info['whenWritten'])
print (" user description by: %s" % info['userDescription'])
print
else:
print (iArg)
print (" (file doesn't have any ArchiveInfo)")
print
visitObject( iArchive.getTop() )
map( visitArchive, [ a for a in sys.argv[1:] ] )