// Last edited on 2009-07-24 13:31:05 by stolfilocal
// Processed by remove-cam-lights

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

#declare textura1 = 
  texture {
    pigment { color rgb < 0.9, 0.9, 0.9 > filter 0}
    finish { diffuse 0.8 specular 0.1 roughness 0.005 ambient 0.1 }
  }

#macro folha()
 union { 
  difference {
   object {
      sphere{
       <3 ,0 ,0>,2
       texture {textura1}
      }
   }
   object {
      sphere{
       <3 ,0 ,0>,1
       texture {textura1}
      }
   }
   object { 
    box {  <-5,0,-5>,  <5,4,5>  texture { textura1 }   } 
   }
  }
  object { 
    box {  <0,0,-1>,  <2,-1,1>  texture { textura1 }   } 
  }
 }
  
#end

#macro B1(alfa)
 #declare tamanhobraco=4; 
 union { 
  object { 
   cylinder {
   < 0, 0, 0 >,
      < tamanhobraco, 0, 0 >,
      1
    texture {textura1}
    }
  } 
  object {
     cylinder {
   < 0, 0, -1 >,
      < 0, 0, 1 >,
      1
    texture {textura1}
    }
     translate<tamanhobraco+1,0,0>
  }
  object{
   folha()
   rotate<0,0,alfa> 
   translate<tamanhobraco+1,0.5,0>
  }
 }
#end

#macro B2(alfa,beta)
 #declare tamanhobraco=4;
 union {
  object { 
   cylinder {
   < 0, 0, 0 >,
      < tamanhobraco, 0, 0 >,
      1
    texture {textura1}
    }
   }
   object {
     cylinder {
   < 0, 0, -1 >,
      < 0, 0, 1 >,
      1
    texture {textura1}
    }
     translate<tamanhobraco+1,0,0>
  }
  object{
   B1(alfa)
   rotate<0,0,beta> 
   translate<tamanhobraco+1,0,0>  
  }
 }
#end

#macro B3(alfa,beta,gama)
 #declare tamanhobraco=3;
 union { 
  difference {
   object {
      cylinder {
    < 0, 0, -4 >,
      < 0, 0, 4 >,
      tamanhobraco
     texture {textura1}
     }
   }
   object {
      cylinder {
    < 0, 0, -10 >,
      < 0, 0, 10 >,
      tamanhobraco-1
     texture {textura1}
    }
   }
  }
  object{
   B2(alfa,beta)
   
   translate<tamanhobraco-1,0,0>  
  }
  rotate<0,0,gama> 
 }
#end

#macro B4(alfa,beta,gama,delta)
 #declare tamanhobraco=10;
 union { 
  object {
   cylinder {
   < 0, 0, -tamanhobraco >,
   < 0, 0, tamanhobraco >,
   1
   texture {textura1}
   }
  }
  object {
   B3(alfa,beta,gama)
   translate<0,0,delta> 
  }
  
  difference {
   object {
    cylinder {
    < -2, 0, tamanhobraco+8 >,
    < 2, 0, tamanhobraco+8 >,
    3
    texture {textura1}
    }
   }
   object {
    cylinder {
    < -6, 0, tamanhobraco+8 >,
    < 6, 0, tamanhobraco+8 >,
    2
    texture {textura1}
    }
   }
  }
  
  difference {
   object {
    cylinder {
    < -2, 0, -tamanhobraco-8 >,
    < 2, 0, -tamanhobraco-8 >,
    3
    texture {textura1}
    }
   }
   object {
    cylinder {
    < -6, 0, -tamanhobraco-8 >,
    < 6, 0, -tamanhobraco-8 >,
    2
    texture {textura1}
    }
   }
  }
  
 }
#end
    

#macro B5(alfa,beta,gama,delta,teta)
 #declare distanciabraco=11;
 #declare tamanhobraco=10;
 
 union {
  object {  
   cylinder {
   < -tamanhobraco, 0, -distanciabraco >,
   < tamanhobraco, 0, -distanciabraco >,
   1
   texture {textura1}
   }
  }
  
  object { 
   cylinder {
   < -tamanhobraco, 0, distanciabraco >,
   < tamanhobraco, 0, distanciabraco >,
   1
   texture {textura1}
   }
  }
  
  object { 
   cylinder {
   < -tamanhobraco+1,0,-distanciabraco >,
   < -tamanhobraco+1,-4,-distanciabraco>
   1
   texture {textura1}
   }
  }
  object { 
   cylinder {
   < tamanhobraco-1,0,-distanciabraco >,
   < tamanhobraco-1,-4,-distanciabraco>
   1
   texture {textura1}
   }
  }
  object { 
   cylinder {
   < -tamanhobraco+1,0,distanciabraco >,
   < -tamanhobraco+1,-4,distanciabraco>
   1
   texture {textura1}
   }
  }
  object { 
   cylinder {
   < tamanhobraco-1,0,distanciabraco >,
   < tamanhobraco-1,-4,distanciabraco>
   1
   texture {textura1}
   }
  }
  
  object {
   B4(alfa,beta,gama,delta)
   translate<teta,0,0> 
  }
 }
 
#end

#declare alfa=45;
#declare beta=40;
#declare gama=10;
#declare delta=2;
#declare teta=4;
object {
 B5(alfa,beta,gama,delta,teta)
 translate<+15,0,0> 
}

#declare alfa=35;
#declare beta=10;
#declare gama=90;
#declare delta=1;
#declare teta=-5;

object {
 B5(alfa,beta,gama,delta,teta)
 translate<-15,0,0> 
}

// Original camera parameters:
// #local cam_ctr = <6.00,0.00,0.00>
// #local cam_vec = (<5,35,45>-<6.00,0.00,0.00>)
// #local cam_sky = (1*y)

#include "camlight.inc"
camlight(<0.00,0.00,0.00>,<-10,5,10>,70.0,y,1.0)