Beispiel #1
0
 def get_lsystem(self):
     lsys = self._lsystem
     if not lsys:
         lsys = LSystem()
         for c in self.chromosomes:
             lsys.add_production(c.lhs, c.rhs)
         self._lsystem = lsys
         #print "DNA: LSystem:" ###
         #lsys.dump() ###
     return lsys
Beispiel #2
0
 def do_set(self, arg):
     'Set LSystem (algae, drangoncurve, twindragon, binarytree, koch)'
     switcher = {
         'algae': LSystem('A', {
             'A': 'AB',
             'B': 'A'
         }),
         'dragoncurve': LSystem('FX', {
             'X': 'X+YF+',
             'Y': '-FX-Y'
         }),
         'twindragon': LSystem('FX+FX+', {
             'X': 'X+YF',
             'Y': 'FX-Y'
         }),
         'binarytree': LSystem('0', {
             '1': '11',
             '0': '1[+0]-0'
         }),
         'koch': LSystem('F', {'F': 'F+F-F-F+F'}),
         'sierpinski': LSystem('F-G-G', {
             'F': 'F-G+F+G-F',
             'G': 'GG'
         }),
         'arrowhead': LSystem('F', {
             'F': 'G-F-G',
             'G': 'F+G+F'
         }),
         'hilbert': LSystem('A', {
             'A': '-BF+AFA+FB-',
             'B': '+AF-BFB-FA+'
         }),
         'moore': LSystem('LFL+F+LFL', {
             'L': '-RF+LFL+FR-',
             'R': '+LF-RFR-FL+'
         }),
         'fern': LSystem('X', {
             'X': 'F+[[X]-X]-F[-FX]+X',
             'F': 'FF'
         })
     }
     self.lsystem = switcher.get(arg, None)
 def __init__(self, **kwargs):
     super(LSystemImage, self).__init__(**kwargs)
     self.register_event_type('on_update')
     self.bind(pos=self.reload_image)
     self.bind(size=self.reload_image)
     self.iterations = 1
     self.background_color = (0, 0, 0)
     self.line_width = 1
     self.all_lines = []
     self.ls = LSystem()
     Clock.schedule_interval(self.update, 1 / 10.0)
Beispiel #4
0
        self.alpha = alpha
        self.beta = beta
        self.gamma = gamma
        self.dl = dl
        self.dw = dw
        self.budSize = bs
        self.min = m
        self.ls = ls
        self.a = 0
        self.b = 0
        self.c = 1
        self.csg = csg


data0 = Data(32.0, 20.0, 90.0, 1.0, 1.0, 1.1, 2.0, 3, topiary)

if __name__ == "__main__":
    seed = 1965
    ls = LSystem(seed, data0)
    ls.setAxiom([w(1), I(25, 0.5), A(1, 5, 0.5), Q()])
    ls.setDerivationDepth(31)
    ls.declare(P0())
    ls.declare(P1())
    ls.declare(P2())
    ls.declare(P3())
    ls.declare(P4())
    ls.declare(P5())
    ls.declare(P6())

    Renderer(ls, data0.csg, 'drawCSG', scale=5.0).render()
Beispiel #5
0
        return FSC(None,[I],None)

    def produce(self,actuals,data):
        i = actuals.unpack(ASC.SP)
        return I(i.t+data.dt,i.dl,i.dw)        

class P2(Production):
    def context(self):
        return FSC(None,[B],None)

    def produce(self,actuals,data):
        b = actuals.unpack(ASC.SP)
        return B(b.t+data.dt)        
    
class Data:
    def __init__(self,gp,dl,dw,dt):
        self.gp = gp
        self.dl = dl
        self.dw = dw
        self.dt = dt

data0 = Data(10,5,0.1,1)

ls = LSystem(int(sys.argv[1]),data0)
ls.declare(P0())
ls.declare(P1())
ls.declare(P2())
ls.setAxiom([A(1,data0.dl,data0.dw)])
ls.setDerivationDepth(100)
Renderer(ls,None,scale=2.75).render()
Beispiel #6
0
    turtle.penup()
    turtle.setpos(x, y)
    turtle.setheading(0)
    turtle.pendown()

    turtle.fd(width)
    turtle.rt(90)
    turtle.fd(height)
    turtle.rt(90)
    turtle.fd(width)
    turtle.rt(90)
    turtle.fd(height)

    turtle.penup()
    turtle.setpos(x_current, y_current)
    turtle.setheading(0)
    turtle.pendown()


if __name__ == '__main__':
    turtle.speed(100)

    turtle.pencolor('blue')
    bounds = (30, -30, 70, 70)
    draw_rect(bounds, turtle)

    turtle.pencolor('green')
    lsystem = LSystem(getattr(config, sys.argv[1]))
    lsystem.run(TurtleBoundsLoggerExecutor(turtle, bounds))
    turtle.mainloop()
Beispiel #7
0
import turtle
from lsystem import LSystem

plant = dict(axiom='X', productions={'X': 'F-[[X]+X]+F[+FX]-X', 'F': 'FF'})
plantL = LSystem(**plant)

q = []


def restore():
    pos, angl = q.pop()
    turtle.up()
    turtle.setposition(pos)
    turtle.seth(angl)
    turtle.down()


methods = {
    'F': lambda: turtle.fd(3),
    '-': lambda: turtle.left(25),
    '+': lambda: turtle.right(25),
    '[': lambda: q.append((turtle.pos(), turtle.heading())),
    ']': restore,
}

turtle.screensize(800, 1200)
turtle.ht()
turtle.pencolor('green')
turtle.delay(0)
turtle.seth(75)
for c in plantL[6]:
        self.r1 = r1
        self.r2 = r2
        self.a1 = a1
        self.a2 = a2
        self.f1 = f1
        self.f2 = f2
        self.w0 = w0
        self.q = q
        self.e = e
        self.m = m


fig_a = Data(0.75, 0.77, 35, -35, 0, 0, 30, 0.5, 0.4, 0.0)
fig_b = Data(0.65, 0.71, 27, -68, 0, 0, 20, 0.53, 0.50, 1.7)
fig_f = Data(0.92, 0.37, 0, 60, 180, 0, 2, 0.5, 0.0, 0.5)
fig_g = Data(0.8, 0.8, 30, -30, 137, 137, 30, 0.5, 0.5, 0.0)
fig_h = Data(0.95, 0.75, 5, -30, -90, 90, 40, 0.6, 0.45, 25.0)
fig_i = Data(0.55, 0.95, -5, 30, 137, 137, 5, 0.4, 0.0, 5.0)

if __name__ == "__main__":
    # Run stand alone
    if len(sys.argv) < 2:
        print "Usage: python", sys.argv[0], "<Data>"
        quit()
    data = eval(sys.argv[1])
    ls = LSystem(0, data)
    ls.declare(P0())
    ls.setAxiom([A(100, data.w0)])
    ls.setDerivationDepth(10)
    Renderer(ls, None, scale=2.0).render()