// Last edited on 2003-06-28 04:07:12 by stolfi

#include "colors.inc"

background{ color White }
camera {
  location 1.8 * <10,0,-20>
  right 0.80*x  up 0.60*y  sky y
  look_at <0,0,0>
}
light_source { 50*<+10, 15,  -7> color 1.2*White }
light_source { 50*<-15, 20, -10> color 0.6*White }
light_source { 50*< -2,  2, -10> color 0.6*White }

#declare anel =
  torus {
    2, 0.25
    pigment { 
      checker Blue, Cyan
      scale <0.5,50.0,0.5> translate 25*y
    }
  }

#declare cilindro = 
  cylinder {
      < -3, 0, 0 >
      < +3, 0, 0 >,
      1.5
      pigment { 
        checker Orange, Red
        scale <0.5,0.5,0.5> translate 25*y
      }
    }    

#declare caixa =
  box {
    <-2, +2, +2>,  
    <+2, -2, -2>   
    pigment { 
      checker Green, color rgb < 0.1, 0.6, 0.0 >
      scale <0.5,0.5,0.5> translate 25*y
    }
  }

#declare furo = 
  cylinder {
      < -2.5, 0, 0 >
      < +2.5, 0, 0 >,
      1.5
    }

#declare parafuso = 
  difference {
	object { caixa }
	object { furo }
  }

#declare prisma = 
  prism {
    conic_sweep
    linear_spline
    0, 
    1, 
    5, 
    <2,2>,<-2,2>,<-2,-2>,<2,-2>,<2,2>
    pigment { 
      checker White, Orange
      scale <0.5,0.5,0.5> translate 25*y
    }
    rotate <180, 0, 0>
    translate <0, 1, 0>
    scale <1, 3, 1>
    rotate <0, 0, 90>
  }

#declare furoprisma = 
  cylinder {
      < -0.5, 0, 0 >
      < +0.5, 0, 0 >,
      1.5
    }

#declare ponta = 
  difference {
	object { prisma }
	object { furoprisma }
  }

/////////// Clock 

#if (clock < 0.05) 
  #declare xp = 10; 
  #declare yp = -8;
  #declare zp = 6;
  #declare xa1 = -8;
  #declare ya1 = 7;
  #declare za1 = -5;
  #declare xa2 = 10;
  #declare ya2 = 6;
  #declare za2 = 0;
  #declare xt1 = -6;
  #declare yt1 = 4;
  #declare zt1 = 0;
  #declare xt2 = 6;
  #declare yt2 = -4;
  #declare zt2 = 0;
  #declare rp = 0;

#else
  #if (clock < 0.20) 

  #declare xp = 10; 
  #declare yp = -8;
  #declare zp = 6;
  #declare xa1 = -8+5*((clock-0.05)/0.15);
  #declare ya1 = 7-7*((clock-0.05)/0.15);
  #declare za1 = -5+5*((clock-0.05)/0.15);
  #declare xa2 = 10;
  #declare ya2 = 6;
  #declare za2 = 0;
  #declare xt1 = -6;
  #declare yt1 = 4;
  #declare zt1 = 0;
  #declare xt2 = 6;
  #declare yt2 = -4;
  #declare zt2 = 0;
  #declare rp = 0;

#else
  #if (clock < 0.35) 

  #declare xp = 10; 
  #declare yp = -8;
  #declare zp = 6;
  #declare xa1 = -3+1*((clock-0.2)/0.15);
  #declare ya1 = 0;
  #declare za1 = 0;
  #declare xa2 = 10;
  #declare ya2 = 6;
  #declare za2 = 0;
  #declare xt1 = -6+3*((clock-0.2)/0.15);
  #declare yt1 = 4-4*((clock-0.2)/0.15);
  #declare zt1 = 0;
  #declare xt2 = 6;
  #declare yt2 = -4;
  #declare zt2 = 0;
  #declare rp = 0;   

#else
  #if (clock < 0.50)

  #declare xp = 10-7*((clock-0.35)/0.15); 
  #declare yp = -8+8*((clock-0.35)/0.15);
  #declare zp = 6-6*((clock-0.35)/0.15);
  #declare xa1 = -2;
  #declare ya1 = 0;
  #declare za1 = 0;
  #declare xa2 = 10;
  #declare ya2 = 6;
  #declare za2 = 0;
  #declare xt1 = -3+0.5*((clock-0.35)/0.15);
  #declare yt1 = 0;
  #declare zt1 = 0;
  #declare xt2 = 6;
  #declare yt2 = -4;
  #declare zt2 = 0;
  #declare rp = 0;   

#else   
  #if (clock < 0.65) 

  #declare xp = 3-3*((clock-0.5)/0.15); 
  #declare yp = 0;
  #declare zp = 0;
  #declare xa1 = -2;
  #declare ya1 = 0;
  #declare za1 = 0;
  #declare xa2 = 10-7*((clock-0.5)/0.15);
  #declare ya2 = 6-6*((clock-0.5)/0.15);
  #declare za2 = 0;
  #declare xt1 = -2.5;
  #declare yt1 = 0;
  #declare zt1 = 0;
  #declare xt2 = 6;
  #declare yt2 = -4;
  #declare zt2 = 0;
  #declare rp = clock*90/0.2;  

#else   
  #if (clock < 0.80)

  #declare xp = 0; 
  #declare yp = 0;
  #declare zp = 0;
  #declare xa1 = -2;
  #declare ya1 = 0;
  #declare za1 = 0;
  #declare xa2 = 3-1*((clock-0.65)/0.15);
  #declare ya2 = 0;
  #declare za2 = 0;
  #declare xt1 = -2.5;
  #declare yt1 = 0;
  #declare zt1 = 0;
  #declare xt2 = 6-3*((clock-0.65)/0.15);
  #declare yt2 = -4+4*((clock-0.65)/0.15);
  #declare zt2 = 0;
  #declare rp = 0;  

#else
  #if (clock < 0.95)

  #declare xp = 0; 
  #declare yp = 0;
  #declare zp = 0;
  #declare xa1 = -2;
  #declare ya1 = 0;
  #declare za1 = 0;
  #declare xa2 = 2;
  #declare ya2 = 0;
  #declare za2 = 0;
  #declare xt1 = -2.5;
  #declare yt1 = 0;
  #declare zt1 = 0;
  #declare xt2 = 3-0.5*((clock-0.8)/0.15);
  #declare yt2 = 0;
  #declare zt2 = 0;
  #declare rp = 0;     

#else

  #declare xp = 0; 
  #declare yp = 0;
  #declare zp = 0;
  #declare xa1 = -2;
  #declare ya1 = 0;
  #declare za1 = 0;
  #declare xa2 = 2;
  #declare ya2 = 0;
  #declare za2 = 0;
  #declare xt1 = -2.5;
  #declare yt1 = 0;
  #declare zt1 = 0;
  #declare xt2 = 2.5;
  #declare yt2 = 0;
  #declare zt2 = 0;
  #declare rp = 0;   
         
        #end
      #end
    #end
  #end
#end
#end
#end

/////////// Pedacos do Corpo do Macaco


////////// Montagem Final

union {
  object { cilindro }
  object { parafuso translate<0, 0, 0> rotate <rp, 0, 0> translate <xp, yp, zp> }
  object { anel rotate<0,0,90> translate <xa1, ya1, za1> }
  object { anel rotate<0,0,90> translate <xa2, ya2, za2> }
  object { ponta translate <xt1, yt1, zt1> }
  object { ponta rotate<0,180,0> translate <xt2, yt2, zt2> } 
}