Source code for openalea.oalab_wralea.oalabnode

# -*- python -*-
#
#       OpenAlea.MyModule: MyModule Description
#
#       Copyright 2013 INRIA - CIRAD - INRA
#
#       File author(s): FirstName LastName <firstname.lastname@lab.com>
#
#       File contributor(s):
#
#       Distributed under the Cecill-C License.
#       See accompanying file LICENSE.txt or copy at
#           http://www.cecill.info/licences/Licence_CeCILL-C_V1-en.html
#
#       OpenAlea WebSite : http://openalea.gforge.inria.fr
#
###############################################################################
"""
Visual Programming nodes define to interact with the oalab application components like:
    - the scene
    - control
    - observer
"""

__revision__ = '$Id: oalabnode.py 16355 2014-04-15 15:28:35Z jcoste $'

from openalea.core import *
from openalea.plantgl.all import Scene as PglScene
from openalea.oalab.scene import Scene

# Nodes for read/write in scene

[docs]class AbstractScene(Node): def __init__(self, inputs, outputs): Node.__init__(self, inputs, outputs) self.scene = Scene()
[docs]class SceneReader(AbstractScene): def __call__(self, inputs): """ inputs is the list of input values """ key = inputs[0] obj = self.scene.get(key) if key in self.scene: self.set_caption("%s"%(key, )) return (obj, )
[docs]class SceneWriter(AbstractScene): def __call__(self, inputs): """ inputs is the list of input values """ key = inputs[0] obj = inputs[1] self.set_caption("%s = %s"%(key, obj)) self.scene[key] = obj self.key = key return (obj, )
[docs] def reset(self): if hasattr(self,'key'): del self.scene[self.key]
[docs]class SceneDefault(AbstractScene): def __init__(self, *args, **kwds): AbstractScene.__init__(self,*args, **kwds) self.initial_state = True
[docs] def reset(self): if hasattr(self,'key'): self.scene[self.key] = default_value self.initial_state = True
def __call__(self, inputs): """ inputs is the list of input values """ key = inputs[0] default_value = inputs[1] if self.initial_state: self.default = default_value if key not in self.scene else self.scene[key] self.key = key obj = self.scene.setdefault(key, default_value) self.set_caption("%s"%(key,)) return (obj, )
[docs]class Scene2Geom(Node): def __init__(self): Node.__init__(self) self.add_input( name = "scene", interface = None) self.add_output( name = "geom", interface = None) #self.add_output( name = "geom2", interface = None) #self.add_output( name = "geom3", interface = None) def __call__(self, inputs): scene = inputs[0] geom = scene[0].geometry #geom2 = scene[1].geometry #geom3 = scene[2].geometry return (geom,)
[docs]class Geom2Scene(Node): def __init__(self): Node.__init__(self) self.add_input( name = "geom", interface = None) self.add_output( name = "scene", interface = None) def __call__(self, inputs): geometry = inputs[0] scene = PglScene([geometry]) return (scene , )