2D objects in space

Square, Rectangle, Circle or Ellipse

import processing.opengl.*;
import anar.*;
 
Group group = new Group();
 
void setup(){
  size(800,400,OPENGL);
  Anar.init(this);
  Anar.drawAxis();
 
  Face.globalRender = new RenderFaceNormal(new AColor(255,100),new AColor(100));
 
  initForm();
}
 
void initForm(){
 
  /////////////////////////////////////
  //SQUARE
  /////////////////////////////////////
  Face square = new Square(20);
  square.tag("square");
  square.rotateX(-0.2);
  square.translate(10,20,0);
 
  println(square.toObjExporter("square"));
  group.add(square);
 
 
  /////////////////////////////////////
  //RECTANGLE
  /////////////////////////////////////
  Face rect = new Rect(50,24);
  rect.tag("rect");
  rect.rotateZ(-0.1);
  rect.rotateY(0.5);
  rect.translate(-100,0,0);
 
  println(rect.toObjExporter("rect"));
  group.add(rect);
 
 
  /////////////////////////////////////
  //CIRCLE
  /////////////////////////////////////
  Face circle = new Circle(20);
  circle.tag("circle");
  circle.rotateZ(-0.1);
  circle.rotateY(0.5);
  circle.translate(-10,20,20);
 
 
  println(circle.toObjExporter("circle"));
  group.add(circle);
 
 
  /////////////////////////////////////
  //ELLIPSE
  /////////////////////////////////////
  Face ellipse = new Ellipse(40,20);
  ellipse.tag("ellipse");
 
  println(ellipse.toObjExporter("ellipse"));
  group.add(ellipse);
 
 
  /////////////////////////////////////
  //STAR
  /////////////////////////////////////
  Face star = new Star(10,20,6);
  star.tag("star");
  star.rotateZ(0.1);
  star.rotateX(0.3);
  star.translate(10,0,30);
 
  println(star.toObjExporter("star"));
  println(star.parentList(-1));
  group.add(star);
 
 
 
  Anar.sliders(star);
  Anar.camTarget(star);
 
  //font = loadFont("ATRotisSemiSans-48.vlw");
}
 
PFont font;
 
void draw(){
  background(155);
  group.draw();
}

3D Objects

Box, Sphere, Cylinder, etc.

import processing.opengl.*;
import anar.*;
 
Group group = new Group();
 
void setup(){
  size(800,400,OPENGL);
  Anar.init(this);
  Anar.drawAxis();
 
  Face.globalRender = new RenderFaceNormal(new AColor(255,100),new AColor(100));
 
  initForm();
}
 
void initForm(){
 
  /////////////////////////////////////
  //BOX
  /////////////////////////////////////
  Obj box = new Box(10,20,30);
  box.tag("box");
  box.rotateZ(0);
  box.rotateX(0);
  box.translate(100,0,0);
 
  println(box.toObjExporter("box"));
  println(box.parentList(-1));
  group.add(box);
 
 
  /////////////////////////////////////
  //CONE
  /////////////////////////////////////
  Obj cone = new Cone(50,100,20);
  cone.tag("cone");
  cone.translate(100,100,0);
 
  println(cone.toObjExporter());
  group.add(cone);
 
 
  /////////////////////////////////////
  //CYLINDER
  /////////////////////////////////////
  Obj cylinder = new Cylinder(50,24,50);
  cylinder.tag("cylinder");
  cylinder.translate(-100,0,0);
 
  println(cylinder.toObjExporter("cylinder"));
  group.add(cylinder);
 
 
  /////////////////////////////////////
  //SPHERE
  /////////////////////////////////////
  Obj sphere = new Sphere(20);
  sphere.tag("sphere");
  sphere.translate(-40,120,20);
 
  println(sphere.toObjExporter("sphere"));
  group.add(sphere);
 
  /////////////////////////////////////
  //SWISSCROSS3D
  /////////////////////////////////////
  Obj swissCross3D = new SwissCross3D(10,10);
  swissCross3D.tag("swissCross3D");
  //swissCross3D.fill(255,0,0,200);
  println(swissCross3D.toObjExporter("swissCross3D"));
  //swissCross3D.translate(-100,0,0);
  group.add(swissCross3D);
 
 
 
  Anar.sliders(swissCross3D);
  Anar.camTarget(swissCross3D);
 
  //font = loadFont("ATRotisSemiSans-48.vlw");
}
 
