package p5;
import anar.*;




import processing.core.PApplet;


public class Test02MSurf extends PApplet {

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


  Anar        goo;

  CSpline     bspA;
  CSpline     bspB;
  CSpline     bspC;
  // ParametricValue pv;

  SplineSurf  mySurf;
  SplineSurf2 mySurf2;

  Sliders     mySliders;


  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);
  }


  void initShape(){

    Pts baseLine = new Pts();
    Pts controlMesh = new Pts();

    Param pv = new Param(3,0,5);

    baseLine.add(Anar.Pt( -50, -50,10));
    baseLine.add(Anar.Pt( -50,0,50));
    baseLine.add(Anar.Pt( -50,50,20));
    baseLine.add(Anar.Pt( -50,100,30));

    bspA = new CSpline(baseLine,pv);
    controlMesh.ptList.addAll(baseLine.ptList);

    // bsp.closedMode = true;
    // bsp.mode = CSpline.NEXT;


    baseLine = new Pts();
    baseLine.add(Anar.Pt(0, -50,20));
    baseLine.add(Anar.Pt(0,0,50));
    baseLine.add(Anar.Pt(0,50, -10));
    baseLine.add(Anar.Pt(0,100, -50));

    bspB = new CSpline(baseLine,pv);
    controlMesh.ptList.addAll(baseLine.ptList);

    baseLine = new Pts();
    baseLine.add(Anar.Pt(50, -50,10));
    baseLine.add(Anar.Pt(50,0,20));
    baseLine.add(Anar.Pt(50,50,20));
    baseLine.add(Anar.Pt(50,100,30));

    bspC = new CSpline(baseLine,pv);
    controlMesh.ptList.addAll(baseLine.ptList);


    // mySurf = new SplineSurf(bspA,bspB);
    mySurf2 = new SplineSurf2(controlMesh,4,pv,pv);

    // Anar.camTarget(mySurf);

    mySliders = new Sliders(mySurf2);
    println(controlMesh.parentList());
  }


  public void draw(){
    background(190);

    // baseLine.draw();
    // bspA.draw();
    // bspB.draw();
    // bspC.draw();

    // mySurf.draw();
    mySurf2.draw();
    mySliders.draw();
    //    
    // Iterator<Pts> it = controlMesh.iterator();
    // while (it.hasNext()) it.next().draw();

    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;
    }
  }


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


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