// Last edited on 2023-12-28 17:25:28 by stolfi

// Raio da grade debug:
// #declare rdb = 0.02;
#declare rdb = 0;

#include "retalho.inc"

background{ color rgb < 0.75, 0.75, 0.85 > }

#macro cadeira(escalax, escalay, escalaz)

  #local coord1 = array[4][4];
  #local coord1[0][0] = <0,0,3>;
  #local coord1[0][1] = <1,0,3>;
  #local coord1[0][2] = <2,0,3>;
  #local coord1[0][3] = <3,0,3>;

  #local coord1[1][0] = <0,3,1>;
  #local coord1[1][1] = <1,3,1>;
  #local coord1[1][2] = <2,2,3>;
  #local coord1[1][3] = <3,2,3>;

  #local coord1[2][0] = <0,0,-3>;
  #local coord1[2][1] = <1,0,-3>;
  #local coord1[2][2] = <2,0,-1>;
  #local coord1[2][3] = <3,0,-1>;

  #local coord1[3][0] = <0,2,-3>;
  #local coord1[3][1] = <1,2,-3>;
  #local coord1[3][2] = <2,2,-1>;
  #local coord1[3][3] = <3,2,-1>;

  #local coord2 = array[4][4];
  #local coord2[0][0] = <0,2,-3>;
  #local coord2[0][1] = <1,2,-3>;
  #local coord2[0][2] = <2,2,-1>;
  #local coord2[0][3] = <3,2,-1>;

  #local coord2[1][0] = <0,4,-3>;
  #local coord2[1][1] = <1,4,-3>;
  #local coord2[1][2] = <2,4,-1>;
  #local coord2[1][3] = <3,4,-1>;

  #local coord2[2][0] = <0,1,-5>;
  #local coord2[2][1] = <1,1,-5>;
  #local coord2[2][2] = <2,1,-3>;
  #local coord2[2][3] = <3,1,-3>;

  #local coord2[3][0] = <0,5,-6>;
  #local coord2[3][1] = <1,5,-6>;
  #local coord2[3][2] = <2,5,-6>;
  #local coord2[3][3] = <3,5,-6>;

  #local coord3 = array[4][4];
  #local coord3[0][0] = <3,0,3>;
  #local coord3[0][1] = <4,0,3>;
  #local coord3[0][2] = <5,0,3>;
  #local coord3[0][3] = <6,0,3>;

  #local coord3[1][0] = <3,2,3>;
  #local coord3[1][1] = <4,2,3>;
  #local coord3[1][2] = <5,2,3>;
  #local coord3[1][3] = <6,2,3>;

  #local coord3[2][0] = <3,0,-1>;
  #local coord3[2][1] = <4,0,-1>;
  #local coord3[2][2] = <5,2,0>;
  #local coord3[2][3] = <6,4,1>;

  #local coord3[3][0] = <3,2,-1>;
  #local coord3[3][1] = <4,2,-1>;
  #local coord3[3][2] = <5,4,0>;
  #local coord3[3][3] = <6,4,1>;


  #local coord4 = array[4][4];
  #local coord4[0][0] = <-0,0,3>;
  #local coord4[0][1] = <-1,0,3>;
  #local coord4[0][2] = <-2,0,3>;
  #local coord4[0][3] = <-3,0,3>;

  #local coord4[1][0] = <-0,3,1>;
  #local coord4[1][1] = <-1,3,1>;
  #local coord4[1][2] = <-2,2,3>;
  #local coord4[1][3] = <-3,2,3>;

  #local coord4[2][0] = <-0,0,-3>;
  #local coord4[2][1] = <-1,0,-3>;
  #local coord4[2][2] = <-2,0,-1>;
  #local coord4[2][3] = <-3,0,-1>;

  #local coord4[3][0] = <-0,2,-3>;
  #local coord4[3][1] = <-1,2,-3>;
  #local coord4[3][2] = <-2,2,-1>;
  #local coord4[3][3] = <-3,2,-1>;

  #local coord5 = array[4][4];
  #local coord5[0][0] = <-0,2,-3>;
  #local coord5[0][1] = <-1,2,-3>;
  #local coord5[0][2] = <-2,2,-1>;
  #local coord5[0][3] = <-3,2,-1>;

  #local coord5[1][0] = <-0,4,-3>;
  #local coord5[1][1] = <-1,4,-3>;
  #local coord5[1][2] = <-2,4,-1>;
  #local coord5[1][3] = <-3,4,-1>;

  #local coord5[2][0] = <-0,1,-5>;
  #local coord5[2][1] = <-1,1,-5>;
  #local coord5[2][2] = <-2,1,-3>;
  #local coord5[2][3] = <-3,1,-3>;

  #local coord5[3][0] = <-0,5,-6>;
  #local coord5[3][1] = <-1,5,-6>;
  #local coord5[3][2] = <-2,5,-6>;
  #local coord5[3][3] = <-3,5,-6>;

  #local coord6 = array[4][4];
  #local coord6[0][0] = <-3,0,3>;
  #local coord6[0][1] = <-4,0,3>;
  #local coord6[0][2] = <-5,0,3>;
  #local coord6[0][3] = <-6,0,3>;

  #local coord6[1][0] = <-3,2,3>;
  #local coord6[1][1] = <-4,2,3>;
  #local coord6[1][2] = <-5,2,3>;
  #local coord6[1][3] = <-6,2,3>;

  #local coord6[2][0] = <-3,0,-1>;
  #local coord6[2][1] = <-4,0,-1>;
  #local coord6[2][2] = <-5,2,0>;
  #local coord6[2][3] = <-6,4,1>;

  #local coord6[3][0] = <-3,2,-1>;
  #local coord6[3][1] = <-4,2,-1>;
  #local coord6[3][2] = <-5,4,0>;
  #local coord6[3][3] = <-6,4,1>;

  union{
    object{ retalho(coord1, rdb, cret0, 3) }
    object{ retalho(coord2, rdb, cret1, 3) }
    object{ retalho(coord3, rdb, cret2, 3) }
    object{ retalho(coord4, rdb, cret3, 3) }
    object{ retalho(coord5, rdb, cret4, 3) }
    object{ retalho(coord6, rdb, cret5, 3) }
    scale <escalax, escalay, escalaz> 
    translate <10 + escalax, escalay, escalaz>
  }
#end

#declare duas = false;

#declare cmin = <  +2.0, +0.5, -5.5 >;
#declare cmax = < +21.0, +7.0, +5.0 >;

#if (duas)
  #declare disp = < 9.0, 0, 0>;
  #declare cmin = cmin - disp;
  #declare cmax = cmax + disp;
  object{ cadeira(1.0, 1.0, 1.0) translate -disp }
  object{ cadeira(1.5, 1.0, 0.7) translate +disp }
#else
  object{ cadeira(1.0, 1.0, 1.0) }
#end

#include "eixos.inc"
// #if (rdb > 0) object{ eixos(5.0) } #end

#include "gaiola.inc"
#if (rdb > 0) object{ gaiola(cmin,cmax) } #end
#if (rdb = 0) object{ gaipiso(cmin,cmax) } #end

#declare centro_cena = (cmin + cmax)/2;
#declare raio_cena = 0.65*vlength(cmax-cmin);
#declare dist_camera = 7*raio_cena;

#include "camlight.inc"
#declare dir_camera = < -5, 7, 3 >;
#declare intens_luz = 1.20;
camlight(centro_cena, raio_cena, dir_camera, dist_camera , z, intens_luz)