diff options
| author | Danilo M. <danix@danix.xyz> | 2026-10-28 10:44:34 +0100 |
|---|---|---|
| committer | Danilo M. <danix@danix.xyz> | 2026-10-28 10:44:34 +0100 |
| commit | d9ed29956b111c0881f546d7f6beddf9af26dc48 (patch) | |
| tree | f10fb0f4a5d088f9040ba2559ab77be965d9d328 | |
| parent | 072edd76f8c6d567561c81a19b55a001bb5ea416 (diff) | |
| download | generat3D-d9ed29956b111c0881f546d7f6beddf9af26dc48.tar.gz generat3D-d9ed29956b111c0881f546d7f6beddf9af26dc48.zip | |
Map bone names to ids in formula keys
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
| -rw-r--r-- | generat3d/scene.py | 2 | ||||
| -rw-r--r-- | tests/test_scene.py | 6 |
2 files changed, 8 insertions, 0 deletions
diff --git a/generat3d/scene.py b/generat3d/scene.py index 28dc00c..cccfcff 100644 --- a/generat3d/scene.py +++ b/generat3d/scene.py @@ -126,6 +126,7 @@ class _Loader: self.pending = [] self.figure = self._figure(*figs[0]) self.ids = {n.id for n in self.figure.nodes} | {n.name for n in self.figure.nodes} + self.name2id = {n.name: n.id for n in self.figure.nodes} for f, source in self.pending: self._formula(f, source) self._morphs(figs[0][1]) @@ -168,6 +169,7 @@ class _Loader: node, _, ident, channel = parse_url(url) if node not in self.ids or node == self.figure.name: node = self.figure.id + node = self.name2id.get(node, node) return key(node, ident, channel) def _formula(self, f, source): diff --git a/tests/test_scene.py b/tests/test_scene.py index 056f3e1..0d2e3c9 100644 --- a/tests/test_scene.py +++ b/tests/test_scene.py @@ -265,3 +265,9 @@ class SceneTest(unittest.TestCase): def test_bad_vertices(self): with self.assertRaisesRegex(Error, "bad vertices"): self.fig2(verts=[[0, 0], [1, 0], [0, 1]]) + + def test_bone_name_mapped_to_id(self): + scene, _ = self.fig2(hip_extra={"name": "Hip", "formulas": [{ + "output": "Hip:/data/Test/Fig2/Fig2.dsf#hip?center_point/y", + "operations": [{"op": "push", "val": 1}]}]}) + self.assertEqual(len(scene.graph.formulas["hip:hip?center_point/y"]), 1) |
