Esempio n. 1
0
    def test_FlattenTimeCodeWithOffsets(self):
        """Tests that layer offsets are taken into account when flattening
        attribute time samples and defaults of time code value attributes."""

        propName = "a"
        srcAttr = self.stage.GetPrimAtPath("/OffsetTimeCodeTimeSamples") \
                            .GetAttribute(propName)

        if Usd.UsesInverseLayerOffset():
            self.assertEqual(self._GetDefault(srcAttr), Sdf.TimeCode(-10))
            self.assertEqual(self._GetTimeSamples(srcAttr), 
                             { -10: Sdf.TimeCode(90), 0: Sdf.TimeCode(990) })
        else:
            self.assertEqual(self._GetDefault(srcAttr), Sdf.TimeCode(10))
            self.assertEqual(self._GetTimeSamples(srcAttr), 
                             { 10: Sdf.TimeCode(110), 20: Sdf.TimeCode(1010) })

        rootPrimPath = Sdf.Path("/OffsetTimeCodeTimeSamplesRoot")
        dstAttr = srcAttr.FlattenTo(
            self.stage.OverridePrim(rootPrimPath))

        if Usd.UsesInverseLayerOffset():
            self.assertEqual(self._GetDefault(dstAttr), Sdf.TimeCode(-10))
            self.assertEqual(
                self._GetTimeSamples(dstAttr), { -10: Sdf.TimeCode(90), 
                                                 0: Sdf.TimeCode(990) })
            self.assertEqual(
                self._GetDefaultInLayer(
                    self.rootLayer, rootPrimPath.AppendProperty(propName)), 
                Sdf.TimeCode(-10))
            self.assertEqual(
                self._GetTimeSamplesInLayer(
                    self.rootLayer, rootPrimPath.AppendProperty(propName)),
                { -10: Sdf.TimeCode(90), 0: Sdf.TimeCode(990) })
        else:
            self.assertEqual(self._GetDefault(dstAttr), Sdf.TimeCode(10))
            self.assertEqual(
                self._GetTimeSamples(dstAttr), { 10: Sdf.TimeCode(110), 
                                                 20: Sdf.TimeCode(1010) })
            self.assertEqual(
                self._GetDefaultInLayer(
                    self.rootLayer, rootPrimPath.AppendProperty(propName)), 
                Sdf.TimeCode(10))
            self.assertEqual(
                self._GetTimeSamplesInLayer(
                    self.rootLayer, rootPrimPath.AppendProperty(propName)),
                { 10: Sdf.TimeCode(110), 20: Sdf.TimeCode(1010) })

        subPrimPath = Sdf.Path("/OffsetTimeCodeTimeSamplesSublayer")
        with Usd.EditContext(
            self.stage, self.stage.GetEditTargetForLocalLayer(self.subLayer)):
            dstAttr = srcAttr.FlattenTo(
                self.stage.OverridePrim(subPrimPath))

            if Usd.UsesInverseLayerOffset():
                self.assertEqual(self._GetDefault(dstAttr), Sdf.TimeCode(-10))
                self.assertEqual(
                    self._GetTimeSamples(dstAttr), { -10: Sdf.TimeCode(90), 
                                                     0: Sdf.TimeCode(990) })
                self.assertEqual(
                    self._GetDefaultInLayer(
                        self.subLayer, subPrimPath.AppendProperty(propName)), 
                    Sdf.TimeCode(0))
                self.assertEqual(
                    self._GetTimeSamplesInLayer(
                        self.subLayer, subPrimPath.AppendProperty(propName)),
                    { 0: Sdf.TimeCode(100), 10: Sdf.TimeCode(1000) })
            else:
                self.assertEqual(self._GetDefault(dstAttr), Sdf.TimeCode(10))
                self.assertEqual(
                    self._GetTimeSamples(dstAttr), { 10: Sdf.TimeCode(110), 
                                                     20: Sdf.TimeCode(1010) })
                self.assertEqual(
                    self._GetDefaultInLayer(
                        self.subLayer, subPrimPath.AppendProperty(propName)), 
                    Sdf.TimeCode(0))
                self.assertEqual(
                    self._GetTimeSamplesInLayer(
                        self.subLayer, subPrimPath.AppendProperty(propName)),
                    { 0: Sdf.TimeCode(100), 10: Sdf.TimeCode(1000) })
