Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
path: root/tests
diff options
context:
space:
mode:
authorSybren A. Stüvel <sybren@blender.org>2020-07-07 15:30:55 +0300
committerSybren A. Stüvel <sybren@blender.org>2020-07-07 15:30:55 +0300
commit98bee41c8a3f78c612f0c4ee587fceb2730f26b4 (patch)
treeffc85de8b4f8794c6a9e187697b6292db66e668c /tests
parent70b1c09d7a40912b5dccc69fc95cbee2e2388eab (diff)
IO: Reversed persistent ID order in exports to Alembic and USD
Each duplicated (a.k.a. instanced) object has a Persistent ID, which identifies a dupli within the context of its duplicator. This ID consists of several numbers when there are nested duplis (for example a mesh instancing empties on its vertices, where each empty instances a collection). When exporting to Alembic/USD, these are used to uniquely name the duplicated objects in the export. This commit reverses the order of the persistent ID numbers, so that the first number identifies the first level of recursion. This produces trees like this: ABC `--Triangle |--Triangle |--Empty-1 | `--Pole-1-0 | |--Pole | `--Block-1-1 | `--Block |--Empty | `--Pole-0 | |--Pole | `--Block-1 | `--Block |--Empty-2 | `--Pole-2-0 | |--Pole | `--Block-2-1 | `--Block `--Empty-0 `--Pole-0-0 |--Pole `--Block-0-1 `--Block It is now clearer that `Pole-2-0` and `Block-2-1` are instanced by `Empty-2`. Before this commit, they would have been named `Pole-0-2` and `Block-1-2`.
Diffstat (limited to 'tests')
-rw-r--r--tests/gtests/usd/object_identifier_test.cc37
-rw-r--r--tests/python/alembic_tests.py20
2 files changed, 45 insertions, 12 deletions
diff --git a/tests/gtests/usd/object_identifier_test.cc b/tests/gtests/usd/object_identifier_test.cc
index a914ec7e89d..810d4470260 100644
--- a/tests/gtests/usd/object_identifier_test.cc
+++ b/tests/gtests/usd/object_identifier_test.cc
@@ -39,11 +39,30 @@ Object *fake_pointer(int value)
/* PersistentID subclass for use in tests, making it easier to construct test values. */
class TestPersistentID : public PersistentID {
public:
- TestPersistentID(int value0, int value1)
+ TestPersistentID(int value0,
+ int value1,
+ int value2,
+ int value3,
+ int value4,
+ int value5,
+ int value6,
+ int value7)
{
persistent_id_[0] = value0;
persistent_id_[1] = value1;
- persistent_id_[2] = INT_MAX;
+ persistent_id_[2] = value2;
+ persistent_id_[3] = value3;
+ persistent_id_[4] = value4;
+ persistent_id_[5] = value5;
+ persistent_id_[6] = value6;
+ persistent_id_[7] = value7;
+ }
+ TestPersistentID(int value0, int value1, int value2)
+ : TestPersistentID(value0, value1, value2, INT_MAX, INT_MAX, INT_MAX, INT_MAX, INT_MAX)
+ {
+ }
+ TestPersistentID(int value0, int value1) : TestPersistentID(value0, value1, INT_MAX)
+ {
}
explicit TestPersistentID(int value0) : TestPersistentID(value0, INT_MAX)
{
@@ -199,5 +218,19 @@ TEST_F(PersistentIDTest, instancer_id)
EXPECT_LT(expect_instancer_id, empty_id);
}
+TEST_F(PersistentIDTest, as_object_name_suffix)
+{
+ EXPECT_EQ("", PersistentID().as_object_name_suffix());
+ EXPECT_EQ("47", TestPersistentID(47).as_object_name_suffix());
+ EXPECT_EQ("327-47", TestPersistentID(47, 327).as_object_name_suffix());
+ EXPECT_EQ("42-327-47", TestPersistentID(47, 327, 42).as_object_name_suffix());
+
+ EXPECT_EQ("7-6-5-4-3-2-1-0", TestPersistentID(0, 1, 2, 3, 4, 5, 6, 7).as_object_name_suffix());
+
+ EXPECT_EQ("0-0-0", TestPersistentID(0, 0, 0).as_object_name_suffix());
+ EXPECT_EQ("0-0", TestPersistentID(0, 0).as_object_name_suffix());
+ EXPECT_EQ("-3--2--1", TestPersistentID(-1, -2, -3).as_object_name_suffix());
+}
+
} // namespace io
} // namespace blender
diff --git a/tests/python/alembic_tests.py b/tests/python/alembic_tests.py
index 4d7ae97b327..66545dc85c7 100644
--- a/tests/python/alembic_tests.py
+++ b/tests/python/alembic_tests.py
@@ -254,7 +254,7 @@ class DupliGroupExportTest(AbstractAlembicTest):
# `--Triangle
# |--Triangle
# |--Empty-1
- # | `--Pole-0-1
+ # | `--Pole-1-0
# | |--Pole
# | `--Block-1-1
# | `--Block
@@ -264,18 +264,18 @@ class DupliGroupExportTest(AbstractAlembicTest):
# | `--Block-1
# | `--Block
# |--Empty-2
- # | `--Pole-0-2
+ # | `--Pole-2-0
# | |--Pole
- # | `--Block-1-2
+ # | `--Block-2-1
# | `--Block
# `--Empty-0
# `--Pole-0-0
# |--Pole
- # `--Block-1-0
+ # `--Block-0-1
# `--Block
# Now check the resulting Alembic file.
- xform = self.abcprop(abc, '/Triangle/Empty-1/Pole-0-1/Block-1-1/.xform')
+ xform = self.abcprop(abc, '/Triangle/Empty-1/Pole-1-0/Block-1-1/.xform')
self.assertEqual(1, xform['.inherits'])
self.assertAlmostEqualFloatArray(
xform['.vals'],
@@ -288,17 +288,17 @@ class DupliGroupExportTest(AbstractAlembicTest):
# If the property can be gotten, the hierarchy is okay. No need to actually check each xform.
self.abcprop(abc, '/Triangle/.xform')
self.abcprop(abc, '/Triangle/Empty-1/.xform')
- self.abcprop(abc, '/Triangle/Empty-1/Pole-0-1/.xform')
- self.abcprop(abc, '/Triangle/Empty-1/Pole-0-1/Block-1-1/.xform')
+ self.abcprop(abc, '/Triangle/Empty-1/Pole-1-0/.xform')
+ self.abcprop(abc, '/Triangle/Empty-1/Pole-1-0/Block-1-1/.xform')
self.abcprop(abc, '/Triangle/Empty/.xform')
self.abcprop(abc, '/Triangle/Empty/Pole-0/.xform')
self.abcprop(abc, '/Triangle/Empty/Pole-0/Block-1/.xform')
self.abcprop(abc, '/Triangle/Empty-2/.xform')
- self.abcprop(abc, '/Triangle/Empty-2/Pole-0-2/.xform')
- self.abcprop(abc, '/Triangle/Empty-2/Pole-0-2/Block-1-2/.xform')
+ self.abcprop(abc, '/Triangle/Empty-2/Pole-2-0/.xform')
+ self.abcprop(abc, '/Triangle/Empty-2/Pole-2-0/Block-2-1/.xform')
self.abcprop(abc, '/Triangle/Empty-0/.xform')
self.abcprop(abc, '/Triangle/Empty-0/Pole-0-0/.xform')
- self.abcprop(abc, '/Triangle/Empty-0/Pole-0-0/Block-1-0/.xform')
+ self.abcprop(abc, '/Triangle/Empty-0/Pole-0-0/Block-0-1/.xform')
class CurveExportTest(AbstractAlembicTest):