Ejemplo n.º 1
0
def main():

    from fn import Fn

    fn = Fn()
    for i in range(20):
        print(fn.name())
        sleep(0.1)

    print()

    fn = Fn(append_inc=True)
    print(fn.name())
    print(fn.current)  # overwritten when you call fn.name()
    print(fn.name())
    print(fn.current)

    print()

    fn = Fn(inc_size=3, append_inc=True)
    for i in range(20):
        print(fn.name())
        sleep(0.1)

    print()

    # you can't override the prefix

    fn = Fn(delimit='.', prefix='/some/path/', postfix='.txt', git_sha_size=10)
    print(fn.name())
    print(fn.name(postfix=''))
    print(fn.name(postfix='.png'))

    print()
Ejemplo n.º 2
0
def main():

    parser = argparse.ArgumentParser()
    parser.add_argument('--4-int-colour-list', nargs='+', type=int)

    import sys, traceback
    from fn import Fn
    from sand import Sand

    rgba_list = parser.parse_args()._get_args()

    sand = Sand(SIZE)
    sand.set_bg(BG)
    sand.set_rgba(rgba_list)

    fn = Fn(prefix='./res/', postfix='.png')
    si = spline_iterator()

    while True:
        try:
            itt, xy = next(si)
            sand.paint_dots(xy)
            if not itt % (5000 * GRID_Y):
                print(itt)
                sand.write_to_png(fn.name(), GAMMA)
        except Exception as e:
            print(e)
            sand.write_to_png(fn.name(), GAMMA)
            traceback.print_exc(file=sys.stdout)
Ejemplo n.º 3
0
def main():
    from modules.boids import B
    from sand import Sand

    from fn import Fn

    fn = Fn(prefix='./res/', postfix='.png')

    sand = Sand(SIZE)
    sand.set_bg(BACK)
    sand.set_rgba(FRONT)

    b = B(INIT_NUM, SIZE, STP)

    for itt in range(1000000):

        b.step(separation=SEPARATION, cohesion=COHESION, alignment=ALIGNMENT)

        xy = b.xy
        for i, nearby in enumerate(b.get_nearby()):
            if not nearby:
                continue
            start = zeros((len(nearby), 2))
            start[:, 0] = xy[i, 0]
            start[:, 1] = xy[i, 1]
            stop = xy[nearby, :]
            g = GRAINS * ones(len(nearby), 'int')
            sand.paint_strokes(start, stop, g)

        if not itt % DRAW_ITT:
            name = fn.name()
            print(itt, name)
            sand.write_to_png(name)
Ejemplo n.º 4
0
def get_show(dm):

    np_coord = zeros((NMAX, 6), 'float')
    # from modules.colors import cyan

    from fn import Fn
    fn = Fn(prefix='./res/')

    def show(render):

        render.clear_canvas()

        num = dm.np_get_triangles_coordinates(np_coord)
        render_triangle = render.triangle
        # render_circle = render.circle

        for f, vv in enumerate(np_coord[:num, :]):

            render.set_front(FRONT)
            render_triangle(*vv, fill=False)

            # rad = ONE*3
            # render.set_front(cyan)
            # render_circle(vv[0], vv[1], rad, fill=True)
            # render_circle(vv[2], vv[3], rad, fill=True)
            # render_circle(vv[4], vv[5], rad, fill=True)

        name = fn.name() + '.png'
        render.write_to_png(name)

    return show
Ejemplo n.º 5
0
def main():
    import sys, traceback
    from fn import Fn
    from sand import Sand
    from modules.helpers import get_colors

    sand = Sand(SIZE)
    sand.set_bg(BG)
    sand.set_rgba(FRONT)

    colors = get_colors('../colors/dark_cyan_white_black2.gif')
    nc = len(colors)

    fn = Fn(prefix='./res/', postfix='.png')
    si = spline_iterator()

    while True:
        try:
            itt, w, xy = next(si)
            rgba = colors[w % nc] + [0.0005]
            sand.set_rgba(rgba)
            sand.paint_dots(xy)
            if not itt % (40000):
                print(itt)
                sand.write_to_png(fn.name(), GAMMA)
        except Exception as e:
            print(e)
            sand.write_to_png(fn.name(), GAMMA)
            traceback.print_exc(file=sys.stdout)