Esempio n. 2
0
    def test_Basic(self):
        src_stage = Usd.Stage.Open('root.usda')
        layer = UsdUtils.FlattenLayerStack(src_stage, tag="test.usda")
        result_stage = Usd.Stage.Open(layer)

        # Confirm that the tag makde it into the display name.
        self.assertTrue('test.usda' in layer.GetDisplayName())

        print '#' * 72
        print 'Flattened layer:'
        print layer.ExportToString()
        print '#' * 72

        # Run the same set of queries against the src and dest stages.
        # They should yield the same results.
        for stage in [src_stage, result_stage]:
            p = stage.GetPrimAtPath('/Sphere')

            # Composition arcs remain intact
            self.assertTrue(p.HasAuthoredReferences())
            self.assertTrue(p.HasAuthoredInherits())
            self.assertTrue(p.HasPayload())
            self.assertTrue(p.HasVariantSets())

            # Classes continue to exist
            self.assertTrue(stage.GetPrimAtPath('/_class_Sphere'))

            # Default in a strong layer wins over timeSamples in weak.
            a = p.GetAttribute('defaultOverTimeSamples')
            self.assertEqual(a.GetResolveInfo().GetSource(),
                             Usd.ResolveInfoSourceDefault)
            a = p.GetAttribute('timeSamplesOverDefault')
            self.assertEqual(a.GetResolveInfo().GetSource(),
                             Usd.ResolveInfoSourceTimeSamples)
            self.assertEqual(a.Get(), 123)  # default
            self.assertEqual(a.Get(1), 1)  # time sample

            # Layer offsets affect time samples
            a = p.GetAttribute('timeSamplesAcrossLayerOffset')
            if Usd.UsesInverseLayerOffset():
                self.assertEqual(a.GetTimeSamples(), [11.0, 20.0])
            else:
                self.assertEqual(a.GetTimeSamples(), [-9.0, 0.0])

            # Layer offsets get folded into reference arcs
            p = stage.GetPrimAtPath('/Sphere/ChildFromReference')
            a = p.GetAttribute('timeSamplesAcrossRef')
            if Usd.UsesInverseLayerOffset():
                self.assertEqual(a.GetTimeSamples(), [11.0, 20.0])
            else:
                self.assertEqual(a.GetTimeSamples(), [-9.0, 0.0])

            # Confirm result of list-editing.
            p = stage.GetPrimAtPath('/ListOpTest')
            r = p.GetRelationship('foo')
            self.assertEqual(r.GetTargets(), [
                Sdf.Path('/Pre_root'),
                Sdf.Path('/Pre_sub'),
                Sdf.Path('/App_sub'),
                Sdf.Path('/App_root')
            ])

            # Confirm children from across various kinds of arcs.
            for childPath in [
                    '/Sphere/ChildFromPayload', '/Sphere/ChildFromReference',
                    '/Sphere/ChildFromNestedVariant'
            ]:
                self.assertTrue(stage.GetPrimAtPath(childPath))

            # Confirm time samples coming from (offset) clips.
            p = stage.GetPrimAtPath('/SphereUsingClip_LegacyForm')
            a = p.GetAttribute('xformOp:translate')
            self.assertEqual(
                a.GetResolveInfo(5).GetSource(),
                Usd.ResolveInfoSourceValueClips)
            p = stage.GetPrimAtPath('/SphereUsingClip')
            a = p.GetAttribute('xformOp:translate')
            self.assertEqual(
                a.GetResolveInfo(5).GetSource(),
                Usd.ResolveInfoSourceValueClips)

        # Confirm relative asset path handling in the output stage.
        p = result_stage.GetPrimAtPath('/Sphere')
        a = p.GetAttribute('relativePath')
        # It should have become an absolute path.
        self.assertTrue(os.path.isabs(a.Get().path))
        # Check arrays of paths.
        a = p.GetAttribute('relativePathVec')
        for path in a.Get():
            self.assertTrue(os.path.isabs(path.path))

        # Confirm Sdf-level result of list-editing.
        p = layer.GetPrimAtPath('/ListOpTest')
        targets = p.relationships['foo'].targetPathList
        self.assertEqual(list(targets.prependedItems),
                         ['/Pre_root', '/Pre_sub'])
        self.assertEqual(list(targets.appendedItems),
                         ['/App_sub', '/App_root'])
        self.assertEqual(list(targets.deletedItems), ['/Del_sub', '/Del_root'])

        # Confirm offsets have been folded into value clips.
        p1 = layer.GetPrimAtPath('/SphereUsingClip_LegacyForm')
        p2 = layer.GetPrimAtPath('/SphereUsingClip')
        if Usd.UsesInverseLayerOffset():
            self.assertEqual(p1.GetInfo('clipActive'),
                             Vt.Vec2dArray(1, [(11, 0)]))
            self.assertEqual(p1.GetInfo('clipTimes'),
                             Vt.Vec2dArray(2, [(11, 1), (20, 10)]))
            self.assertEqual(
                p2.GetInfo('clips')['default']['active'],
                Vt.Vec2dArray(1, [(11, 0)]))
            self.assertEqual(
                p2.GetInfo('clips')['default']['times'],
                Vt.Vec2dArray(2, [(11, 1), (20, 10)]))
        else:
            self.assertEqual(p1.GetInfo('clipActive'),
                             Vt.Vec2dArray(1, [(-9.0, 0.0)]))
            self.assertEqual(p1.GetInfo('clipTimes'),
                             Vt.Vec2dArray(2, [(-9.0, 1), (0.0, 10)]))
            self.assertEqual(
                p2.GetInfo('clips')['default']['active'],
                Vt.Vec2dArray(1, [(-9.0, 0)]))
            self.assertEqual(
                p2.GetInfo('clips')['default']['times'],
                Vt.Vec2dArray(2, [(-9.0, 1), (0.0, 10)]))

        # Confirm nested variant sets still exist
        self.assertTrue(
            layer.GetObjectAtPath(
                '/Sphere{vset_1=default}{vset_2=default}ChildFromNestedVariant'
            ))
    def test_FlattenWithOffsets(self):
        """Tests that layer offsets are taken into account when flattening
        attribute time samples."""
        srcAttr = self.stage.GetPrimAtPath("/OffsetTimeSamples") \
                            .GetAttribute("a")

        if Usd.UsesInverseLayerOffset():
            self.assertEqual(self._GetTimeSamples(srcAttr), {
                -10: 100,
                0: 1000
            })
        else:
            self.assertEqual(self._GetTimeSamples(srcAttr), {
                10: 100,
                20: 1000
            })

        dstAttr = srcAttr.FlattenTo(
            self.stage.OverridePrim("/OffsetTimeSamplesRoot"))

        if Usd.UsesInverseLayerOffset():
            self.assertEqual(self._GetTimeSamples(dstAttr), {
                -10: 100,
                0: 1000
            })
            self.assertEqual(
                self._GetTimeSamplesInLayer(self.rootLayer,
                                            "/OffsetTimeSamplesRoot.a"), {
                                                -10: 100,
                                                0: 1000
                                            })
        else:
            self.assertEqual(self._GetTimeSamples(dstAttr), {
                10: 100,
                20: 1000
            })
            self.assertEqual(
                self._GetTimeSamplesInLayer(self.rootLayer,
                                            "/OffsetTimeSamplesRoot.a"), {
                                                10: 100,
                                                20: 1000
                                            })

        with Usd.EditContext(
                self.stage,
                self.stage.GetEditTargetForLocalLayer(self.subLayer)):
            dstAttr = srcAttr.FlattenTo(
                self.stage.OverridePrim("/OffsetTimeSamplesSublayer"))

            if Usd.UsesInverseLayerOffset():
                self.assertEqual(self._GetTimeSamples(dstAttr), {
                    -10: 100,
                    0: 1000
                })
                self.assertEqual(
                    self._GetTimeSamplesInLayer(
                        self.subLayer, "/OffsetTimeSamplesSublayer.a"), {
                            0: 100,
                            10: 1000
                        })
            else:
                self.assertEqual(self._GetTimeSamples(dstAttr), {
                    10: 100,
                    20: 1000
                })
                self.assertEqual(
                    self._GetTimeSamplesInLayer(
                        self.subLayer, "/OffsetTimeSamplesSublayer.a"), {
                            0: 100,
                            10: 1000
                        })