import processing.svg.*;
int my_scale,n,p;
float max_radius, delta, grid_center, W;
float tube_radius;
float[] alpha = { PI/4 , PI/3 , PI/2+PI/4 } ; // = 45° , 60°
float hl;
float[] x = new float[4] ;  // 3 =p
float[] y = new float[4] ;
float[] l = new float[3] ;
float[] deltah = new float[3] ;
float[] h = new float[4] ;
float[] my_ratio = {1.0/3, 2.0/3 };
void setup() {
  
  size(210, 297);
  //size(1000, 1000);
     my_scale=1;

     max_radius     = my_scale * 50 ;  //circle outside hexagon
     tube_radius    = my_scale * 7.5 ;  //coil
     W              = my_scale * 10 ;   //left margin for the display
     delta          = my_scale * 3 ;    //glue strip size
     
     grid_center   = 1.5 * max_radius; 
     n             = 6 ; //hexagone
     p             = 2 ; //nombre de pliage
 

     y[0]      = tube_radius * tan(PI/n);
     h[0]      = y[0];
     deltah[0]  = 1.0/3*(max_radius - y[0]) ;
     h[1]      = h[0] + deltah[0];
     deltah[1]  = 2.0/3*(max_radius - y[0]) ;
     h[2]      = h[1] + deltah[1];
     for (int i=0; i< p ; i=i+1) {
       deltah[i] = my_ratio[i]*(max_radius - y[0]) ;
       h[i+1] = h[i] + deltah[i];
     }

  noLoop();  // Run once and stop
  
     
}


void draw() {
  draw_grid();
  beginRecord(SVG, "my_hexa_conerenfort_instructables.svg");
  noFill();
  

  x[0]=0;
  
  for ( int i = 0 ; i< p ; i=i+1 ) { //fill li values
    
   l[i]=deltah[i]/sin(alpha[i]) ;

  }
  
  
  for (int i = 1 ; i < p+1 ; i = i +1) { //fill xi yi values
  
    x[i]=l[i-1]*cos(PI/n) + x[i-1];
    y[i] = h[i] * sin( PI/n); 
    println(" x[" + i + "] " + x[i]/my_scale);
    println(" 2y[" + i + "] " + 2*y[i]/my_scale);
  }
  
      pushMatrix();
      translate(W, max_radius);
  
  line(x[0],y[0],x[0],-y[0]); //vertical line = junction to tube
  
  
  for ( int i = 0 ; i< p ; i=i+1 ) { //draw from i to i+1 ====> will change to glue strip

    
    //bord bas languette
    languette(x[i],y[i] ,  x[i+1],y[i+1], delta , 1.0);
    
    //bord haut languette
    languette(x[i],y[i] ,  x[i+1],y[i+1], delta , -1.0);
    
    //for debug
    //line(x[i+1],y[i+1],x[i+1],-y[i+1]); 
    
    //renfort interm

    
    line(x[i+1],-y[i+1],  x[i+1]+delta,-y[i+1]+delta);
    line(x[i+1]+delta,-y[i+1]+delta,  x[i+1]+2*delta,-y[i+1]);
    line(x[i+1],y[i+1],  x[i+1]+delta,y[i+1]-delta);
    line(x[i+1]+delta,y[i+1]-delta,  x[i+1]+2*delta,y[i+1]);
    
    //add middle mark
    line(x[i+1]+delta,y[i+1]-delta,  x[i+1]+delta,y[i+1]-2*delta);
    line(x[i+1]+delta,-y[i+1]+delta,  x[i+1]+delta,-y[i+1]+2*delta);

    point(x[i+1],y[i+1]-delta);
    point(x[i+1],-y[i+1]+delta);
    point(x[i+1]+2*delta,y[i+1]-delta);
    point(x[i+1]+2*delta,-y[i+1]+delta);
    
    //translate 2*delta
    translate(2*delta,0);
    
  }
  translate(-2*delta,0);
  //renfort fin de pavillon
   line(x[p]+3*delta,y[p],x[p]+3*delta,-y[p]); 
   line(x[p]+2*delta,y[p]-delta,x[p]+3*delta,y[p]);
   line(x[p]+2*delta,-y[p]+delta,x[p]+3*delta,-y[p]);
   
   line(x[p]+delta,y[p]-delta,x[p]+2*delta,y[p]-delta);
   line(x[p]+delta,-y[p]+delta,x[p]+2*delta,-y[p]+delta);
   
   //marques 
   for ( int i = 2 ; i<3; i=i+1) {
    line(x[p]+i*delta,y[p]-delta,x[p]+i*delta,y[p]-2*delta); 
    line(x[p]+i*delta,-y[p]+delta,x[p]+i*delta,-y[p]+2*delta); 
    
    
    
   }
  
  popMatrix();
}


void draw_grid() {
  
    pushMatrix();
  translate(grid_center, grid_center);
  // draw a grid
  for (int i = 0; i < 600; i = i+100) {
  line(-600,i,600,i);
  line(i,-600,i,600);
    line(-600,-i,600,-i);
  line(-i,-600,-i,600);
  }
  popMatrix();
  
}


void languette(float x1, float y1, float x2, float y2, float deep, float dir) {
 

  
  float alpha,x,y;
  x=x2-x1;
  y=y2-y1;
  alpha = dir * atan(y/x);
  translate(x1,dir*y1);
  rotate(alpha);
  x=x/cos(alpha);
  line(0,0  ,                   deep, dir*deep);
  line(deep, dir*deep ,        x - deep , dir*deep );
  line(x - deep , dir*deep     , x , 0 );
  point(deep,0);
  point(x - deep,0);
  rotate(-alpha);
  translate(-x1,-dir*y1);
  
  
}