Ejemplo n.º 6
0
def main():

  from iutils.render import Animate
  from differentialLine import DifferentialLine
  from modules.helpers import get_exporter

  # from modules.show import show_closed
  # from modules.show import show_detail
  from modules.show import show


  DF = DifferentialLine(NMAX, FARL*2, NEARL, FARL, PROCS)

  angles = sorted(random(INIT_NUM)*TWOPI)
  DF.init_circle_segment(MID,MID,INIT_RAD, angles)

  from fn import Fn
  fn = Fn(prefix='./res/')

  exporter = get_exporter(
    NMAX,
    {
      'nearl': NEARL,
      'farl': FARL,
      'stp': STP,
      'size': SIZE,
      'procs': PROCS
    }
  )

  def wrap(render):

    global i

    # animation stops when res is False
    res = steps(DF)

    ## if fn is a path each image will be saved to that path

    ## render outline
    num = DF.np_get_edges_coordinates(np_edges)
    if not i % 100:
      show(render,np_edges[:num,:], None, r=1.3*ONE)
      # render.write_to_png(fn.name())
      exporter(
        DF,
        fn.name()+'.2obj'
      )

    ## render solid
    # num = DF.get_sorted_vert_coordinates(np_verts)
    #show_closed(render,np_verts[:num,:],fn)

    i += 1

    return res

  render = Animate(SIZE, BACK, FRONT, wrap)
  render.start()
Ejemplo n.º 7
0
def main():
  from modules.fracture import Fracture
  from numpy.random import random
  from numpy import linspace
  from iutils.random import darts_rect
  from time import time

  from numpy.random import seed

  from sand import Sand

  from fn import Fn
  fn = Fn(prefix='./res/')


  sand = Sand(SIZE)
  sand.set_bg(BACK)
  sand.set_rgba(FRONT)

  seed(1)

  start = time()

  initial_sources = darts_rect(
      SOURCES,
      0.5, 0.5,
      1.0-2.0*EDGE, 1.0-2.0*EDGE,
      FRAC_STP
      )

  F = Fracture(
      FRAC_DOT,
      FRAC_DST,
      FRAC_STP,
      initial_sources=initial_sources,
      zone_leap=ZONE_LEAP,
      nmax=NMAX
      )

  for _ in range(INIT_FRACS):
    F.blow(1, EDGE+random((1, 2))*(1.0-2.0*EDGE))

  while True:
    res = F.step()
    F.frac_front(factor=SPAWN_FACTOR, angle=SPAWN_ANGLE, dbg=DBG)

    if not F.itt % ITT or not res:
      print('itt', F.itt, 'num', F.num, 'fnum', F.fnum, 'anum', F.anum, 'time', time()-start)

    if not res:
      print('done')
      break

  show(sand, F)
  name = fn.name()+'.png'
  print(name)
  sand.write_to_png(name)
Ejemplo n.º 8
0
def get_wrap(dl, colors, limit, prob, render_steps=10, export_steps=10):

    from fn import Fn
    from time import time
    # from iutils.ioOBJ import export_2d as export

    t0 = time()

    fn = Fn(prefix='./res/')

    def wrap(render):

        dl.step()
        dl.spawn_curl(limit=limit, prob=prob)
        # dl.spawn_normal(limit=limit, prob=prob)

        if dl.itt % render_steps == 0:

            print('itt', dl.itt, 'num', dl.num, 'time', time() - t0)

            num = dl.num

            render.clear_canvas()
            render.set_line_width(2 * dl.one)

            xy = dl.xy[:num, :]
            links = dl.links[:num, :]
            # line = dl.get_line()

            render.ctx.set_source_rgba(*colors['front'])

            ## dots
            # for x,y in xy:
            # render.circle(x, y, dl.one, fill=True)

            ## edges
            for i in range(num):
                b = links[i, 1]
                render.line(xy[i, 0], xy[i, 1], xy[b, 0], xy[b, 1])

            ## connected edges
            # remapped = xy[line,:]
            # render.ctx.move_to(remapped[0,0], remapped[0,1])
            # for x in remapped[:,:]:
            #   render.ctx.line_to(x[0], x[1])
            # render.ctx.fill()

        if dl.itt % export_steps == 0:

            name = fn.name()
            render.write_to_png(name + '.png')
            # export('differential-line-cuda', name+'.2obj', xy, lines=[line])

        return True

    return wrap
