This browser does not have a Java Plug-in.
Get the latest Java Plug-in here.

anar+

by   LaBelle + Nembrini
©2008

built with ( )
   examples index
Rotate: middle click or key[1]
Zoom in|out: wheel button or key[2]
AutoRotate: key[5]
(First Click inside the applet to enable keys)

This applet use OpenGL, you might have to install extra jogl libraries once to view this applet. You may have a look at image capture and video at the bottom of this page. You might accept security security permenently to remove the security prompts on each pages.



sourcecode


   PDE Download:   SimpleTurtleCheapRandom.pde
   JAVA Download:   SimpleTurtleCheapRandom.java


Click on anar+ terms to get the documentation.

import processing.opengl.*;
import anar.*;
 
 
import java.util.*;
 
import lsys.Grammar;
 
 
 
/*
 * Example for Anar library by Guillaume LaBelle + Julien Nembrini
 * http://anar.ch
 */
 
 
Pts     ptsA = new Pts();
 
 
Face    f;
 
Grammar grammar;
 
Obj     obj;
 
 
Translate tX, tY, tZ, tmZ, tpY1, tpY2;
 
Sliders   mySlider;
 
 
void setup(){
    size(800,400,OPENGL);
  Anar.init(this);
  initGrammar();
  initForm();
  interpretGrammar();
}
 
void initGrammar(){
  grammar = new Grammar("fgf");
  // here define the rules
  // * means any kind of symbol
  // the example rules below are therefore non contextual
  grammar.addRule("*f*","fi");
  grammar.addRule("*g*","[iif][hfh]i");
  grammar.addRule("*h*","gh");
  // this one makes it probabilistic
  String[] prods = {"jf", "k"};
  float[] probs = {.5f, .5f};
  grammar.addRule("*i*",prods,probs);
 
 
  println(grammar);
 
}
 
void initForm(){
  obj = new Obj();
 
 
  Param pvTXx = new Param(40, -100,100,"translate");
  Param pvTXy = new Param(0, -100,100,"translate");
  Param pvTXz = new Param(0, -100,100,"translate");
  tX = new Translate(Anar.Pt(pvTXx,pvTXy,pvTXz));
 
  Param pvTYx = new Param(0, -100,100,"translate");
  Param pvTYy = new Param(40, -100,100,"translate");
  Param pvTYz = new Param(0, -100,100,"translate");
  tY = new Translate(Anar.Pt(pvTYx,pvTYy,pvTYz));
 
  Param pvTZx = new Param(0, -100,100,"translate");
  Param pvTZy = new Param(0, -100,100,"translate");
  Param pvTZz = new Param(40, -100,100,"translate");
  tZ = new Translate(Anar.Pt(pvTZx,pvTZy,pvTZz));
 
  Param pvTmZx = new Param(0, -100,100,"translate");
  Param pvTmZy = new Param(0, -100,100,"translate");
  Param pvTmZz = new Param( -40, -100,100,"translate");
  tmZ = new Translate(Anar.Pt(pvTmZx,pvTmZy,pvTmZz));
 
  Param pvTpYx = new Param(11, -100,100,"translate");
  Param pvTpYy = new Param(34, -100,100,"translate");
  Param pvTpYz = new Param(42, -100,100,"translate");
  tpY1 = new Translate(Anar.Pt(pvTpYx,pvTpYy,pvTpYz));
 
  Param pvTpZx = new Param( -23, -100,100,"translate");
  Param pvTpZy = new Param( -50, -100,100,"translate");
  Param pvTpZz = new Param( -20, -100,100,"translate");
  tpY2 = new Translate(Anar.Pt(pvTpZx,pvTpZy,pvTpZz));
 
 
}
 
 
void interpretGrammar(){
 
  obj = new Obj();
 
  Pts stack = new Pts();
  Pt seed = Anar.Pt(0,0,0);
  Pt turtle = seed;
 
  ArrayList stackPts = new ArrayList();
  Pts ptsCollector = new Pts();
  ptsCollector.add(turtle);
 
  Iterator it = grammar.getSentence().iterator();
  while (it.hasNext()){
    String str = (String)it.next();
 
    switch(str.charAt(0)){
      case 'f':
        Pt next = Anar.Pt(turtle,tX);
        ptsCollector.add(next);
        turtle = next;
      case 'g':
        next = Anar.Pt(turtle,tY);
        ptsCollector.add(next);
        turtle = next;
      break;
      case 'h':
        next = Anar.Pt(turtle,tZ);
        ptsCollector.add(next);
        turtle = next;
      break;
      case 'i':
        next = Anar.Pt(turtle,tmZ);
        ptsCollector.add(next);
        turtle = next;
      break;
      case 'j':
        next = Anar.Pt(turtle,tpY1);
        ptsCollector.add(next);
        turtle = next;
      break;
      case 'k':
        next = Anar.Pt(turtle,tpY2);
        ptsCollector.add(next);
        turtle = next;
      break;
      case '[':
        stack.add(turtle);
        stackPts.add(ptsCollector);
        ptsCollector = new Pts();
        ptsCollector.add(turtle);
      break;
      case ']':
        turtle = stack.remove(stack.size()-1);
        obj.add(ptsCollector);
        ptsCollector = (Pts)stackPts.remove(stackPts.size()-1);
      break;
      default:
      break;
    }
  }
  obj.add(ptsCollector);
  obj.pts.render = new RenderPtsLine(new AColor(128));
 
  Anar.camTarget(obj);
 
  mySlider = new Sliders(obj);
}
 
void draw(){
  if(frameCount%2==0)
    background(155);
  else
    background(153);
 
  obj.draw();
  mySlider.draw();
 
}
 
 
void keyPressed(){
  if(key=='a'){
    grammar.step();
    println(grammar);
    interpretGrammar();
  }
  if(key=='s'){
    grammar.reset();
    println(grammar);
    interpretGrammar();
 
  }
}
 
 
 
 



screenshots