(UsdLoader) Fix coverity issue - Divide by zero 65/324265/1
authorEunki, Hong <eunkiki.hong@samsung.com>
Thu, 15 May 2025 01:52:16 +0000 (10:52 +0900)
committerEunki, Hong <eunkiki.hong@samsung.com>
Thu, 15 May 2025 02:19:48 +0000 (11:19 +0900)
FPS value or duration value could be zero logically. We should guard it.

Change-Id: Ifdc729f3ade55dbc03dc7d6a0cff9df849dc45de
Signed-off-by: Eunki, Hong <eunkiki.hong@samsung.com>
automated-tests/resources/usd/BoxAnimationZeroFPS.usda [new file with mode: 0644]
automated-tests/src/dali-usd-loader/utc-Dali-UsdLoader.cpp
dali-usd-loader/internal/usd-loader-impl.cpp

diff --git a/automated-tests/resources/usd/BoxAnimationZeroFPS.usda b/automated-tests/resources/usd/BoxAnimationZeroFPS.usda
new file mode 100644 (file)
index 0000000..3db9c0e
--- /dev/null
@@ -0,0 +1,275 @@
+#usda 1.0
+(
+    defaultPrim = "box_animation"
+    endTimeCode = 120
+    framesPerSecond = 0.0000000001
+    metersPerUnit = 1
+    startTimeCode = 1
+    timeCodesPerSecond = 24
+    upAxis = "Y"
+)
+
+def Xform "box_animation" (
+    kind = "component"
+)
+{
+    matrix4d xformOp:transform:transform2.timeSamples = {
+        1: ( (1, 0, 0, 0), (0, 1, 0, 0), (0, 0, 1, 0), (0, 0, 0, 1) ),
+        2: ( (1.0000000000000002, 0, 0, 0), (0, 1.0000000000000002, 0, 0), (0, 0, 1.0000000000000002, 0), (0, 0.005506698446617901, 0, 1) ),
+        3: ( (1.0000000000000002, 0, 0, 0), (0, 1.0000000000000002, 0, 0), (0, 0, 1.0000000000000002, 0), (0, 0.021369277554039615, 0, 1) ),
+        4: ( (1, 0, 0, 0), (0, 1, 0, 0), (0, 0, 1, 0), (0, 0.046601462973617155, 0, 1) ),
+        5: ( (1, 0, 0, 0), (0, 1, 0, 0), (0, 0, 1, 0), (0, 0.08021698035670255, 0, 1) ),
+        6: ( (0.9999999999999998, 0, 0, 0), (0, 0.9999999999999998, 0, 0), (0, 0, 0.9999999999999998, 0), (0, 0.12122955535464783, 0, 1) ),
+        7: ( (0.9999999999999998, 0, 0, 0), (0, 0.9999999999999998, 0, 0), (0, 0, 0.9999999999999998, 0), (0, 0.16865291361880497, 0, 1) ),
+        8: ( (1, 0, 0, 0), (0, 1, 0, 0), (0, 0, 1, 0), (0, 0.22150078080052604, 0, 1) ),
+        9: ( (0.9999999999999999, 0, 0, 0), (0, 0.9999999999999999, 0, 0), (0, 0, 0.9999999999999999, 0), (0, 0.27878688255116296, 0, 1) ),
+        10: ( (1.0000000000000002, 0, 0, 0), (0, 1.0000000000000002, 0, 0), (0, 0, 1.0000000000000002, 0), (0, 0.33952494452206794, 0, 1) ),
+        11: ( (1, 0, 0, 0), (0, 1, 0, 0), (0, 0, 1, 0), (0, 0.40272869236459274, 0, 1) ),
+        12: ( (1, 0, 0, 0), (0, 1, 0, 0), (0, 0, 1, 0), (0, 0.46741185173008964, 0, 1) ),
+        13: ( (1, 0, 0, 0), (0, 1, 0, 0), (0, 0, 1, 0), (0, 0.5325881482699104, 0, 1) ),
+        14: ( (1, 0, 0, 0), (0, 1, 0, 0), (0, 0, 1, 0), (0, 0.5972713076354073, 0, 1) ),
+        15: ( (1, 0, 0, 0), (0, 1, 0, 0), (0, 0, 1, 0), (0, 0.6604750554779322, 0, 1) ),
+        16: ( (1, 0, 0, 0), (0, 1, 0, 0), (0, 0, 1, 0), (0, 0.721213117448837, 0, 1) ),
+        17: ( (1, 0, 0, 0), (0, 1, 0, 0), (0, 0, 1, 0), (0, 0.778499219199474, 0, 1) ),
+        18: ( (1, 0, 0, 0), (0, 1, 0, 0), (0, 0, 1, 0), (0, 0.8313470863811951, 0, 1) ),
+        19: ( (1, 0, 0, 0), (0, 1, 0, 0), (0, 0, 1, 0), (0, 0.8787704446453523, 0, 1) ),
+        20: ( (1, 0, 0, 0), (0, 1, 0, 0), (0, 0, 1, 0), (0, 0.9197830196432975, 0, 1) ),
+        21: ( (1, 0, 0, 0), (0, 1, 0, 0), (0, 0, 1, 0), (0, 0.9533985370263829, 0, 1) ),
+        22: ( (1, 0, 0, 0), (0, 1, 0, 0), (0, 0, 1, 0), (0, 0.9786307224459604, 0, 1) ),
+        23: ( (1, 0, 0, 0), (0, 1, 0, 0), (0, 0, 1, 0), (0, 0.9944933015533821, 0, 1) ),
+        24: ( (1, 0, 0, 0), (0, 1, 0, 0), (0, 0, 1, 0), (0, 1, 0, 1) ),
+        25: ( (0.9998734712490605, 0, -0.01590727796811169, 0), (0, 1.0000000000000002, 0, 0), (0.01590727796811169, 0, 0.9998734712490605, 0), (0, 1.0000000000000002, 0, 1) ),
+        26: ( (0.9980901387433863, 0, -0.06177438743692798, 0), (0, 0.9999999999999999, 0, 0), (0.06177438743692798, 0, 0.9980901387433863, 0), (0, 0.9999999999999999, 0, 1) ),
+        27: ( (0.9909026354277799, 0, -0.13458070850712603, 0), (0, 0.9999999999999999, 0, 0), (0.13458070850712603, 0, 0.9909026354277799, 0), (0, 0.9999999999999999, 0, 1) ),
+        28: ( (0.973044870579824, 0, -0.23061587074244036, 0), (0, 1.0000000000000002, 0, 0), (0.23061587074244036, 0, 0.973044870579824, 0), (0, 1.0000000000000002, 0, 1) ),
+        29: ( (0.938599698806772, 0, -0.3450081236722355, 0), (0, 0.9999999999999998, 0, 0), (0.3450081236722355, 0, 0.938599698806772, 0), (0, 0.9999999999999998, 0, 1) ),
+        30: ( (0.8819212643483549, 0, -0.4713967368259976, 0), (0, 0.9999999999999999, 0, 0), (0.4713967368259976, 0, 0.8819212643483549, 0), (0, 0.9999999999999999, 0, 1) ),
+        31: ( (0.7985808002183098, 0, -0.6018876186819961, 0), (0, 1, 0, 0), (0.6018876186819961, 0, 0.7985808002183098, 0), (0, 1, 0, 1) ),
+        32: ( (0.6862416378687328, 0, -0.727373641573049, 0), (0, 0.9999999999999997, 0, 0), (0.727373641573049, 0, 0.6862416378687328, 0), (0, 0.9999999999999997, 0, 1) ),
+        33: ( (0.545324988422046, 0, -0.838224705554838, 0), (0, 0.9999999999999998, 0, 0), (0.838224705554838, 0, 0.545324988422046, 0), (0, 0.9999999999999998, 0, 1) ),
+        34: ( (0.3793215892171629, 0, -0.9252648982609069, 0), (0, 1.0000000000000002, 0, 0), (0.9252648982609069, 0, 0.3793215892171629, 0), (0, 1.0000000000000002, 0, 1) ),
+        35: ( (0.1946445223908753, 0, -0.9808738501475242, 0), (0, 0.9999999999999998, 0, 0), (0.9808738501475242, 0, 0.1946445223908753, 0), (0, 0.9999999999999998, 0, 1) ),
+        36: ( (-3.8285686989269484e-16, 0, -0.9999999999999998, 0), (0, 0.9999999999999998, 0, 0), (0.9999999999999998, 0, -3.8285686989269484e-16, 0), (0, 0.9999999999999998, 0, 1) ),
+        37: ( (-0.19464452239087726, 0, -0.9808738501475242, 0), (0, 1.0000000000000002, 0, 0), (0.9808738501475242, 0, -0.19464452239087726, 0), (0, 1.0000000000000002, 0, 1) ),
+        38: ( (-0.3793215892171644, 0, -0.9252648982609057, 0), (0, 0.9999999999999998, 0, 0), (0.9252648982609057, 0, -0.3793215892171644, 0), (0, 0.9999999999999998, 0, 1) ),
+        39: ( (-0.5453249884220471, 0, -0.8382247055548373, 0), (0, 0.9999999999999998, 0, 0), (0.8382247055548373, 0, -0.5453249884220471, 0), (0, 0.9999999999999998, 0, 1) ),
+        40: ( (-0.6862416378687345, 0, -0.7273736415730481, 0), (0, 1.0000000000000002, 0, 0), (0.7273736415730481, 0, -0.6862416378687345, 0), (0, 1.0000000000000002, 0, 1) ),
+        41: ( (-0.7985808002183107, 0, -0.6018876186819947, 0), (0, 0.9999999999999999, 0, 0), (0.6018876186819947, 0, -0.7985808002183107, 0), (0, 0.9999999999999999, 0, 1) ),
+        42: ( (-0.8819212643483554, 0, -0.47139673682599653, 0), (0, 0.9999999999999998, 0, 0), (0.47139673682599653, 0, -0.8819212643483554, 0), (0, 0.9999999999999998, 0, 1) ),
+        43: ( (-0.9385996988067727, 0, -0.3450081236722346, 0), (0, 1.0000000000000002, 0, 0), (0.3450081236722346, 0, -0.9385996988067727, 0), (0, 1.0000000000000002, 0, 1) ),
+        44: ( (-0.9730448705798239, 0, -0.23061587074243894, 0), (0, 0.9999999999999998, 0, 0), (0.23061587074243894, 0, -0.9730448705798239, 0), (0, 0.9999999999999998, 0, 1) ),
+        45: ( (-0.99090263542778, 0, -0.13458070850712536, 0), (0, 0.9999999999999999, 0, 0), (0.13458070850712536, 0, -0.99090263542778, 0), (0, 0.9999999999999999, 0, 1) ),
+        46: ( (-0.9980901387433865, 0, -0.06177438743692742, 0), (0, 1, 0, 0), (0.06177438743692742, 0, -0.9980901387433865, 0), (0, 1, 0, 1) ),
+        47: ( (-0.99987347124906, 0, -0.015907277968111398, 0), (0, 0.9999999999999998, 0, 0), (0.015907277968111398, 0, -0.99987347124906, 0), (0, 0.9999999999999998, 0, 1) ),
+        48: ( (-0.9999999999999998, 0, 0, 0), (0, 0.9999999999999998, 0, 0), (0, 0, -0.9999999999999998, 0), (0, 0.9999999999999998, 0, 1) ),
+        49: ( (-0.9999683673119516, -0.007953890586995584, 0, 0), (-0.007953890586995584, 0.9999683673119516, 0, 0), (0, 0, -1, 0), (0, 1, 0, 1) ),
+        50: ( (-0.9995224206448263, -0.030901951852703308, 0, 0), (-0.030901951852703308, 0.9995224206448263, 0, 0), (0, 0, -1, 0), (0, 1, 0, 1) ),
+        51: ( (-0.9977230666441916, -0.06744391956366429, 0, 0), (-0.06744391956366429, 0.9977230666441916, 0, 0), (0, 0, -1, 0), (0, 1, 0, 1) ),
+        52: ( (-0.9932383577419428, -0.1160929141252303, -5.665538897647979e-16, 0), (-0.1160929141252303, 0.9932383577419428, 0, 0), (5.627230550422977e-16, 6.577289207177989e-17, -0.9999999999999998, 0), (0, 0.9999999999999998, 0, 1) ),
+        53: ( (-0.9845302684038648, -0.1752145844289619, 3.216245299353273e-16, 0), (-0.1752145844289619, 0.9845302684038648, 0, 0), (-3.1664908478249467e-16, -5.635330835477859e-17, -1, 0), (0, 1, 0, 1) ),
+        54: ( (-0.9700312531945439, -0.24298017990326426, -5.66553889764798e-16, 0), (-0.24298017990326426, 0.9700312531945439, 0, 0), (5.495749796907905e-16, 1.3766136605994475e-16, -1, 0), (0, 1, 0, 1) ),
+        55: ( (-0.9483092323230619, -0.3173477586037832, 0, 0), (-0.3173477586037832, 0.9483092323230619, 0, 0), (0, 0, -1, 0), (0, 1, 0, 1) ),
+        56: ( (-0.9182161068802741, -0.39607976603915673, 0, 0), (-0.39607976603915673, 0.9182161068802741, 0, 0), (0, 0, -1, 0), (0, 1, 0, 1) ),
+        57: ( (-0.8790122264286333, -0.4767992300633225, 0, 0), (-0.4767992300633225, 0.8790122264286333, 0, 0), (0, 0, -1, 0), (0, 1, 0, 1) ),
+        58: ( (-0.8304581835400152, -0.5570809684340494, 0, 0), (-0.5570809684340494, 0.8304581835400152, 0, 0), (0, 0, -1, 0), (0, 1, 0, 1) ),
+        59: ( (-0.7728662634605281, -0.6345689393632196, 0, 0), (-0.6345689393632196, 0.7728662634605281, 0, 0), (0, 0, -1, 0), (0, 1, 0, 1) ),
+        60: ( (-0.7071067811865472, -0.7071067811865479, 0, 0), (-0.7071067811865479, 0.7071067811865472, 0, 0), (0, 0, -1, 0), (0, 1, 0, 1) ),
+        61: ( (-0.6345689393632198, -0.772866263460528, 0, 0), (-0.772866263460528, 0.6345689393632198, 0, 0), (0, 0, -1, 0), (0, 1, 0, 1) ),
+        62: ( (-0.5570809684340495, -0.8304581835400151, 0, 0), (-0.8304581835400151, 0.5570809684340495, 0, 0), (0, 0, -1, 0), (0, 1, 0, 1) ),
+        63: ( (-0.47679923006332164, -0.8790122264286337, 0, 0), (-0.8790122264286337, 0.47679923006332164, 0, 0), (0, 0, -1, 0), (0, 1, 0, 1) ),
+        64: ( (-0.39607976603915673, -0.9182161068802741, 0, 0), (-0.9182161068802741, 0.39607976603915673, 0, 0), (0, 0, -1, 0), (0, 1, 0, 1) ),
+        65: ( (-0.3173477586037833, -0.9483092323230619, 0, 0), (-0.9483092323230619, 0.3173477586037833, 0, 0), (0, 0, -1, 0), (0, 1, 0, 1) ),
+        66: ( (-0.24298017990326334, -0.9700312531945441, 0, 0), (-0.9700312531945441, 0.24298017990326334, 0, 0), (0, 0, -1, 0), (0, 1, 0, 1) ),
+        67: ( (-0.17521458442896165, -0.9845302684038649, 3.216245299353273e-16, 0), (-0.9845302684038649, 0.17521458442896165, 0, 0), (-5.635330835477851e-17, -3.1664908478249467e-16, -1, 0), (0, 1, 0, 1) ),
+        68: ( (-0.1160929141252303, -0.993238357741943, 0, 0), (-0.993238357741943, 0.1160929141252303, 0, 0), (0, 0, -1, 0), (0, 1, 0, 1) ),
+        69: ( (-0.06744391956366388, -0.9977230666441916, 3.216245299353273e-16, 0), (-0.9977230666441916, 0.06744391956366388, 0, 0), (-2.1691618926659424e-17, -3.208922123150714e-16, -1, 0), (0, 1, 0, 1) ),
+        70: ( (-0.03090195185270335, -0.9995224206448263, 0, 0), (-0.9995224206448263, 0.03090195185270335, 0, 0), (0, 0, -1, 0), (0, 1, 0, 1) ),
+        71: ( (-0.00795389058699563, -0.9999683673119516, 0, 0), (-0.9999683673119516, 0.00795389058699563, 0, 0), (0, 0, -1, 0), (0, 1, 0, 1) ),
+        72: ( (0, -1, 0, 0), (-1, 0, 0, 0), (0, 0, -1, 0), (0, 1, 0, 1) ),
+        73: ( (1.6121941407601636e-16, -1.0025318287037035, 0, 0), (-1.0035445601851851, -1.6138227371935747e-16, 0, 0), (0, 0, -1.0050636574074072, 0), (0, 0.9999999999999999, 0, 1) ),
+        74: ( (-2.860638129744133e-16, -1.009837962962963, 0, 0), (-1.0137731481481482, 2.8717856021121906e-16, 0, 0), (0, 0, -1.0196759259259258, 0), (0, 1, 0, 1) ),
+        75: ( (0, -1.021484375, 0, 0), (-1.030078125, 0, 0, 0), (0, 0, -1.04296875, 0), (0, 1, 0, 1) ),
+        76: ( (0, -1.0370370370370368, 0, 0), (-1.0518518518518516, 0, 0, 0), (0, 0, -1.0740740740740737, 0), (0, 0.9999999999999999, 0, 1) ),
+        77: ( (0, -1.056061921296296, -5.983159893429025e-16, 0), (-1.0784866898148144, 0, 0, 0), (0, 6.300780889210071e-16, -1.1121238425925923, 0), (0, 1, 0, 1) ),
+        78: ( (1.733757231682624e-16, -1.078125, 0, 0), (-1.109375, -1.7840110644850188e-16, 0, 0), (0, 0, -1.15625, 0), (0, 1, 0, 1) ),
+        79: ( (1.7734251876678474e-16, -1.1027922453703702, -6.247912362170387e-16, 0), (-1.1439091435185182, -1.8395462028643314e-16, 0, 0), (-1.0983937341669995e-31, 6.830285826692795e-16, -1.2055844907407405, 0), (0, 0.9999999999999999, 0, 1) ),
+        80: ( (1.8165829931532372e-16, -1.1296296296296293, 0, 0), (-1.1814814814814811, -1.8999671305438776e-16, 0, 0), (0, 0, -1.2592592592592589, 0), (0, 1, 0, 1) ),
+        81: ( (0, -1.158203125, 0, 0), (-1.221484375, 0, 0, 0), (0, 0, -1.31640625, 0), (0, 1, 0, 1) ),
+        82: ( (0, -1.1880787037037035, 0, 0), (-1.263310185185185, 0, 0, 0), (0, 0, -1.3761574074074074, 0), (0, 1, 0, 1) ),
+        83: ( (0, -1.2188223379629628, 0, 0), (-1.306351273148148, 0, 0, 0), (0, 0, -1.4376446759259254, 0), (0, 1, 0, 1) ),
+        84: ( (0, -1.25, 0, 0), (-1.35, 0, 0, 0), (0, 0, -1.5, 0), (0, 1, 0, 1) ),
+        85: ( (0, -1.2811776620370368, 0, 0), (-1.3936487268518518, 0, 0, 0), (0, 0, -1.562355324074074, 0), (0, 1, 0, 1) ),
+        86: ( (0, -1.3119212962962963, 0, 0), (-1.4366898148148146, 0, 0, 0), (0, 0, -1.6238425925925921, 0), (0, 1, 0, 1) ),
+        87: ( (0, -1.341796875, 0, 0), (-1.478515625, 0, 0, 0), (0, 0, -1.68359375, 0), (0, 1, 0, 1) ),
+        88: ( (0, -1.3703703703703702, 0, 0), (-1.5185185185185184, 0, 0, 0), (0, 0, -1.7407407407407405, 0), (0, 1, 0, 1) ),
+        89: ( (0, -1.3972077546296295, 0, 0), (-1.5560908564814815, 0, 0, 0), (0, 0, -1.7944155092592589, 0), (0, 1, 0, 1) ),
+        90: ( (0, -1.421875, 0, 0), (-1.590625, 0, 0, 0), (0, 0, -1.84375, 0), (0, 1, 0, 1) ),
+        91: ( (0, -1.4439380787037037, 0, 0), (-1.6215133101851849, 0, 0, 0), (0, 0, -1.887876157407407, 0), (0, 1, 0, 1) ),
+        92: ( (0, -1.462962962962963, 0, 0), (-1.648148148148148, 0, 0, 0), (0, 0, -1.9259259259259258, 0), (0, 1, 0, 1) ),
+        93: ( (0, -1.478515625, 0, 0), (-1.669921875, 0, 0, 0), (0, 0, -1.95703125, 0), (0, 1, 0, 1) ),
+        94: ( (0, -1.490162037037037, 0, 0), (-1.6862268518518517, 0, 0, 0), (0, 0, -1.980324074074074, 0), (0, 1, 0, 1) ),
+        95: ( (-4.2419820862344773e-16, -1.4974681712962963, 4.816224966862855e-16, 0), (-1.6964554398148148, 4.805667141198672e-16, 0, 0), (-1.8175628465653135e-31, -6.416204634372436e-16, -1.9949363425925926, 0), (0, 1, 0, 1) ),
+        96: ( (0, -1.5, 0, 0), (-1.7, 0, 0, 0), (0, 0, -2, 0), (0, 1, 0, 1) ),
+        97: ( (-0.011909190946259756, -1.4972313355690183, -0.023820642449210307, 0), (-1.696401776369099, 0.013493420954000966, 0, 0), (0.0002524088190106441, 0.03173300309836702, -1.99468392578896, 0), (0, 0.9949363425925926, 0, 1) ),
+        98: ( (-0.04596096848158209, -1.4866057228638248, -0.09205384701972821, 0), (-1.6854215447192678, 0.05210770098866184, 0, 0), (0.0037803379506133484, 0.12227488274084464, -1.9765419298494606, 0), (0, 0.980324074074074, 0, 1) ),
+        99: ( (-0.09880972799391634, -1.4617291738999336, -0.19897968035135535, 0), (-1.6661195741812187, 0.11262607661510353, 0, 0), (0.017763288633465376, 0.2627789565571933, -1.939227423239523, 0), (0, 0.9570312500000002, 0, 1) ),
+        100: ( (-0.1652615843225443, -1.4139032157750022, -0.3373824775676435, 0), (-1.637003959982091, 0.19133832142862173, 0, 0), (0.05156256151321886, 0.4411459071749391, -1.87401234333892, 0), (0, 0.9259259259259259, 0, 1) ),
+        101: ( (-0.23746479496100145, -1.3343140303152594, -0.4981703672324573, 0), (-1.5964289344970592, 0.28411278079013, 0, 0), (0.11412297272507105, 0.6412566701239064, -1.7719599927270788, 0), (0, 0.8878761574074072, 0, 1) ),
+        102: ( (-0.30469272281157683, -1.2164015347500388, -0.6702672351744636, 0), (-1.5429559621125717, 0.3864903486586304, 0, 0), (0.2111832428521174, 0.843090764847914, -1.6260423311422814, 0), (0, 0.8437500000000004, 0, 1) ),
+        103: ( (-0.35409132514191516, -1.0581075921094623, -0.8409620482380462, 0), (-1.475655325534889, 0.4938219454882412, 0, 0), (0.3427471554382823, 1.0242085631378228, -1.4329857733084055, 0), (0, 0.7944155092592593, 0, 1) ),
+        104: ( (-0.3724754745487024, -0.8634952084744408, -0.9967712866001041, 0), (-1.3943281622996733, 0.6014544595409456, 0, 0), (0.5015038942049376, 1.1626167070514446, -1.194568777030758, 0), (0, 0.7407407407407406, 0, 1) ),
+        105: ( (-0.3488813228120416, -0.643186752385591, -1.1247272904612755, 0), (-1.2996333113407716, 0.7049551116365935, 0, 0), (0.6728733180176861, 1.2404883147495764, -0.9181057422261828, 0), (0, 0.6835937500000007, 0, 1) ),
+        106: ( (-0.2772258127059701, -0.4132692694517327, -1.213874724743909, 0), (-1.1931108139215505, 0.8003525533763747, 0, 0), (0.8370055488546886, 1.2477505912088342, -0.6159585528607423, 0), (0, 0.6238425925925928, 0, 1) ),
+        107: ( (-0.15824513056187542, -0.19273291707423892, -1.256673666085272, 0), (-1.0771040840985096, 0.8843661944432848, 0, 0), (0.9724600720896118, 1.1843970539034723, -0.3041039058592406, 0), (0, 0.5623553240740738, 0, 1) ),
+        108: ( (-1.7122317625045329e-15, -1.7122317625045256e-15, -1.2500000000000004, 0), (-0.9545941546018375, 0.9545941546018415, 0, 0), (1.0606601717798239, 1.0606601717798194, -2.905753656551872e-15, 0), (0, 0.5000000000000007, 0, 1) ),
+        109: ( (0.18335254473399945, 0.1505432897542213, -1.1955109592835385, 0), (-0.8289699418374091, 1.0096348272449156, 0, 0), (1.0898558685655038, 0.8948361641220854, 0.2798296613133873, 0), (0, 0.43764467592592615, 0, 1) ),
+        110: ( (0.37425752544526275, 0.25105628296663063, -1.0992875209083566, 0), (-0.7037660613955571, 1.0491262816364915, 0, 0), (1.0574308289004342, 0.7093368478889633, 0.5220062147907503, 0), (0, 0.3761574074074072, 0, 1) ),
+        111: ( (0.5551815781144892, 0.3011450137227627, -0.9708344734258196, 0), (-0.5824028095343757, 1.0736997000165394, 0, 0), (0.9699409792821558, 0.5261213646681187, 0.7178692230399577, 0), (0, 0.3164062500000006, 0, 1) ),
+        112: ( (0.7118001042829867, 0.3070405938847369, -0.8216628173325184, 0), (-0.46796090876477825, 1.084855326277066, 0, 0), (0.8410418731861539, 0.3627900511269713, 0.8641561365754419, 0), (0, 0.25925925925925947, 0, 1) ),
+        113: ( (0.8351462718979437, 0.27947824239132385, -0.663756998466943, 0), (-0.3630170027419712, 1.0847796017373785, 0, 0), (0.6881181937134149, 0.23027590472201595, 0.9627566273465247, 0), (0, 0.20558449074074056, 0, 1) ),
+        114: ( (0.9223264384368414, 0.23103074586811534, -0.5082246068905303, 0), (-0.26955613708018095, 1.0761284215126983, 0, 0), (0.5287179372775089, 0.13243694890725918, 1.019721461902785, 0), (0, 0.1562500000000005, 0, 1) ),
+        115: ( (0.9758855031597857, 0.17367609546794152, -0.3643499419481314, 0), (-0.1889665971680668, 1.061802790193376, 0, 0), (0.37775615167771304, 0.06722839231646886, 1.0438391036932375, 0), (0, 0.11212384259259274, 0, 1) ),
+        116: ( (1.0022605073848119, 0.11714745217800243, -0.239157199288456, 0), (-0.12211254670949863, 1.0447396059211551, 0, 0), (0.2460236790014083, 0.028756043920832686, 1.0451222684005514, 0), (0, 0.07407407407407396, 0, 1) ),
+        117: ( (1.0098868665121072, 0.0682661661041173, -0.13747209091645995, 0), (-0.06947250620678826, 1.0277327057580992, 0, 0), (0.14004387505144017, 0.009466662804661049, 1.0334804830438176, 0), (0, 0.04296875000000029, 0, 1) ),
+        118: ( (1.0074279558824755, 0.03114636504868215, -0.06238212157259231, 0), (-0.031327569013636154, 1.013288991021763, 0, 0), (0.06295977305358491, 0.0019465094883051866, 1.0177284863806983, 0), (0, 0.019675925925925992, 0, 1) ),
+        119: ( (1.0023732708396222, 0.007973019531626017, -0.01594755247106904, 0), (-0.007982083630886688, 1.00351281537317, 0, 0), (0.015987321236083256, 0.00012716542647520944, 1.0049364879582205, 0), (0, 0.005063657407407373, 0, 1) ),
+        120: ( (1, 0, 0, 0), (0, 1, 0, 0), (0, 0, 1, 0), (0, 0, 0, 1) ),
+    }
+    matrix4d xformOp:transform:transform3.timeSamples = {
+        1: ( (1, 0, 0, 0), (0, 1, 0, 0), (0, 0, 1, 0), (0, 0, 0, 1) ),
+        2: ( (1, 0, 0, 0), (0, 1, 0, 0), (0, 0, 1, 0), (0, 8.673617379884035e-19, 0.0055066984466179, 1) ),
+        3: ( (1, 0, 0, 0), (0, 1, 0, 0), (0, 0, 1, 0), (0, 3.469446951953614e-18, 0.021369277554039612, 1) ),
+        4: ( (1, 0, 0, 0), (0, 1, 0, 0), (0, 0, 1, 0), (0, 0, 0.046601462973617155, 1) ),
+        5: ( (1, 0, 0, 0), (0, 1, 0, 0), (0, 0, 1, 0), (0, 0, 0.08021698035670255, 1) ),
+        6: ( (1, 0, 0, 0), (0, 1, 0, 0), (0, 0, 1, 0), (0, 0, 0.12122955535464786, 1) ),
+        7: ( (1, 0, 0, 0), (0, 1, 0, 0), (0, 0, 1, 0), (0, -2.7755575615628914e-17, 0.168652913618805, 1) ),
+        8: ( (1, 0, 0, 0), (0, 1, 0, 0), (0, 0, 1, 0), (0, 0, 0.22150078080052604, 1) ),
+        9: ( (1, 0, 0, 0), (0, 1, 0, 0), (0, 0, 1, 0), (0, 5.551115123125783e-17, 0.278786882551163, 1) ),
+        10: ( (1, 0, 0, 0), (0, 1, 0, 0), (0, 0, 1, 0), (0, 5.551115123125783e-17, 0.3395249445220679, 1) ),
+        11: ( (1, 0, 0, 0), (0, 1, 0, 0), (0, 0, 1, 0), (0, 0, 0.40272869236459274, 1) ),
+        12: ( (1, 0, 0, 0), (0, 1, 0, 0), (0, 0, 1, 0), (0, 0, 0.46741185173008964, 1) ),
+        13: ( (1, 0, 0, 0), (0, 1, 0, 0), (0, 0, 1, 0), (0, 0, 0.5325881482699104, 1) ),
+        14: ( (1, 0, 0, 0), (0, 1, 0, 0), (0, 0, 1, 0), (0, 0, 0.5972713076354073, 1) ),
+        15: ( (1, 0, 0, 0), (0, 1, 0, 0), (0, 0, 1, 0), (0, 0, 0.6604750554779322, 1) ),
+        16: ( (1, 0, 0, 0), (0, 1, 0, 0), (0, 0, 1, 0), (0, 0, 0.721213117448837, 1) ),
+        17: ( (1, 0, 0, 0), (0, 1, 0, 0), (0, 0, 1, 0), (0, 0, 0.778499219199474, 1) ),
+        18: ( (1, 0, 0, 0), (0, 1, 0, 0), (0, 0, 1, 0), (0, 0, 0.8313470863811951, 1) ),
+        19: ( (1, 0, 0, 0), (0, 1, 0, 0), (0, 0, 1, 0), (0, 0, 0.8787704446453523, 1) ),
+        20: ( (1, 0, 0, 0), (0, 1, 0, 0), (0, 0, 1, 0), (0, 0, 0.9197830196432975, 1) ),
+        21: ( (1, 0, 0, 0), (0, 1, 0, 0), (0, 0, 1, 0), (0, 0, 0.9533985370263829, 1) ),
+        22: ( (1, 0, 0, 0), (0, 1, 0, 0), (0, 0, 1, 0), (0, 0, 0.9786307224459604, 1) ),
+        23: ( (1, 0, 0, 0), (0, 1, 0, 0), (0, 0, 1, 0), (0, 0, 0.9944933015533821, 1) ),
+        24: ( (1, 0, 0, 0), (0, 1, 0, 0), (0, 0, 1, 0), (0, 0, 1, 1) ),
+        25: ( (1, 0, 0, 0), (0, 1, 0, 0), (0, 0, 1, 0), (-0.015866428115111977, 0, 0.9973057984894146, 1) ),
+        26: ( (1, 0, 6.938893903907228e-18, 0), (0, 0.9999999999999999, 0, 0), (-6.938893903907228e-18, 0, 1, 0), (-0.06114877876786189, -1.1102230246251565e-16, 0.9879821656947702, 1) ),
+        27: ( (1, 0, -2.7755575615628914e-17, 0), (0, 0.9999999999999999, 0, 0), (2.7755575615628914e-17, 0, 1, 0), (-0.13155789962464176, -1.1102230246251565e-16, 0.9686460332648514, 1) ),
+        28: ( (1, 0, 0, 0), (0, 1, 0, 0), (0, 0, 1, 0), (-0.22154070916229796, 0, 0.9347537529875621, 1) ),
+        29: ( (1, 0, 0, 0), (0, 1, 0, 0), (0, 0, 1, 0), (-0.3241064813418322, 0, 0.8817364719729563, 1) ),
+        30: ( (1, 0, 0, 0), (0, 1, 0, 0), (0, 0, 1, 0), (-0.43088607975501353, 0, 0.8061311556934184, 1) ),
+        31: ( (1, 0, 0, 0), (0, 1, 0, 0), (0, 0, 1, 0), (-0.5325512447850721, 0, 0.7065857246723276, 1) ),
+        32: ( (1, 0, -5.551115123125783e-17, 0), (0, 1, 0, 0), (5.551115123125783e-17, 0, 1, 0), (-0.6196145835622271, 0, 0.5845762100363282, 1) ),
+        33: ( (1, 0, 0, 0), (0, 1, 0, 0), (0, 0, 1, 0), (-0.6835133097053613, 0, 0.44467418489493027, 1) ),
+        34: ( (0.9999999999999999, 0, -5.551115123125783e-17, 0), (0, 1, 0, 0), (5.551115123125783e-17, 0, 0.9999999999999999, 0), (-0.7177763866427925, 0, 0.2942596008944484, 1) ),
+        35: ( (1, 0, 0, 0), (0, 1, 0, 0), (0, 0, 1, 0), (-0.7190165770015868, 0, 0.14268158764814343, 1) ),
+        36: ( (1, 0, -4.930380657631324e-32, 0), (0, 1, 0, 0), (4.930380657631324e-32, 0, 1, 0), (-0.6875000000000001, 0, -2.632140980512278e-16, 1) ),
+        37: ( (0.9999999999999999, 0, 0, 0), (0, 1, 0, 0), (0, 0, 0.9999999999999999, 0), (-0.6271306079664997, 0, -0.12444774386225177, 1) ),
+        38: ( (1, 0, 0, 0), (0, 0.9999999999999998, 0, 0), (0, 0, 1, 0), (-0.5448246724424026, -2.220446049250313e-16, -0.22335631772480605, 1) ),
+        39: ( (1, 0, 0, 0), (0, 1, 0, 0), (0, 0, 1, 0), (-0.44939976889609945, 0, -0.29236661976924216, 1) ),
+        40: ( (1, 0, -5.551115123125783e-17, 0), (0, 1.0000000000000002, 0, 0), (5.551115123125783e-17, 0, 1, 0), (-0.3502169385351714, 2.220446049250313e-16, -0.33041264045531665, 1) ),
+        41: ( (0.9999999999999999, 0, 5.551115123125783e-17, 0), (0, 1, 0, 0), (-5.551115123125783e-17, 0, 0.9999999999999999, 0), (-0.2558588390613962, 0, -0.3394719381136359, 1) ),
+        42: ( (0.9999999999999999, 0, -5.551115123125783e-17, 0), (0, 1, 0, 0), (5.551115123125783e-17, 0, 0.9999999999999999, 0), (-0.17309098930329567, 0, -0.32383046425291184, 1) ),
+        43: ( (1, 0, 0, 0), (0, 1, 0, 0), (0, 0, 1, 0), (-0.10625521459306564, 0, -0.2890688814865333, 1) ),
+        44: ( (1, 0, 0, 0), (0, 1, 0, 0), (0, 0, 1, 0), (-0.05712013465148368, 0, -0.24100879896305807, 1) ),
+        45: ( (1, 0, 2.7755575615628914e-17, 0), (0, 0.9999999999999999, 0, 0), (-2.7755575615628914e-17, 0, 1, 0), (-0.025102456371934537, -1.1102230246251565e-16, -0.184826565787799, 1) ),
+        46: ( (1, 0, 0, 0), (0, 1, 0, 0), (0, 0, 1, 0), (-0.0077039238962140445, 0, -0.12447246811296295, 1) ),
+        47: ( (1, 0, 0, 0), (0, 1, 0, 0), (0, 0, 1, 0), (-0.0009936295229647093, 0, -0.0624559275480006, 1) ),
+        48: ( (1, 0, 0, 0), (0, 1, 0, 0), (0, 0, 1, 0), (0, 0, -1.1102230246251568e-16, 1) ),
+        49: ( (1, 0, 0, 0), (0, 1, 0, 0), (0, 0, 1, 0), (0, 0, 0.06246383101851838, 1) ),
+        50: ( (1.0000000000000002, 0, 0, 0), (0, 1.0000000000000002, 0, 0), (0, 0, 1, 0), (0, 0, 0.12471064814814775, 1) ),
+        51: ( (1, 0, 0, 0), (0, 1, 0, 0), (0, 0, 1, 0), (0, 0, 0.1865234375, 1) ),
+        52: ( (1.0000000000000002, 0, -9.860761315262648e-32, 0), (0, 1.0000000000000002, 1.232595164407831e-32, 0), (9.860761315262648e-32, -1.232595164407831e-32, 1, 0), (1.3877787807814457e-16, 0, 0.24768518518518506, 1) ),
+        53: ( (1.0000000000000002, 0, 4.930380657631324e-32, 0), (0, 1.0000000000000002, 0, 0), (4.930380657631324e-32, 0, 1, 0), (-1.1102230246251565e-16, 0, 0.3079788773148144, 1) ),
+        54: ( (1.0000000000000002, 1.3966631698010748e-47, -9.860761315262648e-32, 0), (0, 1.0000000000000002, -2.465190328815662e-32, 0), (0, 5.473822126268817e-48, 1, 0), (1.942890293094024e-16, 0, 0.3671875, 1) ),
+        55: ( (1, 0, 0, 0), (0, 1, 0, 0), (0, 0, 1, 0), (0, 0, 0.42509403935185164, 1) ),
+        56: ( (1, 0, 0, 0), (0, 1, 0, 0), (0, 0, 1, 0), (0, 0, 0.4814814814814811, 1) ),
+        57: ( (1, 0, 0, 0), (0, 1, 0, 0), (0, 0, 1, 0), (0, 0, 0.5361328125, 1) ),
+        58: ( (1, 0, 0, 0), (0, 1, 0, 0), (0, 0, 1, 0), (0, 0, 0.5888310185185184, 1) ),
+        59: ( (1, -5.551115123125783e-17, 0, 0), (5.551115123125783e-17, 1, 0, 0), (0, 0, 1, 0), (0, 0, 0.6393590856481477, 1) ),
+        60: ( (1, 0, 0, 0), (0, 1, 0, 0), (0, 0, 1, 0), (0, 0, 0.6875, 1) ),
+        61: ( (1, 0, 0, 0), (0, 1, 0, 0), (0, 0, 1, 0), (0, 0, 0.733036747685185, 1) ),
+        62: ( (1.0000000000000002, 0, 0, 0), (0, 1.0000000000000002, 0, 0), (0, 0, 1, 0), (0, 0, 0.7757523148148144, 1) ),
+        63: ( (1, 0, 0, 0), (0, 1, 0, 0), (0, 0, 1, 0), (0, 0, 0.8154296875, 1) ),
+        64: ( (1, 0, 0, 0), (0, 1, 0, 0), (0, 0, 1, 0), (0, 0, 0.8518518518518516, 1) ),
+        65: ( (1, 0, 0, 0), (0, 1, 0, 0), (0, 0, 1, 0), (0, 0, 0.8848017939814812, 1) ),
+        66: ( (1.0000000000000002, 0, 0, 0), (0, 1.0000000000000002, 0, 0), (0, 0, 1, 0), (0, 0, 0.9140625, 1) ),
+        67: ( (1, -1.9821642017661306e-48, 0, 0), (0, 1, -6.162975822039155e-33, 0), (0, 0, 1, 0), (-3.3306690738754696e-16, 0, 0.9394169560185184, 1) ),
+        68: ( (0.9999999999999999, 0, 0, 0), (0, 0.9999999999999999, 0, 0), (0, 0, 1, 0), (0, 0, 0.9606481481481479, 1) ),
+        69: ( (1, 0, 0, 0), (0, 1, 0, 0), (0, 0, 1, 0), (-3.3306690738754696e-16, 0, 0.9775390625, 1) ),
+        70: ( (1.0000000000000002, 0, 0, 0), (0, 1.0000000000000002, 0, 0), (0, 0, 1, 0), (0, 0, 0.9898726851851852, 1) ),
+        71: ( (1, 0, 0, 0), (0, 1, 0, 0), (0, 0, 1, 0), (0, 0, 0.9974320023148149, 1) ),
+        72: ( (1, 0, 0, 0), (0, 1, 0, 0), (0, 0, 1, 0), (0, 0, 1, 1) ),
+        73: ( (1, -2.465190328815662e-32, 0, 0), (0, 1, 0, 0), (0, 0, 1, 0), (-1.1102230246251565e-16, 0, 0.9899237080754284, 1) ),
+        74: ( (1, 0, 0, 0), (0, 1, 0, 0), (0, 0, 1, 0), (0, 0, 0.961407491486947, 1.0000000000000002) ),
+        75: ( (1, 0, 0, 0), (0, 1, 0, 0), (0, 0, 1.0000000000000002, 0), (0, 0, 0.9176029962546818, 1.0000000000000002) ),
+        76: ( (1, 0, 0, 0), (0, 1.0000000000000002, 0, 0), (0, 0, 1.0000000000000002, 0), (0, 0, 0.8620689655172419, 1.0000000000000002) ),
+        77: ( (1, 0, 0, 0), (0, 0.9999999999999999, 0, 0), (0, 0, 1, 0), (4.440892098500626e-16, 0, 0.7983608689996102, 1.0000000000000002) ),
+        78: ( (1, 0, 0, 0), (0, 1, 0, 0), (0, 0, 1, 0), (0, 0, 0.7297297297297298, 1) ),
+        79: ( (1.0000000000000002, 2.465190328815662e-32, 9.860761315262648e-32, 0), (0, 1, 0, 0), (0, -2.1895288505075267e-47, 1.0000000000000002, 0), (4.440892098500626e-16, 0, 0.6589463578543144, 1.0000000000000002) ),
+        80: ( (1, 0, 0, 0), (0, 0.9999999999999999, 0, 0), (0, 0, 1, 0), (0, 0, 0.5882352941176476, 1) ),
+        81: ( (1, 0, 0, 0), (0, 1, 0, 0), (0, 0, 1, 0), (0, 0, 0.5192878338278932, 1) ),
+        82: ( (1, 0, 0, 0), (0, 0.9999999999999999, 0, 0), (0, 0, 1, 0), (0, 0, 0.4533221194280909, 1) ),
+        83: ( (1, 0, 0, 0), (0, 0.9999999999999999, 0, 0), (0, 0, 1, 0), (0, 0, 0.391164335312469, 1) ),
+        84: ( (1, 0, 0, 0), (0, 1, 0, 0), (0, 0, 1, 0), (0, 0, 0.3333333333333333, 1) ),
+        85: ( (1, 0, 0, 0), (0, 1, 0, 0), (0, 0, 0.9999999999999999, 0), (0, 0, 0.28011852949347177, 0.9999999999999999) ),
+        86: ( (1, 0, 0, 0), (0, 1, 0, 0), (0, 0, 1.0000000000000002, 0), (0, 0, 0.23164647184604453, 1) ),
+        87: ( (0.9999999999999999, 0, 0, 0), (0, 1, 0, 0), (0, 0, 1, 0), (0, 0, 0.18793503480278423, 1) ),
+        88: ( (1, 0, 0, 0), (0, 1, 0, 0), (0, 0, 1.0000000000000002, 0), (0, 0, 0.14893617021276612, 1) ),
+        89: ( (1, 0, 0, 0), (0, 1, 0, 0), (0, 0, 1, 0), (0, 0, 0.1145690558735792, 1) ),
+        90: ( (1, 0, 0, 0), (0, 1.0000000000000002, 0, 0), (0, 0, 1, 0), (0, 0, 0.0847457627118644, 1) ),
+        91: ( (0.9999999999999999, 0, 0, 0), (0, 0.9999999999999999, 0, 0), (0, 0, 1, 0), (0, 0, 0.05939152425473226, 1) ),
+        92: ( (1, 0, 0, 0), (0, 0.9999999999999999, 0, 0), (0, 0, 0.9999999999999998, 0), (0, 0, 0.03846153846153858, 0.9999999999999998) ),
+        93: ( (1, 0, 0, 0), (0, 1, 0, 0), (0, 0, 0.9999999999999999, 0), (0, 0, 0.021956087824351295, 1) ),
+        94: ( (0.9999999999999999, 0, 0, 0), (0, 1, 0, 0), (0, 0, 1, 0), (0, 0, 0.009935710111046206, 1) ),
+        95: ( (1, 0, 0, 0), (0, 0.9999999999999999, 0, 0), (9.860761315262648e-32, 0, 1, 0), (0, 0, 0.0025382551309014786, 1) ),
+        96: ( (1, 0, 0, 0), (0, 1.0000000000000002, 0, 0), (0, 0, 1, 0), (0, 0, 0, 1) ),
+        97: ( (0.9999999999999998, -8.673617379884035e-19, 0, 0), (1.734723475976807e-18, 0.9999999999999999, 0, 0), (3.469446951953614e-18, 0, 0.9999999999999998, 0), (0, 8.673617379884035e-19, 1.734723475976807e-18, 0.9999999999999999) ),
+        98: ( (0.9999999999999999, -6.938893903907228e-18, -6.938893903907228e-18, 0), (6.938893903907228e-18, 0.9999999999999999, 2.168404344971009e-19, 0), (-1.3877787807814457e-17, 0, 0.9999999999999999, 0), (0, 0, 0, 0.9999999999999998) ),
+        99: ( (0.9999999999999999, 6.796021238305009e-18, 1.3877787807814457e-17, 0), (0, 1, -8.673617379884035e-19, 0), (0, -1.3924165054337252e-18, 1, 0), (1.1102230246251565e-16, 0, 0, 1) ),
+        100: ( (0.9999999999999998, 0, 0, 0), (0, 1, 0, 0), (0, -6.938893903907228e-18, 0.9999999999999997, 0), (0, -1.3877787807814457e-17, -1.3877787807814457e-17, 0.9999999999999998) ),
+        101: ( (0.9999999999999999, 2.462744023665138e-17, -2.7755575615628914e-17, 0), (-2.7755575615628914e-17, 0.9999999999999999, 6.938893903907228e-18, 0), (-5.551115123125783e-17, -1.1126576584985628e-17, 0.9999999999999998, 0), (0, 0, 0, 0.9999999999999998) ),
+        102: ( (0.9999999999999998, -5.551115123125783e-17, -5.551115123125783e-17, 0), (0, 0.9999999999999999, 1.3877787807814457e-17, 0), (-1.1102230246251565e-16, 2.7755575615628914e-17, 1, 0), (1.1102230246251565e-16, 0, 0, 1) ),
+        103: ( (1.0000000000000002, -3.972126372853166e-17, 5.551115123125783e-17, 0), (0, 1, -2.7755575615628914e-17, 0), (-1.1102230246251565e-16, 3.512181158203084e-17, 1.0000000000000002, 0), (-5.551115123125783e-17, 5.551115123125783e-17, -5.551115123125783e-17, 1.0000000000000002) ),
+        104: ( (1, -1.52750839915129e-17, -5.551115123125783e-17, 0), (-5.551115123125783e-17, 1, 0, 0), (-2.220446049250313e-16, 3.7204907213110995e-17, 1, 0), (-5.551115123125783e-17, 0, 0, 0.9999999999999999) ),
+        105: ( (1, 4.6448509405372814e-17, -5.551115123125783e-17, 0), (0, 0.9999999999999998, 0, 0), (0, -4.02522613679389e-17, 0.9999999999999999, 0), (-2.7755575615628914e-17, -2.7755575615628914e-17, 0, 0.9999999999999999) ),
+        106: ( (1.0000000000000002, 0, 0, 0), (0, 1.0000000000000002, 0, 0), (0, 0, 1.0000000000000002, 0), (0, -2.7755575615628914e-17, 0, 1.0000000000000002) ),
+        107: ( (0.9999999999999999, -1.3877787807814457e-17, 0, 0), (1.3877787807814457e-17, 1, 5.551115123125783e-17, 0), (0, 0, 1.0000000000000002, 0), (0, 0, 0, 0.9999999999999999) ),
+        108: ( (1, 1.9721522630525295e-31, 0, 0), (0, 0.9999999999999999, -5.551115123125783e-17, 0), (3.944304526105059e-31, -1.1102230246251565e-16, 1, 0), (0, -5.551115123125783e-17, 0, 1) ),
+        109: ( (1.0000000000000002, 0, 0, 0), (1.3877787807814457e-17, 0.9999999999999999, -5.551115123125783e-17, 0), (-5.551115123125783e-17, 0, 1, 0), (6.938893903907228e-18, 0, 0, 1.0000000000000002) ),
+        110: ( (1, 0, -5.551115123125783e-17, 0), (-2.7755575615628914e-17, 1, 5.551115123125783e-17, 0), (5.551115123125783e-17, 0, 1, 0), (0, -5.551115123125783e-17, 0, 1) ),
+        111: ( (1, -5.432910482988734e-17, 5.551115123125783e-17, 0), (0, 1, 0, 0), (1.1102230246251565e-16, -7.690864874766077e-17, 1.0000000000000002, 0), (0, 0, -1.3877787807814457e-17, 1) ),
+        112: ( (1, 2.7755575615628914e-17, 5.551115123125783e-17, 0), (0, 1, -5.551115123125783e-17, 0), (0, 0, 1, 0), (0, 2.7755575615628914e-17, 0, 0.9999999999999999) ),
+        113: ( (1, -2.7755575615628914e-17, -5.551115123125783e-17, 0), (2.7755575615628914e-17, 1, 0, 0), (-1.1102230246251565e-16, 0, 1, 0), (-6.938893903907228e-18, -2.7755575615628914e-17, 0, 1.0000000000000002) ),
+        114: ( (1, 2.2655499071849254e-17, 5.551115123125783e-17, 0), (5.551115123125783e-17, 1, 0, 0), (-1.1102230246251565e-16, 1.0232990371832388e-17, 0.9999999999999998, 0), (0, 0, -1.734723475976807e-18, 0.9999999999999998) ),
+        115: ( (1, 0, 0, 0), (0, 0.9999999999999999, 0, 0), (5.551115123125783e-17, 6.938893903907228e-18, 0.9999999999999999, 0), (-3.469446951953614e-18, 0, 0, 1) ),
+        116: ( (1, 1.458599549023117e-17, 0, 0), (1.3877787807814457e-17, 1.0000000000000002, 0, 0), (-5.551115123125783e-17, 3.74563662852557e-19, 1, 0), (1.734723475976807e-18, 0, 0, 1.0000000000000002) ),
+        117: ( (1, 0, 0, 0), (0, 1.0000000000000002, 1.734723475976807e-18, 0), (-2.7755575615628914e-17, 1.734723475976807e-18, 1, 0), (0, 6.938893903907228e-18, 5.421010862427522e-20, 1) ),
+        118: ( (1.0000000000000002, 0, 0, 0), (0, 1.0000000000000002, 0, 0), (0, 0, 1.0000000000000002, 0), (1.0842021724855044e-19, 0, 0, 1.0000000000000002) ),
+        119: ( (1, -1.735150956095611e-18, 3.469446951953614e-18, 0), (-1.734723475976807e-18, 1, -2.710505431213761e-20, 0), (-3.469446951953614e-18, -1.6735524876382415e-22, 0.9999999999999999, 0), (0, 0, 0, 1) ),
+        120: ( (1, 0, 0, 0), (0, 1, 0, 0), (0, 0, 1, 0), (0, 0, 0, 1) ),
+    }
+    matrix4d xformOp:transform:xform = ( (1, 0, 0, 0), (0, 1, 0, 0), (0, 0, 1, 0), (0, 0, 0, 1) )
+    uniform token[] xformOpOrder = ["xformOp:transform:xform", "xformOp:transform:transform2", "xformOp:transform:transform3"]
+
+    def Mesh "mesh_0"
+    {
+        float3[] extent = [(-0.5, -0.5, -0.5), (0.5, 0.5, 0.5)]
+        int[] faceVertexCounts = [4, 4, 4, 4, 4, 4]
+        int[] faceVertexIndices = [0, 1, 3, 2, 4, 5, 7, 6, 6, 7, 2, 3, 5, 4, 1, 0, 5, 0, 2, 7, 1, 4, 6, 3]
+        uniform token orientation = "leftHanded"
+        point3f[] points = [(0.5, -0.5, 0.5), (-0.5, -0.5, 0.5), (0.5, 0.5, 0.5), (-0.5, 0.5, 0.5), (-0.5, -0.5, -0.5), (0.5, -0.5, -0.5), (-0.5, 0.5, -0.5), (0.5, 0.5, -0.5)] (
+            interpolation = "vertex"
+        )
+        uniform token subdivisionScheme = "none"
+    }
+}
+
index 5f2ed9227c5479a3ba48f8fd0bafa643570a4f02..853b01c7818ca99b9439f2d1b7e10642da837b2d 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2024 Samsung Electronics Co., Ltd.
+ * Copyright (c) 2025 Samsung Electronics Co., Ltd.
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -33,7 +33,8 @@ namespace
 {
 struct Context
 {
-  ResourceBundle::PathProvider pathProvider = [](ResourceType::Value type) {
+  ResourceBundle::PathProvider pathProvider = [](ResourceType::Value type)
+  {
     return TEST_RESOURCE_DIR "/";
   };
 
@@ -397,7 +398,7 @@ int UtcDaliUsdLoaderSuccess2(void)
   END_TEST;
 }
 
-int UtcDaliUsdLoaderAnimation(void)
+int UtcDaliUsdLoaderAnimation01(void)
 {
   TestApplication application;
 
@@ -481,7 +482,125 @@ int UtcDaliUsdLoaderAnimation(void)
   std::vector<Dali::Animation> generatedAnimations;
 
   generatedAnimations.reserve(ctx.animations.size());
-  auto getActor = [&](const AnimatedProperty& property) {
+  auto getActor = [&](const AnimatedProperty& property)
+  {
+    Dali::Actor actor;
+    if(property.mNodeIndex != INVALID_INDEX)
+    {
+      auto* node = scene.GetNode(property.mNodeIndex);
+      if(node != nullptr)
+      {
+        actor = root.FindChildById(node->mNodeId);
+      }
+    }
+    else
+    {
+      actor = root.FindChildByName(property.mNodeName);
+    }
+    return actor;
+  };
+
+  for(auto& animationDefinition : ctx.animations)
+  {
+    generatedAnimations.push_back(animationDefinition.ReAnimate(getActor));
+  }
+
+  DALI_TEST_EQUAL(1u, generatedAnimations.size());
+  DALI_TEST_EQUAL(4.95833f, generatedAnimations[0].GetDuration());
+
+  delete ctx.loader;
+
+  END_TEST;
+}
+
+int UtcDaliUsdLoaderAnimation02(void)
+{
+  TestApplication application;
+
+  tet_infoline("Test USD with FPS is zero");
+
+  Context ctx;
+
+  ctx.loader = new Dali::Scene3D::Loader::ModelLoader(TEST_RESOURCE_DIR "/usd/BoxAnimationZeroFPS.usda", ctx.pathProvider(ResourceType::Mesh) + "/", ctx.loadResult);
+  DALI_TEST_EQUAL(ctx.loader->LoadModel(ctx.pathProvider, true), true);
+
+  auto& resources = ctx.resources;
+  resources.GenerateResources();
+
+  auto& scene = ctx.scene;
+  auto& roots = scene.GetRoots();
+
+  DALI_TEST_EQUAL(1u, roots.size());
+  DALI_TEST_EQUAL(3u, scene.GetNodeCount());
+
+  DALI_TEST_EQUAL(0, ctx.animationGroups.size());
+
+  DALI_TEST_EQUAL(1, ctx.animations.size());
+  DALI_TEST_EQUAL("box_animation_xform_anim", ctx.animations[0].GetName());
+  DALI_TEST_EQUAL(4.95833f, ctx.animations[0].GetDuration());
+  DALI_TEST_EQUAL(1, ctx.animations[0].GetLoopCount());
+  DALI_TEST_EQUAL(3, ctx.animations[0].GetPropertyCount());
+  DALI_TEST_EQUAL(1.0f, ctx.animations[0].GetSpeedFactor());
+  DALI_TEST_EQUAL(Vector2(0.f, 1.f), ctx.animations[0].GetPlayRange());
+
+  DALI_TEST_EQUAL(1, ctx.animations[0].GetPropertyAt(0).mNodeIndex);
+  DALI_TEST_EQUAL("", ctx.animations[0].GetPropertyAt(0).mNodeName);
+  DALI_TEST_EQUAL("position", ctx.animations[0].GetPropertyAt(0).mPropertyName);
+  DALI_TEST_EQUAL(4.95833f, ctx.animations[0].GetPropertyAt(0).mTimePeriod.durationSeconds);
+  DALI_TEST_EQUAL(0.0f, ctx.animations[0].GetPropertyAt(0).mTimePeriod.delaySeconds);
+  DALI_TEST_CHECK(ctx.animations[0].GetPropertyAt(0).mKeyFrames);
+  DALI_TEST_EQUAL(1, ctx.animations[0].GetPropertyAt(0).mKeyFrames.GetBaseObject().ReferenceCount());
+  DALI_TEST_EQUAL(Property::Type::VECTOR3, ctx.animations[0].GetPropertyAt(0).mKeyFrames.GetType());
+
+  DALI_TEST_EQUAL(1, ctx.animations[0].GetPropertyAt(1).mNodeIndex);
+  DALI_TEST_EQUAL("", ctx.animations[0].GetPropertyAt(1).mNodeName);
+  DALI_TEST_EQUAL("orientation", ctx.animations[0].GetPropertyAt(1).mPropertyName);
+  DALI_TEST_EQUAL(4.95833f, ctx.animations[0].GetPropertyAt(1).mTimePeriod.durationSeconds);
+  DALI_TEST_EQUAL(0.0f, ctx.animations[0].GetPropertyAt(1).mTimePeriod.delaySeconds);
+  DALI_TEST_CHECK(ctx.animations[0].GetPropertyAt(1).mKeyFrames);
+  DALI_TEST_EQUAL(1, ctx.animations[0].GetPropertyAt(1).mKeyFrames.GetBaseObject().ReferenceCount());
+  DALI_TEST_EQUAL(Property::Type::ROTATION, ctx.animations[0].GetPropertyAt(1).mKeyFrames.GetType());
+
+  DALI_TEST_EQUAL(1, ctx.animations[0].GetPropertyAt(2).mNodeIndex);
+  DALI_TEST_EQUAL("", ctx.animations[0].GetPropertyAt(2).mNodeName);
+  DALI_TEST_EQUAL("scale", ctx.animations[0].GetPropertyAt(2).mPropertyName);
+  DALI_TEST_EQUAL(4.95833f, ctx.animations[0].GetPropertyAt(2).mTimePeriod.durationSeconds);
+  DALI_TEST_EQUAL(0.0f, ctx.animations[0].GetPropertyAt(2).mTimePeriod.delaySeconds);
+  DALI_TEST_CHECK(ctx.animations[0].GetPropertyAt(2).mKeyFrames);
+  DALI_TEST_EQUAL(1, ctx.animations[0].GetPropertyAt(2).mKeyFrames.GetBaseObject().ReferenceCount());
+  DALI_TEST_EQUAL(Property::Type::VECTOR3, ctx.animations[0].GetPropertyAt(2).mKeyFrames.GetType());
+
+  Scene3D::Loader::ShaderManagerPtr shaderManager = new Scene3D::Loader::ShaderManager();
+  ViewProjection                    viewProjection;
+  Transforms                        xforms{
+    MatrixStack{},
+    viewProjection};
+  NodeDefinition::CreateParams nodeParams{
+    resources,
+    xforms,
+    shaderManager,
+  };
+
+  Customization::Choices choices;
+
+  // Create DALi actors
+  Actor root = Actor::New();
+  SetActorCentered(root);
+  for(auto iRoot : roots)
+  {
+    if(auto actor = scene.CreateNodes(iRoot, choices, nodeParams))
+    {
+      scene.ConfigureSkinningShaders(resources, actor, std::move(nodeParams.mSkinnables));
+      scene.ApplyConstraints(actor, std::move(nodeParams.mConstrainables));
+      root.Add(actor);
+    }
+  }
+
+  std::vector<Dali::Animation> generatedAnimations;
+
+  generatedAnimations.reserve(ctx.animations.size());
+  auto getActor = [&](const AnimatedProperty& property)
+  {
     Dali::Actor actor;
     if(property.mNodeIndex != INVALID_INDEX)
     {
index 65e7d7591f619de1045c8178084479a1c5224edf..5b237685531519212af2c5e3ff6768be486f0dc2 100644 (file)
@@ -422,7 +422,8 @@ void UsdLoaderImpl::Impl::GetXformableTransformation(const UsdPrim& prim, Vector
 NodeDefinition* UsdLoaderImpl::Impl::AddNodeToScene(SceneDefinition& scene, const std::string nodeName, const Index parentIndex, const Vector3& position, const Quaternion& rotation, const Vector3& scale, bool setTransformation)
 {
   // Add the node to the scene graph
-  auto weakNode = scene.AddNode([&]() {
+  auto weakNode = scene.AddNode([&]()
+                                {
         std::unique_ptr<NodeDefinition> nodeDefinition{new NodeDefinition()};
 
         nodeDefinition->mParentIdx = parentIndex;
@@ -1339,6 +1340,13 @@ void UsdLoaderImpl::Impl::ConvertTransformAnimation(LoadResult& output, const Us
   // USD’s default FPS is 24 frames per second, and time code from GetTimeSamples() is the frame number.
   // e.g. if there are totally 192 frames, the duration of the animation is 8 seconds.
 
+  // FPS should not be zero!
+  if(DALI_UNLIKELY(FPS < Dali::Math::MACHINE_EPSILON_10))
+  {
+    DALI_LOG_ERROR("USD Stage has 0 fps! use 24 FPS instead\n");
+    FPS = 24.0f;
+  }
+
   if(timeSamples.size() > 0)
   {
     AnimationDefinition animationDefinition;
@@ -1356,7 +1364,8 @@ void UsdLoaderImpl::Impl::ConvertTransformAnimation(LoadResult& output, const Us
       maxTime = std::max(maxTime, gltfTime);
     }
 
-    float duration = maxTime - minTime;
+    // duration should not be zero!
+    float duration = std::max(maxTime - minTime, AnimationDefinition::MIN_DURATION_SECONDS);
     DALI_LOG_INFO(gLogFilter, Debug::Verbose, "minTime: %f, maxTime: %f, animation duration: %f, ", minTime, maxTime, duration);
 
     animationDefinition.ReserveSize(3);
@@ -1407,7 +1416,7 @@ void UsdLoaderImpl::Impl::ConvertTransformAnimation(LoadResult& output, const Us
     animationDefinition.SetProperty(1, std::move(orientationProperty));
     animationDefinition.SetProperty(2, std::move(scaleProperty));
 
-    animationDefinition.SetDuration(std::max(duration, AnimationDefinition::MIN_DURATION_SECONDS));
+    animationDefinition.SetDuration(duration);
 
     DALI_LOG_INFO(gLogFilter, Debug::Verbose, "translations: %lu, rotations: %lu, scales: %lu, ", translations.size(), rotations.size(), scales.size());