Ejemplo n.º 9
0
    def __init__(self, ):
        from fn import Fn
        from os import sep

        self.fn = Fn()
        self.repo = self.fn.repo
        self._store = self.fn.top_level + sep + '.genlog'
        self.__ensure_store()

        self.size = 1024
Ejemplo n.º 10
0
def main():

    from iutils.render import Animate
    from modules.fracture import Fractures

    # from dddUtils.ioOBJ import export_2d as export
    from fn import Fn
    fn = Fn(prefix='./res/', postfix='.2obj')

    F = Fractures(INIT_NUM,
                  INIT_RAD,
                  SOURCE_DST,
                  FRAC_DOT,
                  FRAC_DST,
                  FRAC_STP,
                  FRAC_SPD,
                  FRAC_DIMINISH,
                  FRAC_SPAWN_DIMINISH,
                  domain='rect')

    print(F.sources.shape)

    # uniform square distribution
    from numpy.random import random
    for _ in range(5):
        F.blow(2, random(size=2))

    # uniform circular distribution
    # for _ in xrange(5):
    # F.blow(3, random_uniform_circle(INIT_RAD, num=1))

    def wrap(render):

        if not F.i % 20:
            show(render, F)
            # vertices, paths = F.get_vertices_and_paths()
            # export('fractures', fn.name(), vertices, lines=paths)
            render.write_to_png(fn.name() + '.png')

        F.print_stats()
        res = F.step(dbg=False)
        n = F.spawn_front(factor=SPAWN_FACTOR, angle=SPAWN_ANGLE)
        print('spawned: {:d}'.format(n))

        # fn = './asdf_{:04d}.png'.format(F.i)
        # render.write_to_png(fn)

        # if not res:
        # vertices, paths = F.get_vertices_and_paths()
        # export('fractures', fn.name(), vertices, lines=paths)

        return res

    render = Animate(SIZE, BACK, FRONT, wrap)
    render.start()
Ejemplo n.º 11
0
def main():
    from sand import Sand
    from fn import Fn

    sand = Sand(SIZE)
    sand.set_rgba(FRONT)
    fn = Fn(prefix='./res/', postfix='.png')

    make_creatures(sand)
    name = fn.name()
    sand.write_to_png(name, GAMMA)
Ejemplo n.º 12
0
def main():

  from modules.sand import Sand
  from render.render import Animate
  from fn import Fn


  fn = Fn(prefix='./res/', postfix='.png')

  sand = Sand(
      SIZE,
      INUM,
      NOISE_STP,
      fn
      )

  ## radial lines
  # n = 50
  # for i, snum in enumerate(linspace(5,100,n).astype('int')):
  #   a = ones(snum, 'float') * i/n*TWOPI
  #   r = sorted(random(size=(snum, 1))*RAD)
  #   xy = 0.5+column_stack((cos(a), sin(a)))*r
  #   sand.init(xy)

  ## horizontal lines
  # n = 50
  # for i, snum in enumerate(linspace(5,100,n).astype('int')):
  #   x = linspace(EDGE, 1.0-EDGE, snum)
  #   y = ones(snum)*(EDGE + (i/(n-1.0))*2*RAD)
  #   xy = column_stack((x,y))
  #   sand.init(xy)

  ## messy spheres
  # n = 50
  # for i, snum in enumerate(linspace(5,100,n).astype('int')):
  #   a = sorted(random(snum)*TWOPI)
  #   r = ones((snum, 1))*(EDGE + (i/(n-1.0))*(RAD-EDGE))
  #   xy = 0.5+column_stack((cos(a), sin(a)))*r
  #   sand.init(xy)

  ## tidy spheres
  n = 50
  for i, snum in enumerate(linspace(20,80,n).astype('int')):
    a = linspace(0,TWOPI, snum)
    r = ones((snum, 1))*(EDGE + (i/(n-1.0))*(RAD-EDGE))
    xy = 0.5+column_stack((cos(a), sin(a)))*r
    sand.init(xy)

  render = Animate(SIZE, BACK, FRONT, sand.wrap)
  render.set_line_width(sand.one)
  render.transparent_pix()
  render.set_front(FRONT)

  render.start()
Ejemplo n.º 13
0
def main():
    fn = Fn()
    for _ in range(20):
        print(fn.name())
        sleep(0.1)

    print()

    fn = Fn()
    print(fn.name())

    print()

    fn = Fn(prefix='/some/path/', postfix='.txt', git_sha_size=10)
    print(fn.name())
    # note: you can't override the prefix
    print(fn.name(postfix=''))
    print(fn.name(postfix='.png'))

    print()
