def plot(self): g = self.g frames = self.frame edge_type = g.property('edge_type') p = PglTurtle() # p.startGC() root = g.roots_iter(scale=2).next() min_length = min([ f.length for f in frames.itervalues() if f.length and f.length > 0 ]) for vid in pre_order_turtle(g, root, p): down = frames[vid].down down = 0 if down is None else down l = max(frames[vid].length, min_length) if edge_type.get(vid) == '+': # 1. phi / # 2. insertion angle (+, -) # 3. F pid = g.parent(vid) radius = frames[vid].radius phi = frames[pid].rotate phi = 0 if phi is None else phi roll = frames[vid].roll roll = 0 if roll is None else roll p.push() p.scale(radius) p.rollL(phi) p.rollL(roll) p.down(down) p.F(l) else: radius = frames[vid].radius p.scale(radius) p.down(down) p.F(l) # p.stopGC() # Viewer.display(p.getScene()) return p.getScene()
def interpret(self, instanciation=True, colorproperty=None, bounds=None, colormap='jet'): import openalea.lpy as lpy from openalea.plantgl.all import PglTurtle, Scene, Group, Shape print 'Instanciation :', instanciation def smb_interpret(cmd, turtle): ls = lpy.Lstring(cmd) lpy.turtle_interpretation(ls, turtle) def transf_interpret(cmd, smb, turtle): ls = lpy.Lstring(cmd) #print 'interpret', ls, cmd turtle.push() sc = lpy.turtle_partial_interpretation(ls, turtle) turtle.customGeometry(smb) turtle.pop() def sc2group(sc): if len(sc) == 1: return sc[0].geometry return Group([sh.geometry for sh in sc]) def color_scene(sc, color): from openalea.plantgl.all import Discretizer, Scene d = Discretizer() for sh in sc: sh.geometry.apply(d) tr = d.result tr.colorList = [color for i in xrange(len(tr.indexList))] tr.colorPerVertex = False sh.geometry = tr geommap = dict() invorderednodes = [] if colorproperty: from openalea.plantgl.scenegraph.colormap import PglColorMap if type(colorproperty) == str: cproperty = self.node_property(colorproperty) else: cproperty = colorproperty if bounds: cmap = PglColorMap(bounds[0], bounds[1], colormap) else: cmap = PglColorMap(min(cproperty.values()), max(cproperty.values()), colormap) for node in self.postorder_node_traversal(): t = PglTurtle() #print node smb_interpret(self.geom(node), t) if colorproperty: color_scene(t.getScene(), cmap(cproperty[node])) if self.nb_children(node) > 0: for cchild, edgecmds in self.geomcommands[node][1].items(): for edgecmd in edgecmds: transf_interpret( edgecmd, geommap[cchild] if instanciation else geommap[cchild].deepcopy(), t) smb = sc2group(t.getScene()) smb.name = 'Shape_' + str(node) geommap[node] = smb t = PglTurtle() if colorproperty: return Scene([Shape(geommap[self.root], t.getColorList()[1])]) + cmap.pglrepr() else: return Scene([Shape(geommap[self.root], t.getColorList()[1])])