
PDE Download: SimpleTurtleRealA.pde
JAVA Download: SimpleTurtleRealA.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;
Transform T;
Translate t;
Transform r;
Scale s;
Sliders mySliders;
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*","fghf");
grammar.addRule("*g*","[fg]hi");
grammar.addRule("*h*","gh");
// this one makes it context dependant
grammar.addRule("igh","[ghg]");
println(grammar);
}
void initForm(){
obj = new Obj();
Param pvRx = new Param(1.0f,0,3.14f,"rotate X");
Param pvRy = new Param(2.0f,0,3.14f,"rotate Y");
Param pvRz = new Param(3.0f,0,3.14f,"rotate Z");
r = new Transform();
RotateX rx = new RotateX(pvRx);
RotateY ry = new RotateY(pvRy);
RotateZ rz = new RotateZ(pvRz);
r.add(rx);
r.add(ry);
r.add(rz);
Param pvTx = new Param(40,0,100,"translate");
Param pvTy = new Param(0,0,100,"translate");
Param pvTz = new Param(0,0,100,"translate");
t = new Translate(Anar.Pt(pvTx,pvTy,pvTz));
Param pvSx = new Param(0.99f,0,2,"scale X");
Param pvSy = new Param(0.99f,0,2,"scale Y");
Param pvSz = new Param(0.99f,0,2,"scale Z");
s = new Scale(Anar.Pt(pvSx,pvSy,pvSz));
T = new Transform();
T.add(t);
mySliders = new Sliders();
mySliders.add(r);
mySliders.add(t);
mySliders.add(s);
}
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);
next.apply(new Transform(turtle,T));
ptsCollector.add(next);
turtle = next;
T = new Transform();
T.add(t);
case 'g':
T.add(r);
break;
case 'h':
T.add(s);
break;
case 'i':
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();
mySliders.draw();
}
void keyPressed(){
if(key=='a'){
grammar.step();
println(grammar);
interpretGrammar();
}
if(key=='s'){
grammar.reset();
println(grammar);
interpretGrammar();
}
}

|