def test_MatchDefault(self): s = Usd.Stage.CreateInMemory() from pxr import UsdGeom sphere = UsdGeom.Sphere.Define(s, Sdf.Path("/Sphere")); radius = sphere.CreateRadiusAttr(); attrValueWriter = UsdUtils.SparseAttrValueWriter(radius, defaultValue=1.0); # Default value isn't authored into scene description since it matches # the fallback value of radius. self.assertFalse(radius.HasAuthoredValueOpinion()) attrValueWriter.SetTimeSample(10.0, 1.0) attrValueWriter.SetTimeSample(10.0, 2.0) attrValueWriter.SetTimeSample(10.0, 3.0) attrValueWriter.SetTimeSample(20.0, 4.0) self.assertEqual(radius.GetTimeSamples(), [1.0, 3.0, 4.0])
def test_ErrorCases(self): s = Usd.Stage.CreateInMemory() scope = UsdGeom.Scope.Define(s, "/Scope") attr1 = scope.GetPrim().CreateAttribute("attr1", Sdf.ValueTypeNames.Float) self.assertFalse(attr1.HasAuthoredValueOpinion()) attrValueWriter = UsdUtils.SparseAttrValueWriter(attr1) # No default value was specified. So no authored value yet. self.assertFalse(attr1.HasAuthoredValueOpinion()) attrValueWriter.SetTimeSample(10.0, time=10.0) # Authoring an earlier time-sample than the previous one results in # a coding error also. # Calling SetTimeSample with time=default raises a coding error. with self.assertRaises(Tf.ErrorException): attrValueWriter.SetTimeSample(10.0, Usd.TimeCode.Default()) with self.assertRaises(Tf.ErrorException): attrValueWriter.SetTimeSample(20.0, time=5.0)
def TestAttrOfType(self, typeName, arrayTypeName, defaultValue, epsilon): s = Usd.Stage.CreateInMemory() scope = UsdGeom.Scope.Define(s, "/Scope") # Test scalar valued attribute. attr = scope.GetPrim().CreateAttribute("attr", typeName) self.assertFalse(attr.HasAuthoredValueOpinion()) valueWriter = UsdUtils.SparseAttrValueWriter(attr, defaultValue=defaultValue) self.assertTrue(attr.HasAuthoredValueOpinion()) valueType = type(defaultValue) valueWriter.SetTimeSample(value=valueType(10.), time=0.0) valueWriter.SetTimeSample(value=valueType(10.), time=0.5) valueWriter.SetTimeSample(value=valueType(10.), time=1.0) valueWriter.SetTimeSample(value=valueType(20.), time=2.0) valueWriter.SetTimeSample(value=valueType(20.), time=3.0) valueWriter.SetTimeSample(value=valueType(20.), time=4.0) valueWriter.SetTimeSample(value=valueType(30.), time=5.0) valueWriter.SetTimeSample(value=valueType(30. + (epsilon / 2)), time=6.0) valueWriter.SetTimeSample(value=valueType(30.), time=7.0) valueWriter.SetTimeSample(value=valueType(30. + (epsilon * 2)), time=8.0) expectedTimeSamples = [1.0, 2.0, 4.0, 5.0, 7.0, 8.0] if \ defaultValue == valueType(10.0) else \ [0.0, 1.0, 2.0, 4.0, 5.0, 7.0, 8.0] self.assertEqual(attr.GetTimeSamples(), expectedTimeSamples) # Test array valued attribute. arrayAttr = scope.GetPrim().CreateAttribute("arrayAttr", arrayTypeName) self.assertFalse(arrayAttr.HasAuthoredValueOpinion()) arrayValueWriter = UsdUtils.SparseAttrValueWriter(arrayAttr, defaultValue=[defaultValue, defaultValue]) self.assertTrue(arrayAttr.HasAuthoredValueOpinion()) arrayValueWriter.SetTimeSample(value=[valueType(10.), valueType(10.)], time=0.0) arrayValueWriter.SetTimeSample(value=[valueType(10.), valueType(10.)], time=0.5) arrayValueWriter.SetTimeSample(value=[valueType(10.), valueType(10.)], time=1.0) arrayValueWriter.SetTimeSample(value=[valueType(20.), valueType(10.)], time=2.0) arrayValueWriter.SetTimeSample(value=[valueType(20.), valueType(10.)], time=3.0) arrayValueWriter.SetTimeSample(value=[valueType(20.), valueType(10.)], time=4.0) arrayValueWriter.SetTimeSample(value=[valueType(30.), valueType(30.)], time=5.0) arrayValueWriter.SetTimeSample(value=[valueType(30.), valueType(30. + (epsilon / 2))], time=6.0) arrayValueWriter.SetTimeSample(value=[valueType(30.), valueType(30.)], time=7.0) arrayValueWriter.SetTimeSample(value=[valueType(30. + (epsilon * 2)), valueType(30.)], time=8.0) expectedTimeSamples = [1.0, 2.0, 4.0, 5.0, 7.0, 8.0] if \ defaultValue == valueType(10.0) else \ [0.0, 1.0, 2.0, 4.0, 5.0, 7.0, 8.0] self.assertEqual(attr.GetTimeSamples(), expectedTimeSamples)
def TestQuats(self, typeName, arrayTypeName, defaultValue, epsilon): s = Usd.Stage.CreateInMemory() scope = UsdGeom.Scope.Define(s, "/Scope") # Test scalar valued quat attribute. attr = scope.GetPrim().CreateAttribute("quat", typeName) self.assertFalse(attr.HasAuthoredValueOpinion()) valueWriter = UsdUtils.SparseAttrValueWriter(attr, defaultValue=defaultValue) self.assertTrue(attr.HasAuthoredValueOpinion()) valueType = type(defaultValue) realType = type(defaultValue.GetReal()) imaginaryType = type(defaultValue.GetImaginary()) valueWriter.SetTimeSample(value=valueType(realType(10.), imaginaryType(10.0)), time=1.0) valueWriter.SetTimeSample(value=valueType(realType(20.), imaginaryType(20.0)), time=2.0) valueWriter.SetTimeSample(value=valueType(realType(20.), imaginaryType(20.0)), time=3.0) valueWriter.SetTimeSample(value=valueType(realType(20.), imaginaryType(20.0)), time=4.0) valueWriter.SetTimeSample(value=valueType(realType(30.), imaginaryType(30.0)), time=5.0) valueWriter.SetTimeSample(value=valueType(realType(30. + epsilon / 2), imaginaryType(30.0 + epsilon / 2)), time=6.0) valueWriter.SetTimeSample(value=valueType(realType(30.), imaginaryType(30.0)), time=7.0) valueWriter.SetTimeSample(value=valueType(realType(30. + epsilon * 2), imaginaryType(30.0 + epsilon * 2)), time=8.0) self.assertEqual(attr.GetTimeSamples(), [1.0, 2.0, 4.0, 5.0, 7.0, 8.0]) # Test array valued quats. arrayAttr = scope.GetPrim().CreateAttribute("arrayQuat", arrayTypeName) self.assertFalse(arrayAttr.HasAuthoredValueOpinion()) arrayValueWriter = UsdUtils.SparseAttrValueWriter(arrayAttr, defaultValue=[defaultValue, defaultValue]) self.assertTrue(arrayAttr.HasAuthoredValueOpinion()) arrayValueWriter.SetTimeSample( value=[valueType(realType(10.), imaginaryType(10.0)), valueType(realType(10.), imaginaryType(10.0))], time=1.0) arrayValueWriter.SetTimeSample( value=[valueType(realType(20.), imaginaryType(10.0)), valueType(realType(10.), imaginaryType(20.0))], time=2.0) arrayValueWriter.SetTimeSample( value=[valueType(realType(20.), imaginaryType(10.0)), valueType(realType(10.), imaginaryType(20.0))], time=3.0) arrayValueWriter.SetTimeSample( value=[valueType(realType(20.), imaginaryType(10.0)), valueType(realType(10.), imaginaryType(20.0))], time=4.0) arrayValueWriter.SetTimeSample( value=[valueType(realType(30.), imaginaryType(30.0)), valueType(realType(30.), imaginaryType(30.0))], time=5.0) arrayValueWriter.SetTimeSample( value=[valueType(realType(30. + epsilon/2), imaginaryType(30.0 + epsilon/2)), valueType(realType(30.+ epsilon/2), imaginaryType(30.0 + epsilon/2))], time=6.0) arrayValueWriter.SetTimeSample( value=[valueType(realType(30.), imaginaryType(30.0)), valueType(realType(30.), imaginaryType(30.0))], time=7.0) arrayValueWriter.SetTimeSample( value=[valueType(realType(30.), imaginaryType(30.0 + epsilon*2)), valueType(realType(30.+ epsilon*2), imaginaryType(30.0))], time=8.0) expectedTimeSamples = [1.0, 2.0, 4.0, 5.0, 7.0, 8.0] self.assertEqual(attr.GetTimeSamples(), expectedTimeSamples)