From d9ed29956b111c0881f546d7f6beddf9af26dc48 Mon Sep 17 00:00:00 2001 From: "Danilo M." Date: Wed, 28 Oct 2026 10:44:34 +0100 Subject: Map bone names to ids in formula keys Co-Authored-By: Claude Sonnet 5.5 --- generat3d/scene.py | 2 ++ tests/test_scene.py | 6 ++++++ 2 files changed, 8 insertions(+) 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) -- cgit v1.2.3