/**
 * 
 */
package p5;
import anar.*;



import java.util.ArrayList;

import processing.core.PApplet;


/**
 * @author gll
 */
public class Test00tSpiral extends PApplet {

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


  Obj myObject;

  Pts ptsA = new Pts();
  Pts ptsB = new Pts();

  Pt  origin;


  public void setup(){

    size(800,400,OPENGL);
    Anar.init(this);

    initForm();


  }


  void initForm(){

    origin = Anar.Pt(0,0,0);
    ptsA.add(origin);

    ArrayList spiral = new ArrayList();
    Transform tmp;

    // Transform 1
    tmp = new Transform();
    tmp.rotateZ(PI/16f);
    tmp.translate(Anar.PtNull(10,0,1));
    spiral.add(tmp);


    // Transform 2
    tmp = new Transform();
    tmp.rotateZ(PI/12f);
    tmp.translate(Anar.PtNull(10,0,1));
    spiral.add(tmp);


    // Transform 3
    tmp = new Transform();
    tmp.rotateZ(PI/8f);
    tmp.translate(Anar.PtNull(10,0,1));
    spiral.add(tmp);


    // println(spiralTransform);


    Pt previous = origin;

    for (int i = 0; i<500; i++){
      // Pt q = Anar.Pt(previous,spiralA);

      // Pt q = Anar.Pt(previous,spiralTransform);
      if(random(10)<1)
        tmp = (Transform)spiral.get((int)random(spiral.size()));

      Pt q = Anar.Pt(previous,tmp);

      ptsA.add(q);
      previous = q;
    }


    Transform baseTransform = new Transform();
    baseTransform.translate(Anar.PtNull(0,0, -15));
    // base.add(baseTransform);


    /*
     * baseTransform = new Transform();
     * baseTransform.translate(Anar.PtNull(0,0,-5)); base.add(baseTransform);
     */

    // Iterator<Pt> i = ptsA.iterator();
    for (int i = 0; i<ptsA.numOfPts(); i++){
      PtDER p = Anar.Pt(ptsA.pt(i));
      p.apply(baseTransform);
      ptsB.add(p);
    }


    myObject = new SweepTwoPaths(ptsA,ptsB);
    println(myObject);
    println(myObject.faces.size());
    println(myObject.faces.get(0));


    ptsA.color(new AColor(252,0,0));
    ptsA.add(origin = Anar.Pt(5, -5, -50));

    Anar.camTarget(myObject);
  }


  public void draw(){
    if(frameCount%2==0)
      background(155);
    else
      background(153);

    origin.draw();
    ptsA.draw();
    ptsB.draw();
    myObject.draw();
  }


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

}