Ejemplo n.º 14
0
def main():
    sand = Sand(SIZE)
    sand.set_bg(BG)
    sand.set_rgba(FRONT)
    fn = Fn(prefix='./res/', postfix='.png')

    for index, spline in enumerate(spline_iterator()):
        sand.paint_dots(spline)
        if not index % SIZE:
            print('Iteration {}'.format(index))
    sand.write_to_png(fn.name(), GAMMA)
Ejemplo n.º 15
0
def main():
  from sand import Sand
  from fn import Fn

  sand = Sand(SIZE)
  sand.set_bg(BACK)
  sand.set_rgba(FRONT)
  fn = Fn(prefix='./res/', postfix='.png')

  write(sand)
  # sand.set_bg(bw)
  name = fn.name()
  sand.write_to_png(name, GAMMA)
Ejemplo n.º 16
0
def get_wrap(dl, colors, render_steps=10, export_steps=10):
  from fn import Fn
  # from dddUtils.ioOBJ import export_2d as export

  fn = Fn(prefix='./res/')

  def wrap(render):

    dl.step()

    dl.spawn(ratio=0.1, age=1000)

    if not dl.itt % export_steps:

      print(('itt', dl.itt, 'num', dl.num))
      num = dl.num

      render.clear_canvas()

      vertices, edges = dl.link_export()

      render.ctx.set_source_rgba(*colors['purple'])
      for a, b in edges:
        render.line(
            vertices[a, 0],
            vertices[a, 1],
            vertices[b, 0],
            vertices[b, 1]
            )

      render.ctx.set_source_rgba(*colors['front'])
      for i in range(num):
        render.circle(
            vertices[i, 0],
            vertices[i, 1],
            dl.node_rad*0.6,
            fill=True
            )

    if not dl.itt % export_steps:

      name = fn.name()
      render.write_to_png(name+'.png')
      # export('lattice', name+'.2obj', vertices, edges=edges)
      write_svg(name, vertices, edges)

    return True

  return wrap
Ejemplo n.º 17
0
def main():
    from sand import Sand
    from fn import Fn

    from iutils.ioOBJ import export_2d as export

    sand = Sand(SIZE)
    sand.set_rgba(FRONT)
    fn = Fn(prefix='./res/')

    vertices, lines = make_creatures(sand)

    name = fn.name()
    sand.write_to_png(name + '.png', GAMMA)
    export('scribbles', name + '.2obj', verts=vertices, lines=lines)
def main():
    from modules.fracture import Fracture
    from iutils.render import Animate
    from numpy.random import random
    from iutils.random import darts_rect
    from time import time
    from fn import Fn

    fn = Fn(prefix='./res/')

    start = time()

    initial_sources = darts_rect(SOURCES, 0.5, 0.5, 1.0 - 2.0 * EDGE,
                                 1.0 - 2.0 * EDGE, FRAC_STP)

    F = Fracture(FRAC_DOT,
                 FRAC_DST,
                 FRAC_STP,
                 initial_sources=initial_sources,
                 zone_leap=ZONE_LEAP,
                 nmax=NMAX)

    for _ in range(20):
        F.blow(1, EDGE + random((1, 2)) * (1.0 - 2.0 * EDGE))

    def wrap(render):
        print('itt', F.itt, 'num', F.num, 'fnum', F.fnum, 'anum', F.anum,
              'time',
              time() - start)
        res = F.step()

        n = F.frac_front(factor=SPAWN_FACTOR, angle=SPAWN_ANGLE, dbg=DBG)
        if n > 0:
            print('new fracs: {:d}'.format(n))

        if not F.itt % DRAW_ITT:
            show(render, F)

        return res

    render = Animate(SIZE, BACK, FRONT, wrap)
    render.set_line_width(LINEWIDTH)
    render.start()

    name = fn.name()
    render.write_to_png(name + '.png')
    export(name + '.2obj', F)
