
PDE Download: Test04qSnapToExistingGeometry.pde
JAVA Download: Test04qSnapToExistingGeometry.java
Click on anar+ terms to get the documentation.
import processing.opengl.*;
import anar.*;
/*
* Example for Anar library by Guillaume LaBelle + Julien Nembrini
* http://anar.ch
*/
boolean record = false;
Obj form;
Sliders mySliders;
void setup(){
size(800,400,OPENGL);
Anar.init(this);
Anar.drawAxis(true);
createForm();
}
void createForm(){
Obj core = new Obj();
form = new Obj();
// CREATE PARAMETERS and Add to SliderList
Param height = new Param(5,0,20,1.4f).tag("HH");
Param angle = new Param(0.05f, -PI/16f,PI/16f).tag("RR");
Param width = new Param(50,0,100).tag("WW");
Anar.sliders(height);
Anar.sliders(angle);
Anar.sliders(width);
// Create a Basic 3D form (a core structure)
Face f = new Circle(width,5);
for (int i = 0; i<40; i++)
core.add(f = new Face(f,new RotateZ(angle).translateZ(height)));
form.add(core);
Anar.camTarget(core);
// Create a second shape gate = (parametric sequence of lines)
Param lineWidth = new Param(2,0,100).tag("LW");
Param lineSpace = new Param(3,0,20).tag("LS");
Anar.sliders(lineWidth);
Anar.sliders(lineSpace);
Obj gate = new Obj();
Pts line = new Pts();
Pt p;
line.add(p = Anar.Pt(0,0,0));
line.add(Anar.Pt(p,new TranslateY(lineWidth)));
gate.add(line);
for (int i = 0; i<10; i++)
gate.add(line = new Pts(gate.lineEnd(),new TranslateX(lineSpace)));
gate.add(new Pts(Anar.Pt(0,0,0),Anar.Pt(0,0,30)));
form.add(gate); // added, gate will be displayed
// Now we have two basic Shapes (core and gate)
// let's track three points used as referential plan
// for the orientation of the gate (snapped on the core)
// Three points on the surface with three colors
Pt ia = core.face(5).pt(0);
ia.fill(255,0,0);
Pt ib = core.face(6).pt(0);
ib.fill(255,255,0);
Pt ic = core.face(5).ptEnd();
ic.fill(255);
form.add(ia);
form.add(ib);
form.add(ic);
// Create a transformation with a plan of reference
// where the three given points define the referential plan)
Transform t = new Transform(ia,ib);
t.postTransform = false; // remove the post Translation, so the part is
// moved
// and placed according to the referential coordinates.
// Apply the transformation to a copy of the object
form.add(new Obj(gate,t));
// Create similar as previous process but for many faces on the top of the
// form.
for (int i = 0; i<16; i++)
for (int j = 0; j<4; j++){
Pt iia = form.faceEnd(i+1).pt(j);
iia.fill(255,0,0);
Pt iib = form.faceEnd(i).pt(j);
iib.fill(255,255,0);
Pt iic = form.faceEnd(i+1).pt(j+1);
iic.fill(255);
form.add(iia);
form.add(iib);
form.add(iic);
Transform tt = new Transform(iia,iib,iic);
tt.postTransform = false;
form.add(new Obj(gate,tt));
}
// println(form.numOfFaces());
}
void draw(){
background(155);
Anar.draw();
form.draw();
}
void keyPressed(){
Anar.add(form.orphaned());
form.translateX(100);
}

|