PFont font;
 
void draw(){
  background(155);
  group.draw();
}

3D Operations

Some 3D operations are common to all CAD software. They are available in ANAR+ and described below through self-explaining example.

Extrude

Example of extrusion

import anar.*;
import processing.opengl.*;
 
Obj myObj = new Obj();
 
void setup(){
  size(800,400,OPENGL);
  frameRate(200);
 
  Anar.init(this);
  Anar.drawAxis(true);
 
  initForm();
}
 
void initForm(){
 
  //Create a new Line
  Pts pts = new Pts();
 
  pts.add(Anar.Pt(100,110,20));
  pts.add(Anar.Pt(110,100,40));
  pts.add(Anar.Pt(110,90,60));
  pts.add(Anar.Pt(90,90,90));
 
  //Create a Face
  Face f = new Star(50,100,5);
 
  //Extrude the face along the Line
  myObj = new Extrude(f,pts);
 
 
  Anar.camTarget(myObj);
  Anar.sliders(myObj);
}
 
void draw(){
  background(155);
  myObj.draw();
}
 
//Toggle the display of the sliders
void keyPressed(){
  Anar.slidersToggle();
}

anar.ch_img_studio.01_00571.jpg

Revolve

import anar.*;
import processing.opengl.*;
 
Obj myObj = new Obj();
 
void setup(){
  size(800,400,OPENGL);
  frameRate(200);
  Anar.init(this);
  Anar.drawAxis(true);
  initForm();
}
 
void initForm(){
  //Create a new Line
  Pts pts = new Pts();
 
  pts.add(Anar.Pt(10,0,0));
  pts.add(Anar.Pt(10,0,100));
  pts.add(Anar.Pt(20,0,110));
  pts.add(Anar.Pt(10,0,120));
  pts.add(Anar.Pt(10,0,200));
 
  //Create an object from a revolution around the Z axis
  //    30 is the number of elements per revolutions
  myObj = new Revolve(pts, Anar.Pt(0,0,20),30);
 
  //Change the color of the object
  myObj.fill(255,255,0);
 
  Anar.camTarget(myObj);
  Anar.sliders(myObj);
}
 
void draw(){
  background(155);
 
  myObj.draw();
  //myObj.fill(random(255),random(255),0);
}
 
void keyPressed(){
  Anar.slidersToggle();
}

anar.ch_img_studio.01_00572.jpg

Sweep between two paths

Given two paths it is possible to define faces out of them. Note the export functions at the end

import processing.opengl.*;
import anar.*;
 
  /*
   * Example for Anar library by Guillaume LaBelle + Julien Nembrini
   * http://anar.ch
   */
 
 
  Obj myObj;
 
  void setup(){
 
    size(1000,500,OPENGL);
    Anar.init(this);
 
 
    // /////////////////////////////
    Pts ptsA = new Pts();
    Pt origin;
    ptsA.add(origin = Anar.Pt(0,0,0).tag("Origin"));
 
 
    // /////////////////////////////
    Transform t = new Transform();
    t.rotateZ(PI/14f);
    t.translate(Anar.PtNull(10,0,1));
 
 
    // /////////////////////////////
    Pt previous = origin;
 
    for (int i = 0; i<100; i++){
      PtDER newPt = Anar.Pt(previous);
      newPt.apply(t);
      ptsA.add(newPt);
      previous = newPt;
    }
 
 
    // /////////////////////////////
    Transform baseTransform;
 
    baseTransform = new Transform();
    baseTransform.translate(Anar.PtNull(0,0, -20));
    baseTransform.rotateX(1f);
 
    // /////////////////////////////
    Pts ptsB = new Pts(ptsA,baseTransform);
 
 
    // /////////////////////////////
    myObj = new SweepTwoPaths(ptsA,ptsB);
 
    Anar.camTarget(myObj);
 
  }
 
 
  void draw(){
    background(255);
    myObj.draw();
  }
 
  void keyPressed(){
    if(key=='a') Autolisp.export(myObj,"myExport");
    if(key=='f') RhinoScript.export(myObj,"myExport");
    if(key=='s') SketchUpRuby.export(myObj,"myExport");
    if(key=='o') ObjExporter.export(myObj,"myExport");
  }