// Exemplo de arquivo de descricao de cena para POV-ray
// Last edited on 2010-03-04 15:44:01 by stolfi

// ======================================================================
// CORES E TEXTURAS

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

#declare tx_plastico = 
  texture{
    pigment{ color rgb < 0.10, 0.80, 1.00 > }
    finish{ diffuse 0.8 ambient 0.1 specular 0.5 roughness 0.005 }
  }

#declare tx_fosca = 
  texture{
    pigment{ color rgb < 1.00, 0.80, 0.10 > }
    finish{ diffuse 0.9 ambient 0.1 }
  }

#declare tx_fosca2 = 
  texture{
    pigment{ color rgb < 0.10, 0.40, 1.00 > }
    finish{ diffuse 0.9 ambient 0.1 }
  }

#declare tx_fosca3 = 
  texture{
    pigment{ color rgb < 0.30, 0.50, 0.20 > }
    finish{ diffuse 0.9 ambient 0.1 }
  }

#declare tx_espelho = 
  texture{
    pigment{ color rgb < 1.00, 0.85, 0.30 > }
    finish{ diffuse 0.8 reflection 0.7*< 1.00, 0.85, 0.30 > ambient 0.1 }
  }

#declare tx_vidro = 
  texture{
    pigment{ color rgb < 0.85, 0.95, 1.00 > filter 0.70 }
    finish{ diffuse 0.03 reflection 0.25 ambient 0.02 specular 0.25 roughness 0.005 }
  }


#declare tx_xadrez =
  texture{
    pigment{ checker color rgb < 0, 0, 0 >, color rgb < 1, 1, 1 > filter 0.9}
    finish{ diffuse 0.9 ambient 0.1 }
    scale 2.0
  }


// ======================================================================
// DESCRIÇÃO DA CENA 

// Partes da cena:

#declare handle_1 =
  box{
    <0, 0, 0>,
    <3, 14, 2>
    texture { tx_fosca }
  }

#declare handle_2 =
  cylinder{
    <0, 0, 0>,
    <0, 0, 2>,
    7
    texture { tx_fosca }
  }

#declare handle_2_furo =
  cylinder{
    <0, 0, 0>,
    <0, 0, 3>,
    5
    texture { tx_fosca }
  }

#declare tira_resto =
  box{
    <0, 0, 0>,
    <16, 16, 4>
    texture { tx_fosca }
  }

#declare cabo =
  box{
    <0, 0, 0>,
    <16, 2, 2>
    texture { tx_fosca }
  }

#declare pa =
  cylinder{
    <0, 0, 0>,
    <0, 0, 2>,
    8
    texture { tx_fosca }
  }

#declare pa_furo =
  cylinder{
    <0, 0, 0>,
    <0, 0, 3>,
    6
    texture { tx_fosca }
  }

#macro pas (X)
  union {
    difference {
      object{ pa }
      union{
        object{ pa_furo translate<0, 0, -0.5> }
        object{ tira_resto translate<-8, 0, -0.5> }
      }
    }

    translate<8, 0, 0>
    rotate<0, 0, X*-45>
    translate<-8 + cos(X * 45), sin(X * 45), 0>
  }
#end

#macro tudo (X)
union{
  //object{ eixos(25.00) }
  
  object{ handle_1 texture{ tx_vidro } }

  difference{ 
    object{ handle_2 translate <4, 7, 0> }

    union{
      object{ handle_2_furo translate <4, 7, -0.5> }
      object{ tira_resto translate <-16, -1, -1> }
    }
  }

  object{ cabo translate <10, 6, 0> }

  object{ pas(X) translate <32, 7, 0> }
  object{ pas(X) scale<0, -1, 0> translate <32, 7, 0> }
  
}
#end


#include "eixos.inc"

// Aqui está a cena, finalmente:

union{
  object { tudo(0) }
  object { tudo(0.5) translate<0, 0, 20> }
  object { tudo(1) translate<0, 0, 40> }
}

#include "camlight.inc"
#declare centro_cena = < 0.00, 0.00, 0.00 >;
#declare raio_cena = 110.0;
#declare dir_camera = < 1.00, 1.00, 1.00 >;
#declare dist_camera = 115.0;
#declare intens_luz = 1.00;
camlight(centro_cena, raio_cena, dir_camera, dist_camera , z, intens_luz)