package p5;
import anar.*;




import processing.core.PApplet;


public class Test02jBSplineDebugB2000 extends PApplet {

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


  Anar    goo;

  CSpline bsp;
  Param   pv;


  String  cadSoftware, ext;
  boolean record = false;


  public void setup(){
    size(800,400,OPENGL);
    frameRate(200);

    Anar.init(this);
    Anar.drawAxis(true);
    initShape();

    Pts.globalRender = new RenderPtsAll();
    Pt.globalRender = new RenderPtShapeOriented(new AColor(100),new AColor(255,0,0,150),Anar.scene);

    Anar.bsplineRes(20);
  }


  void initShape(){

    Pts baseLine = new Pts();
    baseLine.add(Anar.Pt( -50,0,0));
    baseLine.add(Anar.Pt(0,50,50));
    baseLine.add(Anar.Pt(50,0,0));
    // baseLine.add(Anar.Pt(-150,-60,40));

    for (int i = 0; i<1000; i++)
      baseLine.add(Anar.Pt(Anar.rnd( -50,50),Anar.rnd( -50,50),Anar.rnd( -50,50)));

    pv = new Param(1/.3f);

    bsp = new CSpline(baseLine,pv);
    bsp.closedMode = true;
    bsp.mode = CSpline.NEXT;

    // obj.add(bsp);
    // prnt(bsp.parentList());

    Anar.camTarget(baseLine);
  }


  public void draw(){
    background(190);

    if(record)
      beginRaw("superCAD."+cadSoftware,"output."+ext);

    // baseLine.draw();
    bsp.draw();


    if(record){
      endRaw();
      record = false;
    }

    if(key=='k'){
      pv.set(mouseX/(float)width/2f);
      CSpline.globalRender.splineRes.set(mouseY/(float)height*60+1);
    }
  }


  private boolean drawConstruction = true;


  public void keyPressed(){
    switch(key){
      case ' ':
        if(drawConstruction)
          drawConstruction = false;
        else
          drawConstruction = true;
      break;
      case 'r':
        cadSoftware = "Rhino";
        ext = "rvb";
      break;
      case 's':
        cadSoftware = "SketchUP";
        ext = "rb";
      break;
      case 'a':
        cadSoftware = "AutoLISP";
        ext = "lsp";
      break;
      case 'p':
        cadSoftware = "PovRAY";
        ext = "pov";
      break;
    }
    record = true;
  }


  void prnt(Object s){
    super.println(s);
    super.println("-----------------------------");
  }


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

