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:   Test04dGaussian.pde
   JAVA Download:   Test04dGaussian.java


Click on anar+ terms to get the documentation.

import processing.opengl.*;
import anar.*;
 
 
 
 
 
/*
 * Example for Anar library by Guillaume LaBelle and Julien Nembrini 2008
 * http://anar.ch
 */
 
 
 
Obj     myObj;
 
Sliders rotations = new Sliders();
Sliders global    = new Sliders();
 
Sliders display;
 
void setup(){
    size(800,400,OPENGL);
  Anar.init(this);
  Anar.drawAxis();
 
  initForm();
}
 
void initForm(){
  myObj = new Obj();
 
  // ORGINAL STARTING PARAMETERS
  Pt origin = Anar.Pt(0,0,0);
 
  Param w = new Param(30);
  Param h = new Param(40);
  global.add(w);
  global.add(h);
 
  // CREATE AN ARRAY OF PARAM
  Param[][] individualRotations = new Param[40][20];
 
  for (int i = 0; i<individualRotations.length; i++)
    for (int j = 0; j<individualRotations[i].length; j++){
      Param moduleRotation = new Param(0);
      individualRotations[i][j] = moduleRotation;
      rotations.add(moduleRotation);
    }
 
 
  // PROPAGATE SOME LOCAL TRANSFORMATIONS TO INDIVIDUALROTATIONS SET
  for (int i = 0; i<20; i++){
    int onCol = Anar.rndi(individualRotations[0].length);
    int onRow = Anar.rndi(individualRotations.length);
    int nOpen = Anar.rndi(1,7);
    int nSustain = Anar.rndi(1,7);
 
    individualRotations = propagateValue(individualRotations,onCol,onRow,nOpen,nSustain,nOpen);
 
  }
 
  // individualRotations = propagateValue(individualRotations,0,0,3,3,3);
  // individualRotations = propagateValue(individualRotations,0,1,3,3,3);
 
 
  // CREATE MODULES WITH RESULTING ROTATIONS
  for (int i = 0; i<individualRotations.length; i++)
    for (int j = 0; j<individualRotations[i].length; j++){
      Pt a = Anar.Pt(origin,new Translate(new ParamMul(i,w),new ParamMul(j*2,h)));
      myObj.add(createModule(a,w,h,individualRotations[i][j]));
    }
 
  // SCENE RELATED STUFF
  display = global;
  Anar.camTarget(myObj);
}
 
 
// CREATE A MODULE OF WxH DIMENSIONS WITH ROTATIONAL FACTOR
Obj createModule(Pt origin, Param w, Param h, Param p){
  Obj output = new Obj();
 
  Face a = new Rect(w,h);
  Transform t = new Transform(a.pt(2),a.pt(3),new RotateX(p));
  a.apply(t);
 
  Face b = new Face(a,new MirrorY());
 
  output.add(a);
  output.add(b);
  output.translate(origin);
 
  return output;
}
 
 
Param[][] propagateValue(Param[][] oldSet, int colomn, int rowStart, int nOpen, int nSustain, int nClose){
 
  Param propagateCf = new Param(0,0,1);
  global.add(propagateCf);
 
  int startIndex = rowStart;
 
  // FIRST CONDITION
  float deltaA = 1/(float)nOpen;
  for (int i = 0; i<nOpen; i++){
    int row = i+startIndex;
 
    if(oldSet.length>row){
      Param propagator = new ParamMul(propagateCf, (i)*deltaA);
      oldSet[row][colomn] = new ParamSum(oldSet[row][colomn],propagator);
    }
  }
  startIndex += nOpen;
 
 
  // SECOND CONDITION
  for (int i = 0; i<nSustain; i++){
    int row = i+startIndex;
 
    if(oldSet.length>row){
      // Param propagator = new ParamMul(propagateCf,(i-openA)*deltaA);
      oldSet[row][colomn] = new ParamSum(oldSet[row][colomn],propagateCf);
    }
  }
  startIndex += nSustain;
 
 
  // THIRD CONDITION
  float deltaB = 1/(float)nClose;
  for (int i = 0; i<nClose; i++){
    int row = i+startIndex;
 
    if(oldSet.length>row){
      Param propagator = new ParamMul(propagateCf, (nClose-i-1)*deltaB);
      oldSet[row][colomn] = new ParamSum(oldSet[row][colomn],propagator);
    }
  }
 
 
  return oldSet;
}
 
 
void draw(){
  background(155);
  myObj.draw();
 
  if(display!=null)
    display.draw();
}
 
 
// SWITCH BETWEEN DIFFERENT SET OF SLIDERS
void keyPressed(){
  if(key==' ')
    if(display==global)
      display = rotations;
    // else
    // if(display==rotations)
    // display = rotationsResults;
    else
      display = global;
}
 
 



screenshots