1#-****************************************************************************** 2# 3# Copyright (c) 2012, 4# Sony Pictures Imageworks Inc. and 5# Industrial Light & Magic, a division of Lucasfilm Entertainment Company Ltd. 6# 7# All rights reserved. 8# 9# Redistribution and use in source and binary forms, with or without 10# modification, are permitted provided that the following conditions are 11# met: 12# * Redistributions of source code must retain the above copyright 13# notice, this list of conditions and the following disclaimer. 14# * Redistributions in binary form must reproduce the above 15# copyright notice, this list of conditions and the following disclaimer 16# in the documentation and/or other materials provided with the 17# distribution. 18# * Neither the name of Sony Pictures Imageworks, nor 19# Industrial Light & Magic, nor the names of their contributors may be used 20# to endorse or promote products derived from this software without specific 21# prior written permission. 22# 23# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 24# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 25# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 26# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 27# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 28# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 29# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 30# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 31# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 32# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 33# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 34# 35#-****************************************************************************** 36 37import unittest 38from imath import * 39from alembic.Abc import * 40from alembic.AbcGeom import * 41 42class PointsTest(unittest.TestCase): 43 def testPointsExport(self): 44 """write out points archive""" 45 46 archive = OArchive("particlesOut2.abc") 47 topObj = archive.getTop() 48 ptsObj = OPoints(topObj, "somePoints") 49 50 positions = V3fArray(100) 51 velocities = V3fArray(100) 52 ids = IntArray(100) 53 widths = FloatArray(100) 54 55 for i in range(100): 56 widthSamp = OFloatGeomParamSample() 57 widthSamp.setScope(GeometryScope.kVertexScope) 58 widthSamp.setVals(widths) 59 60 psamp = OPointsSchemaSample() 61 psamp.setPositions(positions) 62 psamp.setIds(ids) 63 psamp.setVelocities(velocities) 64 psamp.setWidths(widthSamp) 65 ptsObj.getSchema().set(psamp) 66 67 positions[i] = V3f(i, i, i) 68 velocities[i] = V3f(100.0-i, 0, 0) 69 ids[i] = i * 10 70 widths[i] = 0.1 + i * 0.05 71 72 def testPointsImport(self): 73 """read in points archive""" 74 75 archive = IArchive("particlesOut2.abc") 76 topObj = archive.getTop() 77 points = IPoints(topObj, "somePoints") 78 pointsSchema = points.getSchema() 79 80 self.assertTrue(pointsSchema.valid()) 81 82 widthProp = pointsSchema.getWidthsParam() 83 84 self.assertEqual(widthProp.getScope(), GeometryScope.kVertexScope) 85 86 for i in range(100): 87 pointsSamp = pointsSchema.getValue(ISampleSelector(i)) 88 widthSamp = widthProp.getExpandedValue(ISampleSelector(i)) 89 90 for j in range(i): 91 self.assertEqual(pointsSamp.getPositions()[j], V3f(j, j, j)) 92 self.assertEqual(pointsSamp.getVelocities()[j], V3f(100-j, 0, 0)) 93 self.assertEqual(pointsSamp.getIds()[j], j * 10) 94 self.assertAlmostEqual(widthSamp.getVals()[j], 0.1 + j * 0.05, 6) 95 96