package p5;
import anar.*;




import java.io.File;

import processing.core.PApplet;

public class Test03vManyForms extends PApplet {

  /*
   * Example for Anar library by Guillaume LaBelle + Julien Nembrini
   * http://anar.ch
   */


  Obj   myObj;

  Group group = new Group();

  public void setup(){
    size(800,400,OPENGL);
    Anar.init(this);
    Anar.drawAxis();

    Face.globalRender = new RenderFaceNormal(new AColor(155,155),new AColor(100));

    initForm();
  }

  public void initForm(){
    myObj = new Obj();


    // ///////////////////////////////////
    // CONE
    // ///////////////////////////////////
    Obj cone = new Cone(50,100,20);
    cone.set("cone");
    cone.translate(100,100,0);

    println(cone.toObjExporter());
    group.add(cone);


    // ///////////////////////////////////
    // BOX
    // ///////////////////////////////////
    Obj box = new Box(10,20,30);
    box.set("box");
    box.rotateZ(0);
    box.rotateX(0);
    box.translate(100,0,0);

    println(box.toObjExporter("box"));
    println(box.parentList());
    group.add(box);


    // ///////////////////////////////////
    // CYLINDER
    // ///////////////////////////////////
    Obj cylinder = new Cylinder(50,24,50);
    cylinder.set("cylinder");
    cylinder.translate( -100,0,0);
    cylinder.fill(255);

    println(cylinder.toObjExporter("cylinder"));
    group.add(cylinder);


    // ///////////////////////////////////
    // ELLIPSE
    // ///////////////////////////////////
    Face ellipse = new Ellipse(40,20);
    ellipse.set("ellipse");

    println(ellipse.toObjExporter("ellipse"));
    group.add(ellipse);


    // ///////////////////////////////////
    // SWISSCROSS3D
    // ///////////////////////////////////
    Obj swissCross3D = new SwissCross3D(10,10);
    swissCross3D.set("swissCross3D");
    // swissCross3D.fill(255,0,0,200);
    println(swissCross3D.toObjExporter("swissCross3D"));
    // swissCross3D.translate(-100,0,0);
    group.add(swissCross3D);


    // ///////////////////////////////////
    // REVOLVER
    // ///////////////////////////////////
    Pts ctrlRevol = new Pts();
    ctrlRevol.add(Anar.Pt(30,0,30));
    ctrlRevol.add(Anar.Pt(10,0,40));
    ctrlRevol.add(Anar.Pt(20,0,60));
    ctrlRevol.add(Anar.Pt(20,0,70));

    Obj revolver = new Revolve(ctrlRevol,Anar.Pt(0,0,20),12);
    revolver.set("revolver");

    println(revolver.toObjExporter("revolver"));
    group.add(revolver);


    // ///////////////////////////////////
    // CSPLINE
    // ///////////////////////////////////
    Pts ctrl = new Pts();
    ctrl.add(Anar.Pt(30,100,0));
    ctrl.add(Anar.Pt(10,150,20));
    ctrl.add(Anar.Pt(20,100, -10));
    ctrl.add(Anar.Pt(20,90,30));
    ctrl.add(Anar.Pt(0,90,20));
    ctrl.add(Anar.Pt( -30,80, -20));

    CSpline cspline = new CSpline(ctrl);
    cspline.set("cspline");
    cspline.stroke(0);

    println(cspline.toObjExporter("cspline"));
    group.add(cspline);


    // ///////////////////////////////////
    // PointCLoud
    // ///////////////////////////////////
    Obj pointCloud = new Obj();
    pointCloud.add(Anar.PtRnd(100));
    pointCloud.add(Anar.PtRnd(100));
    pointCloud.add(Anar.PtRnd(100));

    println(pointCloud.toObjExporter("pointCloud"));
    group.add(pointCloud);


    // ///////////////////////////////////
    // ///////////////////////////////////
    myObj.add(box);
    myObj.add(cone);
    myObj.add(cylinder);
    myObj.add(ellipse);
    myObj.add(swissCross3D);
    myObj.add(revolver);
    myObj.add(cspline);
    myObj.add(pointCloud);

    Anar.sliders(swissCross3D);
    Anar.sliders(revolver);
    Anar.camTarget(revolver);
    println("----------------");
    // Anar.sliders = new SlidersBCF(Anar.sliders);
    println("----------------");


    ObjExporter.export(group);

    File txtFile = new File("myExport.obj");

    if(txtFile.exists()){
      OBJLoader oj = new OBJLoader("myExport.obj");
      for (int i = 0; i<oj.main.numOfObj(); i++)
        group.add(new Obj(oj.main.obj(i),new TranslateY(200)));
    }


    Anar.main.add(group);

  }

  public void draw(){
    background(155);
    group.draw();
    // Anar.scene.screenDrawBegin();
  }


  boolean recordPov = false;

  public void keyPressed(){
    // PovRAY.sceneExport = false;
    // PovRAY.geometryExport = false;

    if(key==' ')
      initForm();

    if(key=='a')
      Autolisp.export(group);
    if(key=='f')
      RhinoScript.export(group);
    if(key=='s')
      SketchUpRuby.export(group);
    if(key=='p')
      PovRAY.export(group);
    if(key=='o')
      ObjExporter.export(group);
    if(key=='q')
      Radiance.export(group);

    if(key=='r')
      Anar.povRecorder();
    if(key=='t')
      Anar.radRecorder();
  }

  public static void main(String[] args){
    PApplet.main(new String[]{Test03vManyForms.class.getName()});
  }
}

