diff --git a/light9/Submaster.py b/light9/Submaster.py --- a/light9/Submaster.py +++ b/light9/Submaster.py @@ -271,11 +271,11 @@ def fullsub(*chans): # a global instance of Submasters, created on demand _submasters = None -def get_global_submasters(): - """Get (and make on demand) the global instance of Submasters""" +def get_global_submasters(graph): + """Get (and make on demand) the global instance of Submasters.""" global _submasters if _submasters is None: - _submasters = Submasters() + _submasters = Submasters(graph) return _submasters def get_sub_by_name(name, submasters=None): diff --git a/light9/curvecalc/subterm.py b/light9/curvecalc/subterm.py --- a/light9/curvecalc/subterm.py +++ b/light9/curvecalc/subterm.py @@ -71,11 +71,14 @@ exprglo = Expr() class Subexpr: curveset = None - def __init__(self,curveset,expr=""): + def __init__(self,curveset,expr="",graph=None): self.curveset = curveset self.lasteval = None - self.expr=expr + self.expr = expr + self.graph = graph self._smooth_random_items = [random.random() for x in range(100)] + self.submasters = Submaster.get_global_submasters(self.graph) + def eval(self,t): if self.expr=="": dispatcher.send("expr_error",sender=self,exc="no expr, using 0") @@ -84,6 +87,7 @@ class Subexpr: glo['t'] = t glo = exprglo.exprGlobals(glo, t) + glo['getsub'] = lambda name: self.submasters.get_sub_by_name(name) try: self.lasteval = eval(self.expr,glo) diff --git a/light9/curvecalc/subtermview.py b/light9/curvecalc/subtermview.py --- a/light9/curvecalc/subtermview.py +++ b/light9/curvecalc/subtermview.py @@ -68,7 +68,7 @@ def add_one_subterm(graph, subUri, curve expr = '%s(t)' % subname term = Subterm(Submaster.Submaster(graph=graph, name=subname, sub=subUri), - Subexpr(curveset, expr)) + Subexpr(curveset, expr, graph)) subterms.append(term) stv = Subtermview(graph, term)