1 from openalea.plantgl.all import *
\r
5 # Control of the surface details
\r
6 sepal_nb_segment = 10
\r
7 petal_nb_segment = 20
\r
8 stamen_nb_segment = 20
\r
9 carpel_nb_segment = 20
\r
10 leaf_nb_segment = 20
\r
16 Rmax = 10 # Maximum number of leaves before making a flower
\r
17 indiam = 0.04 # Final internode diameter in cm
\r
18 inlen = 1. # Final size of an internode length in cm
\r
20 receptacleHeight = 0.3 # scaling factor in cm:
\r
21 # defines the height of the flower receptacle
\r
22 # from its basis to the top
\r
23 receptacleWidth = 0.3 # scaling factor in cm:
\r
24 Ssize = 2. # scaling factor for the flower organs
\r
27 T = 5. # time for an apex to produce an internode
\r
28 T_IN = 5. # time for internode growth
\r
29 T_F = 2. # time to produce a flower internode
\r
30 dt = 1. # time resolution (eg. = 1 day)
\r
31 eps = 0.0001 # time accuracy (time under eps is considered to be 0)
\r
33 # values of parameter thresholds that define the flower zones
\r
34 # on the flower receptacle
\r
35 pth=[0.0,.3,.8,.95,1.0]
\r
36 nbwhorls = [1,1,1,1] # nb of whorls in each flower zone
\r
37 dp = 0.01 # subdivision unit of the intervalle [0,1] for parameter p
\r
40 # parameters for random noise
\r
42 insert_sepal_mu = 0. # mean variation of the sepal insertion angle in degrees
\r
43 insert_sepal_sigma = 5. # std deviation
\r
44 insert_petal_mu = 0.
\r
45 insert_petal_sigma = 5.
\r
47 # Some quantities used for the ABC diagram
\r
49 diagrWidth= .1 # size param. for the ABC diagram
\r
53 # p is assumed to be comprised between 0 and 1
\r
54 # dp is assumed to be constant increment between 0 and 1
\r
55 # the normal is assumed to be orthogonal to p-dp,p+dp
\r
56 def computeNormal(curve,p,dp):
\r
61 tanalpha = (y2-y)/(p2-p)
\r
66 tanalpha = (y-y1)/(p-p1)
\r
72 tanalpha = (y2-y1)/(p2-p1)
\r
73 alpha = degrees(atan(tanalpha)) # tangent angle wrt p axis
\r
74 normal = alpha+90 # the reference line for this angle is the horizontal line
\r
77 def petal_scaled_section(p):
\r
78 return petal_section(p)*10.0
\r
81 # Conventional colors
\r
82 ABCcolors= {'A': 9, 'B': 10,'C': 8, 'AB': 13, 'AC': 11, 'BC': 12, 'O': 2}
\r
83 # A conversion function
\r
84 def whorl2organ(whorlnumber):
\r
85 if whorlnumber == 0 :
\r
87 elif GC: orgtype='C'
\r
89 elif whorlnumber == 1 :
\r
102 elif whorlnumber ==2 :
\r
103 if GB and GC: orgtype='BC'
\r
104 elif GA and GB and (1-GC): orgtype='AB'
\r
105 elif GC and (1-GB): orgtype='C'
\r
106 elif GA and (1-GB) and (1-GC): orgtype='A'
\r
108 elif whorlnumber == 3:
\r
110 elif GA: orgtype='A'
\r
114 # Depending on genetic background, actual "colors", i.e. organ types
\r
115 whorlcolors = [ABCcolors[i] for i in map(whorl2organ,range(4)) ]
\r
118 deg2rad = 2*3.141592654/360
\r
127 module A, AL, I, I2, FA, FI
\r
128 module Sepal, Petal, Stamen, Carpel, Leaf, LeafLet
\r
129 module OrgV1, OrgV2, OrgV3, OrgV4
\r
130 module diagr, Annulus
\r
132 ##################### AXIOM ###############################################
\r
133 Axiom: SectionResolution(50) maybe_diagr
\r
135 derivation length: 250
\r
138 # ABC diagram displayed above the flower
\r
141 produce f(5) diagr(0)
\r
142 else : produce [SetGuide(AxisShape, Rmax*inlen)A(0,T)]
\r
149 produce @M(0,0,0)[SetGuide(AxisShape, Rmax*inlen)A(0,T)]
\r
151 produce [&(90)f(.001)^(90);(0)@o(diagrLen)];(whorlcolors[0])[@o(t*diagrLen)]diagr(t+step/4.)
\r
153 nproduce ;(whorlcolors[3])[^(90)f(.002)&(90)@o((t-1.)*diagrLen/2.)]diagr(t+step/4.)
\r
155 nproduce [^(90)f(.1)&(90) ;(14) Annulus(30,(t/2.-1.)*diagrLen/2.+diagrLen/4.,((t-step/2.)/2.-1.)*diagrLen/2.+diagrLen/4.)]f(.0001)diagr(t+step/4.)
\r
158 Annulus(N,Radius,radius):
\r
160 prop = radius/Radius
\r
161 nproduce _(.01)f(radius)+(90-alp/2.)
\r
162 for i in xrange(N):
\r
163 nproduce +(alp)[{F(Radius*(alp*deg2rad))+(90.+alp/2.)F(Radius*(1.-prop))+(90-alp/2.)F(Radius*(alp*deg2rad)*prop+.001)+(90.-alp/2.)F(Radius*(1.-prop))}]f(Radius*(alp*deg2rad))
\r
167 # creates the main stem (leaves + flower)
\r
169 # r = rank, t = time left before producing a new internode
\r
170 # produces a flower apex in state 1 initially
\r
171 if r == Rmax or not(stemflag): produce I(0)FA(T_F)
\r
172 elif t < eps : produce I(0)[EndGuide()/(phylangle*r)AL(0)]A(r+1,T)
\r
173 else: produce A(r,t-dt)
\r
183 FI(state,len,width,t):
\r
184 produce FI(state,len,width,t+dt)
\r
190 # floral apex = Receptacle internodes + lateral organs.
\r
191 # p corresponds to relative height in the receptacle (flower profile):
\r
192 # (p ranges from 0 to 1)
\r
193 # State corresponds to zone (1=sepal,2=petal,3=stamen,4=carpel)
\r
197 for s in xrange(4): # loop on the states (=zones)
\r
198 zone_size = pth[s+1]-pth[s] # height of the current zone
\r
199 len = zone_size/nbwhorls[s] # length of an internode in this zone
\r
200 for i in xrange(nbwhorls[s]):
\r
202 w = receptacleProfile(p) # normalized width
\r
203 len2 = len * receptacleHeight # scaling length
\r
204 w2 = w * receptacleWidth # and width
\r
205 beta = computeNormal(receptacleProfile,p,dp)
\r
206 #print "beta = ", beta
\r
207 # FI is a receptacle internode
\r
208 nproduce FI(s,len2,w2,0)[SetGuide()
\r
209 if s == 0 and verticille_1 : # sepal only
\r
210 for j in xrange(nb_sepal):
\r
211 if noise : ran_insert = insert_sepal_mu + random()*insert_sepal_sigma # gauss(insert_sepal_mu,insert_sepal_sigma)
\r
212 else: ran_insert = 0.
\r
213 nproduce /(360/nb_sepal) [ ^(-90) f(w2) ^(90) ^(-beta+opening(p)*360+ran_insert) OrgV1]
\r
214 if s == 1 and verticille_2: # petals only
\r
215 for j in xrange(nb_petal):
\r
216 if noise : ran_insert = insert_petal_mu + random()*insert_petal_sigma #gauss(insert_petal_mu,insert_petal_sigma)
\r
217 else: ran_insert = 0.
\r
218 nproduce /(360/nb_petal) [ ^(-90) f(w2) ^(90) ^(-beta+opening(p)*360+ran_insert) OrgV2]
\r
219 if s == 2 and verticille_3: # stamen only
\r
220 for j in xrange(nb_stamen):
\r
221 nproduce /(360/nb_stamen) [ ^(-90) f(w2) ^(90) ^(-beta+opening(p)*360) OrgV3]
\r
222 if s == 3 and verticille_4: # carpel only
\r
223 for j in xrange(nb_carpel):
\r
224 # print "j = ",j,"beta = ", beta, "p = ", p,"opening = ", opening(p)
\r
225 nproduce /(360/nb_carpel) [ ^(-90) f(w2) ^(90) ^(beta-opening(p)*360) OrgV4]
\r
227 if s == 0 and nb_sepal == 1 : nproduce /(phylangle)
\r
228 elif s == 1 and nb_petal == 1 : nproduce /(phylangle)
\r
229 elif s == 2 and nb_stamen == 1 : nproduce /(phylangle)
\r
230 elif s == 3 and nb_carpel == 1 : nproduce /(phylangle)
\r
231 # if a whorl (> 1 organ) shift by Pi/(2*N)
\r
232 elif s == 0 : nproduce /(180/nb_sepal)
\r
233 elif s == 1 : nproduce /(180/nb_petal)
\r
234 elif s == 2 : nproduce /(180/nb_stamen)
\r
235 elif s == 3 : nproduce /(180/nb_carpel)
\r
244 percent_growth = t/T_IN
\r
245 if percent_growth != 0.0:
\r
246 produce _(indiam*percent_growth);(leaf_color)F(inlen*percent_growth)
\r
248 tt = 1.*(NB_steps-t)/NB_steps
\r
249 produce _(indiam);(leaf_color)F(inlen*internodelen(tt))
\r
252 nproduce SetGuide()
\r
254 percent_growth = t/T_IN
\r
255 if percent_growth != 0.0:
\r
256 produce ;(leaf_color)-(90)f(indiam*percent_growth)+(90)/(-90)^(-60) Leaf
\r
257 else: produce ;(leaf_color)-(90)f(indiam)+(90)/(-90)^(-60)Leaf
\r
259 # Internodes composing the receptacle
\r
260 FI(state,len,width,t):
\r
261 if show_ABC_colors:
\r
262 orgtype = whorl2organ(state)
\r
263 colo=ABCcolors[orgtype]
\r
266 produce ;(colo)F(len,width)
\r
268 # Organ definitions
\r
271 produce ;(2) ParametricSurface(sepal_nerve,sepal_section,sepal_width,sepal_length/10.,sepal_nb_segment,Ssize)
\r
275 produce ,(3) ParametricSurface(petal_nerve,petal_section,petal_width,petal_length/10.,petal_nb_segment,Ssize)
\r
279 produce ;(4) ParametricSurface(stamen_nerve,None,stamen_width,stamen_length/10.,stamen_nb_segment,Ssize)
\r
283 nproduce ;(5) ParametricSurface(carpel_nerve,None,carpel_width,carpel_length/10.,carpel_nb_segment,Ssize)
\r
284 for i in xrange(10): nproduce _(.001)[\(90)f(.01)]
\r
288 if GA: produce Sepal
\r
289 elif GC: produce Carpel
\r
304 if GB and GC: produce Stamen
\r
305 elif GA and GB and (1-GC): produce f(.5)Petal
\r
306 elif GC and (1-GB): produce Carpel
\r
307 elif GA and (1-GB) and (1-GC): produce Sepal
\r
310 if GC: produce Carpel
\r
311 elif GA: produce Sepal
\r
317 produce F(0.3,0.02)LeafLet
\r
318 #produce F(0.3,0.02)[+(90)LeafLet][-(90)LeafLet]F(0.3,0.02)[+(90)LeafLet][-(90)LeafLet]F(0.3,0.02)LeafLet
\r
320 LeafLet --> ParametricSurface(leaf_nerve,leaf_section,leaf_width,leaf_length/10.,leaf_nb_segment,Ssize)
\r
322 ParametricSurface(axis,section,width,length,nb_segment,size):
\r
323 dx = 1. / nb_segment
\r
325 nproduce [SetGuide(axis,length*size)
\r
326 if not section is None: nproduce SetContour(section)
\r
327 nproduce _(width(0)) StartGC()
\r
328 for i in xrange(nb_segment):
\r
330 nproduce F(size*dx*length,size*width(x+dx))
\r
335 ###### INITIALISATION ######
\r
337 __lpy_code_version__ = 1.1
\r
339 def __initialiseContext__(context):
\r
340 import openalea.plantgl.all as pgl
\r
341 Color_1 = pgl.Material("Color_1" , ambient = (28,19,6) ,
\r
342 diffuse = 5.57143 ,
\r
343 specular = (50,50,50) ,
\r
344 emission = (9,9,9) ,
\r
346 Color_1.name = "Color_1"
\r
347 context.turtle.setMaterial(1,Color_1)
\r
348 Color_2 = pgl.Material("Color_2" , ambient = (18,37,5) ,
\r
349 diffuse = 2.35135 ,
\r
351 Color_2.name = "Color_2"
\r
352 context.turtle.setMaterial(2,Color_2)
\r
353 Color_3 = pgl.Material("Color_3" , ambient = (105,105,105) ,
\r
354 diffuse = 2.42857 ,
\r
355 specular = (42,42,42) ,
\r
357 Color_3.name = "Color_3"
\r
358 context.turtle.setMaterial(3,Color_3)
\r
359 Color_4 = pgl.Material("Color_4" , ambient = (84,56,0) ,
\r
360 diffuse = 2.44048 ,
\r
361 specular = (32,32,32) ,
\r
362 emission = (26,26,26) ,
\r
364 Color_4.name = "Color_4"
\r
365 context.turtle.setMaterial(4,Color_4)
\r
366 Color_5 = pgl.Material("Color_5" , ambient = (6,61,12) ,
\r
367 diffuse = 0.885246 ,
\r
368 specular = (124,124,124) ,
\r
370 Color_5.name = "Color_5"
\r
371 context.turtle.setMaterial(5,Color_5)
\r
372 Color_6 = pgl.Material("Color_6" , ambient = (41,0,0) ,
\r
373 diffuse = 2.36585 ,
\r
374 specular = (92,8,8) ,
\r
375 emission = (45,0,0) ,
\r
377 Color_6.name = "Color_6"
\r
378 context.turtle.setMaterial(6,Color_6)
\r
379 Color_8 = pgl.Material("Color_8" , ambient = (254,0,0) ,
\r
380 diffuse = 0.629921 ,
\r
381 specular = (255,0,0) ,
\r
382 emission = (255,0,0) ,
\r
384 Color_8.name = "Color_8"
\r
385 context.turtle.setMaterial(8,Color_8)
\r
386 Color_9 = pgl.Material("Color_9" , ambient = (255,255,0) ,
\r
387 diffuse = 0.45098 ,
\r
388 specular = (104,104,104) ,
\r
389 emission = (255,255,0) ,
\r
391 Color_9.name = "Color_9"
\r
392 context.turtle.setMaterial(9,Color_9)
\r
393 Color_10 = pgl.Material("Color_10" , ambient = (0,0,255) ,
\r
394 diffuse = 0.627451 ,
\r
396 Color_10.name = "Color_10"
\r
397 context.turtle.setMaterial(10,Color_10)
\r
398 Color_11 = pgl.Material("Color_11" , ambient = (255,185,7) ,
\r
400 specular = (0,0,0) ,
\r
401 emission = (255,3,3) ,
\r
403 Color_11.name = "Color_11"
\r
404 context.turtle.setMaterial(11,Color_11)
\r
405 Color_12 = pgl.Material("Color_12" , ambient = (255,0,255) ,
\r
407 specular = (0,0,0) ,
\r
409 Color_12.name = "Color_12"
\r
410 context.turtle.setMaterial(12,Color_12)
\r
411 Color_13 = pgl.Material("Color_13" , ambient = (0,218,0) ,
\r
413 specular = (0,0,0) ,
\r
415 Color_13.name = "Color_13"
\r
416 context.turtle.setMaterial(13,Color_13)
\r
417 Color_14 = pgl.Material("Color_14" , ambient = (0,0,255) ,
\r
419 specular = (0,0,0) ,
\r
420 transparency = 0.59 ,
\r
422 Color_14.name = "Color_14"
\r
423 context.turtle.setMaterial(14,Color_14)
\r
424 Color_15 = pgl.Material("Color_15" , ambient = (0,0,255) ,
\r
426 specular = (0,0,0) ,
\r
427 emission = (0,0,255) ,
\r
428 transparency = 0.57 ,
\r
430 Color_15.name = "Color_15"
\r
431 context.turtle.setMaterial(15,Color_15)
\r
432 context.options.setSelection('Warning with Turtle inconsistency',0)
\r
433 scalars = [('nb_sepal', 4, 1, 20), ('nb_petal', 4, 1, 20), ('nb_stamen', 5, 1, 30), ('sepal_length', 5, 1, 30), ('petal_length', 7, 1, 30), ('stamen_length', 4, 1, 30), ('carpel_length', 4, 1, 30), ('leaf_length', 6, 1, 100), ('sepalflag', True, False, True), ('petalflag', True, False, True), ('stamenflag', True, False, True), ('carpelflag', True, False, True), ('leafflag', True, False, True), ('noise', True, False, True), ('nb_carpel', 1, 0, 100), ('GA', True, False, True), ('GB', True, False, True), ('GC', True, False, True), ('verticille_1', True, False, True), ('verticille_2', True, False, True), ('verticille_3', True, False, True), ('verticille_4', True, False, True), ('stemflag', True, False, True), ('REPONSE', False, False, True), ('show_ABC_colors', False, False, True)]
\r
434 context["__scalars__"] = scalars
\r
435 for n,v,mnv,mxv in scalars:
\r
437 import openalea.plantgl.all as pgl
\r
438 sepal_width = pgl.NurbsCurve2D(
\r
439 ctrlPointList = pgl.Point3Array([(0, 0.0342648, 1),(0.0549666, 0.231318, 1),(0.510107, 0.163966, 1),(0.917895, 0.180944, 1),(1, 0.0268255, 1)]) ,
\r
441 sepal_width.name = "sepal_width"
\r
442 petal_width = pgl.NurbsCurve2D(
\r
443 ctrlPointList = pgl.Point3Array([(0, 0.0865445, 1),(0.231908, 0.208539, 1),(0.473697, 0.283924, 1),(0.709594, 0.349294, 1),(0.921729, 0.32141, 1),(1, 0.0588625, 1),(1, 0.0249496, 1)]) ,
\r
445 petal_width.name = "petal_width"
\r
446 carpel_width = pgl.NurbsCurve2D(
\r
447 ctrlPointList = pgl.Point3Array([(0, 0.0148928, 1),(0.314935, 0.0195945, 1),(0.5573, 0.016741, 1),(0.738597, 0.0186869, 1),(0.864667, 0.00214352, 1),(1, 0.0150678, 1)]) ,
\r
449 carpel_width.name = "carpel_width"
\r
450 stamen_width = pgl.NurbsCurve2D(
\r
451 ctrlPointList = pgl.Point3Array([(0, 0.00326303, 1),(0.353705, 0.00323103, 1),(0.675292, 0.00559957, 1),(0.76987, 0.00208676, 1),(0.803953, 0.0145622, 1),(0.995983, 0.0120889, 1),(1, 0.00026951, 1)]) ,
\r
453 stamen_width.name = "stamen_width"
\r
454 receptacleProfile = pgl.NurbsCurve2D(
\r
455 ctrlPointList = pgl.Point3Array([(0, 0.0118772, 1),(0.0483995, 0.147983, 1),(0.163483, 0.334726, 1),(0.310778, 0.395063, 1),(0.609005, 0.399069, 1),(0.810031, 0.34849, 1),(1, 0.111638, 1),(1, 0.0125388, 1)]) ,
\r
457 receptacleProfile.name = "receptacleProfile"
\r
458 leaf_width = pgl.NurbsCurve2D(
\r
459 ctrlPointList = pgl.Point3Array([(0, 0.0557769, 1),(0.165729, 0.301414, 1),(0.53533, 0.298777, 1),(0.805128, 0.302951, 1),(1, 0.0358566, 1)]) ,
\r
461 leaf_width.name = "leaf_width"
\r
462 opening = pgl.NurbsCurve2D(
\r
463 ctrlPointList = pgl.Point3Array([(0, 0.0109171, 1),(0.0777129, 0.420641, 1),(0.245081, 0.208734, 1),(0.417176, 0.202829, 1),(0.624831, 0.101988, 1),(0.823187, 0.0238984, 1),(0.929457, 0.0296022, 1),(1, 0.0281283, 1)]) ,
\r
465 opening.name = "opening"
\r
466 internodelen = pgl.NurbsCurve2D(
\r
467 ctrlPointList = pgl.Point3Array([(0, 0.00938666, 1),(0.166719, 0.00561404, 1),(0.166719, 0.0116702, 1),(0.189386, 0.0576949, 1),(0.195085, 1.00485, 1),(0.199993, 0.988534, 1),(0.800502, 0.989881, 1),(1, 0.989703, 1)]) ,
\r
469 internodelen.name = "internodelen"
\r
470 panel_0 = ({'active': True, 'visible': True, 'name': 'Functions'},[('Function',sepal_width),('Function',petal_width),('Function',carpel_width),('Function',stamen_width),('Function',receptacleProfile),('Function',leaf_width),('Function',opening),('Function',internodelen)])
\r
471 import openalea.plantgl.all as pgl
\r
472 sepal_nerve = pgl.NurbsCurve2D(
\r
473 ctrlPointList = pgl.Point3Array([(0.00267378, 0.0913267, 1),(0.0350336, 0.00690934, 1),(0.152417, 0.000153156, 1),(0.995128, -0.000720531, 1),(1.00415, 0.0994233, 1)]) ,
\r
475 sepal_nerve.name = "sepal_nerve"
\r
476 sepal_section = pgl.NurbsCurve2D(
\r
477 ctrlPointList = pgl.Point3Array([(-0.582092, 0.169143, 1),(-0.501529, 0.0149526, 1),(-0.164558, 0.00217632, 1),(0.19334, -0.00491485, 1),(0.55411, 0.00959401, 1),(0.593674, 0.167853, 1)]) ,
\r
479 sepal_section.name = "sepal_section"
\r
480 petal_section = pgl.NurbsCurve2D(
\r
481 ctrlPointList = pgl.Point3Array([(-0.41272, 0.0925189, 1),(-0.207731, -0.00665554, 1),(0.171749, -0.00758484, 1),(0.369546, 0.0855328, 1)]) ,
\r
483 petal_section.name = "petal_section"
\r
484 petal_nerve = pgl.NurbsCurve2D(
\r
485 ctrlPointList = pgl.Point3Array([(-0.000642917, 0.000642897, 1),(0.182381, -0.00558217, 1),(0.379294, 0.0534718, 1),(0.582615, 0.204976, 1),(0.820263, 0.0804393, 1),(0.992836, 0.0312321, 1)]) ,
\r
487 petal_nerve.name = "petal_nerve"
\r
488 stamen_nerve = pgl.NurbsCurve2D(
\r
489 ctrlPointList = pgl.Point3Array([(0.00267378, -0.0026738, 1),(0.133094, 0.0109457, 1),(0.259897, 0.0179014, 1),(0.332213, 0.0409697, 1),(0.399848, 0.0745133, 1)]) ,
\r
491 stamen_nerve.name = "stamen_nerve"
\r
492 carpel_nerve = pgl.NurbsCurve2D(
\r
493 ctrlPointList = pgl.Point3Array([(0.00267378, -0.0026738, 1),(0.0490853, 0.00302744, 1),(0.130466, 0.00251888, 1),(0.677461, 0.0196475, 1),(1.00546, 0.0234969, 1)]) ,
\r
495 carpel_nerve.name = "carpel_nerve"
\r
496 leaf_section = pgl.NurbsCurve2D(
\r
497 ctrlPointList = pgl.Point3Array([(-0.354412, 0.0971154, 1),(-0.13766, -0.0598824, 1),(0.129801, -0.0536486, 1),(0.370212, 0.0925605, 1)]) ,
\r
499 leaf_section.name = "leaf_section"
\r
500 leaf_nerve = pgl.NurbsCurve2D(
\r
501 ctrlPointList = pgl.Point3Array([(0.00267378, -0.0026738, 1),(0.132394, 0.01432, 1),(0.2452, 0.0352875, 1),(0.397249, 0.00479208, 1),(0.500326, -0.0518791, 1)]) ,
\r
503 leaf_nerve.name = "leaf_nerve"
\r
504 AxisShape = pgl.NurbsCurve2D(
\r
505 ctrlPointList = pgl.Point3Array([(-0.489325, 0.0330066, 1),(-0.25937, 0.0839531, 1),(0.104972, 0.0174484, 1),(0.409996, 0.0255427, 1)]) ,
\r
507 AxisShape.name = "AxisShape"
\r
508 panel_1 = ({'active': True, 'visible': True, 'name': 'Curve2D'},[('Curve2D',sepal_nerve),('Curve2D',sepal_section),('Curve2D',petal_section),('Curve2D',petal_nerve),('Curve2D',stamen_nerve),('Curve2D',carpel_nerve),('Curve2D',leaf_section),('Curve2D',leaf_nerve),('Curve2D',AxisShape)])
\r
509 parameterset = [panel_0,panel_1,]
\r
510 context["__functions__"] = [('sepal_width',sepal_width),('petal_width',petal_width),('carpel_width',carpel_width),('stamen_width',stamen_width),('receptacleProfile',receptacleProfile),('leaf_width',leaf_width),('opening',opening),('internodelen',internodelen),]
\r
511 context["__curves__"] = [('sepal_nerve',sepal_nerve),('sepal_section',sepal_section),('petal_section',petal_section),('petal_nerve',petal_nerve),('stamen_nerve',stamen_nerve),('carpel_nerve',carpel_nerve),('leaf_section',leaf_section),('leaf_nerve',leaf_nerve),('AxisShape',AxisShape),]
\r
512 context["__parameterset__"] = parameterset
\r
513 context["sepal_width"] = pgl.QuantisedFunction(sepal_width)
\r
514 context["petal_width"] = pgl.QuantisedFunction(petal_width)
\r
515 context["carpel_width"] = pgl.QuantisedFunction(carpel_width)
\r
516 context["stamen_width"] = pgl.QuantisedFunction(stamen_width)
\r
517 context["receptacleProfile"] = pgl.QuantisedFunction(receptacleProfile)
\r
518 context["leaf_width"] = pgl.QuantisedFunction(leaf_width)
\r
519 context["opening"] = pgl.QuantisedFunction(opening)
\r
520 context["internodelen"] = pgl.QuantisedFunction(internodelen)
\r
521 context["sepal_nerve"] = sepal_nerve
\r
522 context["sepal_section"] = sepal_section
\r
523 context["petal_section"] = petal_section
\r
524 context["petal_nerve"] = petal_nerve
\r
525 context["stamen_nerve"] = stamen_nerve
\r
526 context["carpel_nerve"] = carpel_nerve
\r
527 context["leaf_section"] = leaf_section
\r
528 context["leaf_nerve"] = leaf_nerve
\r
529 context["AxisShape"] = AxisShape
\r
530 __copyright__ = 'Virtual Plants Team'
\r
531 __institutes__ = 'INRIA'
\r
532 __authors__ = 'C. Godin\nF. Boudon'
\r