Ejemplo n.º 19
0
def main():
  import sys, traceback
  from fn import Fn
  from sand import Sand
  from modules.helpers import get_colors

  sand = Sand(SIZE)
  sand.set_bg(BG)
  sand.set_rgba(FRONT)

  colors = get_colors('colors/dark_cyan_white_black.gif')
  nc = len(colors)

  fn = Fn(prefix='./res/', postfix='.png')
  si = spline_iterator()

  while True:
    try:
      itt, w, xy = next(si)
      rgba = colors[w%nc] + [0.005]
      sand.set_rgba(rgba)
      sand.paint_dots(xy)
      if not itt%(50):
        print("ci:"+str(itt))
      if not itt%(5000):
        if os.path.isfile("./res/dump1.png"):
          print("printing to dump2:"+str(itt))
          sand.write_to_png("./res/dump2.png", GAMMA)
          os.remove("./res/dump1.png")
        else:
          print("printing to dump1:"+str(itt))
          sand.write_to_png("./res/dump1.png", GAMMA)
          if os.path.isfile("./res/dump2.png"):
            os.remove("./res/dump2.png")
    except Exception as e:
      print(e)
      sand.write_to_png("./res/current.png", GAMMA)
      traceback.print_exc(file=sys.stdout)
Ejemplo n.º 20
0
def main():
    import sys, traceback
    from fn import Fn
    from sand import Sand

    sand = Sand(SIZE)
    sand.set_bg(BG)
    sand.set_rgba(FRONT)

    fn = Fn(prefix='./res/', postfix='.png')
    si = spline_iterator()

    while True:
        try:
            itt, xy = next(si)
            sand.paint_dots(xy)
            if not itt % (500 * GRID_Y):
                print(itt)
                sand.write_to_png("./res/currenrt.png", GAMMA)
        except Exception as e:
            print(e)
            sand.write_to_png(fn.name(), GAMMA)
            traceback.print_exc(file=sys.stdout)
Ejemplo n.º 21
0
    def __init__(self,
                 con='localhost:6379',
                 chan='erosion',
                 resolution=1000,
                 gsamples=100000,
                 show=False,
                 path='./',
                 verbose=False):

        self.con = str(con)
        host, port = _parse_con(self.con)
        self.host = host
        self.port = port
        self.chan = str(chan)

        self.imsize = int(resolution)
        self.gsamples = int(gsamples)
        self.verbose = verbose
        self.show = show
        self.red = None
        self.count = 0
        self.desert = None
        self.fn = Fn(prefix=path, postfix='.png')
Ejemplo n.º 22
0
def main():

  from differentialMesh3d import DifferentialMesh3d
  from modules.ioOBJ import load_move_scale as load_obj
  from modules.random import random_unit_vec
  from modules.geometry import get_show_geometry
  from modules.utils import get_seed_selector
  from modules.utils import print_stats
  from modules.utils import get_exporter

  from fn import Fn
  fn = Fn(prefix='./res/', postfix='.obj')

  DM = DifferentialMesh3d(
      nmax=NMAX,
      zonewidth=ZONEWIDTH,
      nearl=NEARL,
      farl=FARL,
      procs=PROCS
      )

  data = load_obj(
      OBJ,
      s=SCALE,
      mx=[0.5] * 3
      )
  info = DM.initiate_faces(list(data['vertices']), list(data['faces']))

  if info['min_edge'] < NEARL:
    print('all edges are too short. try scaling up initial size.')
    return

  seed_selector = get_seed_selector(DM, SEEDTYPE, SEEDRATIO)

  noise = random_unit_vec(DM.get_vnum(), STP*100.)
  DM.position_noise(noise, scale_intensity=-1)

  DM.optimize_edges(SPLIT_LIMIT, FLIP_LIMIT, FLIP_CURVATURE)

  for he in range(DM.get_henum()):
    DM.set_edge_intensity(he, 1.0)

  show_geometry = get_show_geometry(DM, NMAX)

  def geometry_generator():
    seeds = seed_selector()
    i = 0
    k = 0
    box = array((-1, -1, -1, 1, 1), 'float')
    while True:
      i += 1
      for _ in range(SPEEDUP):
        k += 1
        DM.optimize_position(
            REJECT,
            ATTRACT,
            DIMINISH,
            SMOOTH,
            scale_intensity=1
            )

        DM.optimize_edges(SPLIT_LIMIT, FLIP_LIMIT, FLIP_CURVATURE)

        if len(seeds) > 0:
          DM.set_vertices_intensity(seeds, 1.0)

        if k%SEED_FREQ == 0:
          seeds = seed_selector()

      print_stats(k, DM, meta='alive v: {:d}'.format(len(seeds)))

      box = show_geometry()

      yield box

  from view3d import View3d
  v3d = View3d(
      size=SCREEN_SIZE,
      initial_scale=INITIAL_SCALE,
      autorotate=AUTOROTATE,
      save_img=SAVE_IMG
      )
  v3d.start(geometry_generator)

  export = get_exporter(DM, fn, NMAX)
  export()
