aboutsummaryrefslogtreecommitdiffstats
path: root/generat3d
diff options
context:
space:
mode:
Diffstat (limited to 'generat3d')
-rw-r--r--generat3d/scene.py8
1 files changed, 7 insertions, 1 deletions
diff --git a/generat3d/scene.py b/generat3d/scene.py
index 08ad4ee..03b92f7 100644
--- a/generat3d/scene.py
+++ b/generat3d/scene.py
@@ -114,6 +114,7 @@ class _Loader:
raise Error(f"{self.path}: no figure in scene")
if len(figs) > 1:
raise Error(f"{self.path}: v1 handles one figure per scene, found {len(figs)}")
+ self.inst = {figs[0][0]["id"], figs[0][0].get("name")} - {None}
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._morphs(figs[0][1])
@@ -222,6 +223,9 @@ class _Loader:
for m in scene.get("modifiers", []):
if "url" not in m:
continue
+ parent = parse_url(m.get("parent", ""))[2]
+ if parent and parent not in self.inst:
+ continue # belongs to another node
k = key(self.figure.id, parse_url(m["url"])[2], "value")
v = _number(m["url"], m.get("channel", {}).get("current_value", 0.0))
if k not in self.graph.props:
@@ -233,7 +237,9 @@ class _Loader:
elif v:
missing.append(m["url"])
for a in scene.get("animations", []):
- channel = parse_url(a["url"])[3]
+ prefix, _, _, channel = parse_url(a["url"])
+ if prefix and prefix not in self.inst and prefix not in self.ids:
+ continue # belongs to another node
v = _number(a["url"], a.get("keys", [[0, 0.0]])[0][1])
if channel.split("/")[0] in POSE_REST:
posed = posed or bool(v)