156 lines
5.3 KiB
Python
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:] ] )
|