Ejemplo n.º 23
0
def get_wrap(l, colors, node_rad, render_steps=10, export_steps=10):

  from time import time
  from time import strftime
  from numpy.linalg import norm
  from numpy import sqrt
  from iutils.ioOBJ import export_2d as export


  t0 = time()

  from fn import Fn
  fn = Fn(prefix='./res/')

  step = l.step()
  kill_rad = l.kill_rad
  one = l.one

  def wrap(render):

    final = False
    vs_xy = []

    try:
      vs_xy = next(step)
    except StopIteration:
      final = True

    if (l.itt % render_steps == 0) or final:

      vnum = l.vnum
      edges = l.edges[:l.enum,:]

      width = l.width_calc(scale=6.5*node_rad, min_width=node_rad, po=0.2)

      vxy = l.vxy[:vnum,:]

      zsize = len(l.zone_node)
      print(strftime("%Y-%m-%d %H:%M:%S"), 'itt', l.itt,
          'snum', l.snum, 'vnum', vnum, 'zone', zsize, 'time', time()-t0)

      render.clear_canvas()

      # # nearby
      # render.set_front(colors['cyan'])
      # for v,s in vs_xy:
        # render.line(v[0], v[1], s[0], s[1])

      # veins
      # render.set_front(colors['vein'])
      # for i,(x,y) in enumerate(vxy):
        # r = node_rad
        # # r = (((max_gen-gen[i])/max_gen)**1.1)*node_rad
        # render.circle(x, y, r, fill=True)

      # edges
      render.set_front(colors['vein'])
      for ee in edges:
        xy = vxy[ee, :]
        # r = node_rad
        r = width[ee[1]]
        try:
          render.circles(xy[0,0], xy[0,1], xy[1,0], xy[1,1], r, nmin=3)
        except Exception as e:
          print('WARNING', str(e))

      ## sources
      # render.set_front(colors['red'])
      # for x,y in l.sxy:
        # render.circle(x, y, one, fill=True)

      # for x,y in l.sxy[l.smask]:
        # render.circle(x, y, kill_rad, fill=False)

    if (l.itt % export_steps == 0) or final:
      name = fn.name()
      render.write_to_png(name+'.png')
      # export('leaf', name+'.2obj', vxy)

    if final:
      return False

    # raw_input('')
    return True

  return wrap
Ejemplo n.º 24
0
#!/usr/bin/env python
import numpy as np
from fn import Fn

from src.draw import Canvas
from src.rnd import rnd_crc

small_conf = {
    "width": 4000,
    "height": 4000,
    "bg": (0, 0, 0),
    "fg": (255, 255, 255, 0.25),
    "fname": Fn().name(),
}


def acc_vec(_pos, _mass):
    d2 = _pos @ (-2 * _pos.T)
    diag = -0.5 * np.einsum('ii->i', d2)
    d2 = d2 + diag + diag[:, None]
    np.einsum('ii->i', d2)[...] = 1
    return np.nansum(
        (_pos[:, None, :] - _pos) * (_mass[:, None] * d2**-1.5)[..., None],
        axis=0)


with Canvas(**small_conf) as c:

    # Initial particle conditions
    n = 3000
    pos = np.random.uniform(0, 4000, (n, 2))
Ejemplo n.º 25
0
def main():

  from time import time
  from itertools import count

  from iutils.render import Render
  from modules.helpers import print_stats
  from modules.show import show
  # from modules.show import show_closed

  from differentialLine import DifferentialLine
  from modules.helpers import get_exporter

  from numpy.random import random

  from fn import Fn

  DF = DifferentialLine(NMAX, FARL*2, NEARL, FARL, PROCS)

  fn = Fn(prefix='./res/')

  exporter = get_exporter(
    NMAX,
    {
      'nearl': NEARL,
      'farl': FARL,
      'stp': STP,
      'size': SIZE,
      'procs': PROCS
    }
  )

  render = Render(SIZE, BACK, FRONT)

  render.ctx.set_source_rgba(*FRONT)
  render.ctx.set_line_width(LINEWIDTH)

  angles = sorted(random(INIT_NUM)*TWOPI)

  DF.init_circle_segment(MID,MID,INIT_RAD, angles)

  t_start = time()


  for i in count():

    DF.optimize_position(STP)
    # spawn_curl(DF,NEARL)
    spawn(DF, NEARL, 0.03)

    if i % STAT_ITT == 0:

      print_stats(i,time()-t_start,DF)

    if i % EXPORT_ITT == 0:

      name = fn.name()

      num = DF.np_get_edges_coordinates(np_edges)
      show(render,np_edges[:num,:],name+'.png')

      exporter(
        DF,
        name+'.2obj'
      )
