
PDE Download: SimpleTurtleCheap.pde
JAVA Download: SimpleTurtleCheap.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;
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*","[ii][hh]i");
grammar.addRule("*h*","gh");
// this one makes it context dependant
grammar.addRule("*i*","[gfg]");
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));
}
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 '[':
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();
}
}

|