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


// import geometry.Point3D;


import java.util.*;

import processing.core.PApplet;


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

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


  Obj myObject;

  Pts ptsA;
  Pts ptsB;

  Pt  origin;


  public void setup(){

    // size(screen.width,screen.height,OPENGL);
    size(1000,500,OPENGL);
    Anar.init(this);

    myObject = generatorBirdNest00();
  }


  Obj generatorBirdNest00(){

    Obj outputFmz;

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

    ptsA.add(origin = Anar.Pt(5, -5, -50,"Origine"));

    println(origin);

    ArrayList spiral = new ArrayList();
    Transform tmp;

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


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


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

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

    // println(spiralTransform);


    Pt previous = origin;

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

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

      Transform ori = new Transform(previous,tmp);

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

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


    // ArrayList<Transform> base = new ArrayList<Transform>();
    Transform baseTransform;

    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 i = ptsA.iterator();
    while (i.hasNext()){
      PtDER p = Anar.Pt((Pt)i.next());
      // p.set(base.get((int)random(base.size())));
      p.apply(baseTransform);
      ptsB.add(p);
    }


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


    ptsA.color(new AColor(252,0,0));


    // println(outputFmz.primitiveToString(-1));
    println("-------------");

    // TextIO.writeTextFile("test.lsp",outputFmz.toAutocad());

    return outputFmz;

  }


  public void draw(){
    if(frameCount%2==0)
      background(150);
    else
      background(148);

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

    if(frameCount%500==0)
      myObject = generatorBirdNest00();

  }


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

}