Ejemplo n.º 26
0
def main():

    from iutils.render import Animate
    from differentialLine import DifferentialLine

    from fn import Fn

    from modules.show import sandstroke
    from modules.show import dots

    DF = DifferentialLine(NMAX, FARL * 2, NEARL, FARL, PROCS)

    ## arc
    # angles = sorted(random(INIT_NUM)*pi*1.5)
    # xys = []
    # for a in angles:
    # x = 0.5 + cos(a)*0.06
    # y = 0.5 + sin(a)*0.06
    # xys.append((x,y))
    # DF.init_line_segment(xys, lock_edges=1)

    ## vertical line
    #xx = sorted(0.45+0.1*random(INIT_NUM))
    #yy = MID+0.005*(0.5-random(INIT_NUM))
    #xys = []
    #for x,y in zip(xx,yy):
    #xys.append((x,y))
    #DF.init_line_segment(xys, lock_edges=1)

    # diagonal line
    # yy = sorted(0.3+0.4*random(INIT_NUM))
    # xx = 0.3+linspace(0,0.4,num=INIT_NUM)
    # xys = []
    # for x,y in zip(xx,yy):
    # xys.append((x,y))
    # DF.init_line_segment(xys, lock_edges=1)

    angles = sorted(random(INIT_NUM) * TWOPI)
    DF.init_circle_segment(MID, MID, FARL * 0.2, angles)

    fn = Fn(prefix='./res/', postfix='.png')

    def wrap(render):

        global np_coords
        global np_vert_coords
        global grains

        ## if fn is a path each image will be saved to that path

        if not render.steps % 3:
            f = fn.name()
        else:
            f = None

        grains += (-1)**floor(2 * random())
        print(grains)
        if grains < 0:
            grains = 0

        res = steps(DF)
        render.set_front(FRONT)

        coord_num = DF.np_get_edges_coordinates(np_coords)
        sandstroke(render, np_coords[:coord_num, :], grains, f)

        if not random() < 0.1:
            vert_num = DF.np_get_vert_coordinates(np_vert_coords)
            dots(render, np_vert_coords[:vert_num, :], None)

        return res

    render = Animate(SIZE, BACK, FRONT, wrap)
    render.start()
Ejemplo n.º 27
0
def main():
  from fn import Fn
  fn = Fn(prefix='./res/').name() + '.png'
  copy_file('./res/sample.png', fn)
Ejemplo n.º 28
0
def main():

  from modules.path import Path

  from modules.helpers import get_limit_indices
  from modules.export import Exporter

  from render import Render
  from fn import Fn

  fn = Fn(prefix='./res/')

  exporter = Exporter()


  render = Render(SIZE, BACK, FRONT)
  render.set_line_width(LINE_WIDTH)

  #the = 0.5*PI*ones(NMAX)
  xy = column_stack((ones(NMAX)*START_X,linspace(START_Y,STOP_Y,NMAX)))

  draw_start,draw_stop = get_limit_indices(xy,top=START_Y,bottom=STOP_Y)
  # last_xy = xy[draw_start:draw_stop,:]

  # draw_circles = render.circles

  for i in count():

    ## gradient-like distribution of lines
    pix = sqrt(1+i)*ONE

    ## linear distribution of lines
    #pix = PIX_BETWEEN*ONE

    path = Path(xy,pix)
    path.trace(-PIHALF)
    path.noise()
    path.interpolate(int(pix/ONE)*2)

    xy = path.xy_interpolated

    ## remove nodes above and below canvas
    canvas_start,canvas_stop = get_limit_indices(xy,top=0.,bottom=1.)
    xy = xy[canvas_start:canvas_stop,:]

    ## render nodes above STOP_Y and below START_Y
    draw_start,draw_stop = get_limit_indices(xy,top=START_Y,bottom=STOP_Y)
    #draw_circles(xy[draw_start:draw_stop,:],\
                 #ones(draw_stop-draw_start)*ONE)
    render.path(xy[draw_start:draw_stop,:])

    exporter.add(xy[draw_start:draw_stop,:])

    xmax = xy[:,0].max()
    if (xmax>STOP_X):
      break

    print 'num',i,'points', len(path.xy_circles),'x', xmax

  name = fn.name()

  render.transparent_pix()
  render.write_to_png(name+'.png')
  exporter.export(name+'.2obj')
Ejemplo n.º 29
0
def main():
  from fn import Fn
  from modules.differentialLattice import DifferentialLattice
  from modules.helpers import get_colors
  from modules.helpers import spawn_circle
  from numpy import array
  from numpy import cumsum
  from numpy import sqrt
  from numpy import linspace
  from numpy import sort
  from numpy import ones
  from numpy.random import random
  from numpy.random import seed
  from sand import Sand
  from numpy import pi
  from numpy import sin
  from numpy import cos
  TWOPI = pi*2.0


  fn = Fn(prefix='./res/')

  size = 512
  one = 1.0/size

  threads = 512
  zone_leap = 512
  grains =  20


  init_num = 20

  stp = one*0.03
  spring_stp = 5
  reject_stp = 0.1
  cohesion_stp = 1.0

  max_capacity = 30


  node_rad = 4*one
  spring_reject_rad = node_rad*1.9
  spring_attract_rad = node_rad*2.0
  outer_influence_rad = 10.0*node_rad
  link_ignore_rad = 0.5*outer_influence_rad

  colors = get_colors('../colors/black_t.gif')
  # colors = get_colors('../colors/ir.jpg')
  nc = len(colors)

  sand = Sand(size)
  sand.set_bg(BACK)
  sand.set_rgba(FRONT)

  DL = DifferentialLattice(
      size,
      stp,
      spring_stp,
      reject_stp,
      cohesion_stp,
      max_capacity,
      node_rad,
      spring_reject_rad,
      spring_attract_rad,
      outer_influence_rad,
      link_ignore_rad,
      threads=threads,
      zone_leap=zone_leap,
      nmax=50000000
      )

  spawn_circle(DL, init_num, xy=array([[0.5, 0.5]]), dst=node_rad*0.8, rad=0.01)

  itt = 0
  while True:

    itt += 1
    DL.step()
    DL.spawn(ratio=0.1, age=1000)

    if not itt%20:
      print(('itt', DL.itt, 'num', DL.num))

    vertices, edges = DL.link_export()

    # sand.set_rgba(FRONT)
    # sand.paint_strokes(
    #     vertices[edges[:,0],:].astype('double'),
    #     vertices[edges[:,1],:].astype('double'),
    #     grains
    #     )

    # sand.paint_circles(
    #     vertices.astype('double'),
    #     random(len(vertices))*one*4.0,
    #     grains
    #     )

    # for k,(a,b) in enumerate(edges):
    #   w = a*nc+b
    #   rgba = colors[w%nc]+[0.001]
    #   sand.set_rgba(rgba)
    #   sand.paint_strokes(
    #       vertices[a:a+1,:].astype('double'),
    #       vertices[b:b+1,:].astype('double'),
    #       grains
    #       )


    n = 20
    for k, (x, y) in enumerate(vertices):
      rgba = colors[k%nc]+[0.0005]
      sand.set_rgba(rgba)
      o = ones((n, 2), 'float')
      o[:,0] *= x
      o[:,1] *= y
      r = (1.0-2.0*random(n))*4*one
      sand.paint_filled_circles(
          o,
          r,
          grains
          )

    if not itt%5:

      # vertices, edges = DL.link_export()
      # n = 1000
      # sand.set_bg(BACK)
      # seed(1)
      # for k, (x, y) in enumerate(vertices):
      #   rgba = colors[k%nc]+[0.005]
      #   sand.set_rgba(rgba)
      #   o = ones((n, 2), 'float')
      #   o[:,0] *= x
      #   o[:,1] *= y
      #   r = random()*one*3+cumsum(random(n)*random()*10)*one*0.002
      #   # r = sqrt(linspace(2.0, 10.0, n))*one
      #   # r = ones(n, 'float')*one*
      #   sand.paint_circles(
      #       o,
      #       r,
      #       grains
      #       )

      name = fn.name() + '.png'
      print(name)
      sand.write_to_png(name, 2)