#include "colors.inc"
#include "textures.inc"


// MONUMENTO
#declare bloco =
   box{<-10,0,-6.5><10,3,6.5>      // caixa principal a ser escavada
   pigment{color Gray}
   }


//OBJETOS NOS APARTAMENTOS

#declare varanda = merge{
   box{<10, 0.2, 3>,<11, 0, 1.2>}
   prism {
    linear_sweep
    linear_spline
    0.2,
    1.2,
    9,
    <9.8,3>, <11,3>, <11,1.2>, <9.8,1.2>, <9.8, 1.3>, <10.9,1.3>, <10.9,2.9>,<9.8,2.9>,<9.8,3>
    }
  pigment{color rgbt<0,0,1,.7>}
}

#declare porta_de_entrada =
   box{<3.4,.2002,.3001>,<3.6,2.5999,1.0999>
   pigment{DMFWood4}
   }

#declare porta_da_cozinha =
   box{<3.8001,.2002,1.4>,<4.5999,2.5999,1.6>
   pigment{DMFWood4}
   }

#declare janela_do_quarto =
   box{<9.8,1.2001,4.0001>,<10,2.5999,5.7999>
   texture{NBglass}
   }

#declare janela_do_banheiro =
   box{<2.4,2.0001,5.2501>,<2.6,2.5999,6.2499>
   texture{NBglass}
   }

#declare janela_da_cozinha =
   box{<2.4,.8001,2.9001>,<2.6,2.5999,3.3999>
   texture{NBglass}
   }

#declare janela_de_fora =
   box{<.8001,1.5001,2.4>,<1.4999,2.5999,2.6>
   texture{NBglass}
   }



#declare objetos = merge{

   object{janela_de_fora}
   object{janela_de_fora scale<-1,1,1>}

   #declare i=0;
   #while (i<4)
     #switch (i)
       #case (0)
         #declare j=1;
         #declare k=1;
       #break
       #case (1)
         #declare j=-1;
         #declare k=1;
       #break
       #case (2)
         #declare j=1;
         #declare k=-1;
       #break
       #case (3)
         #declare j=-1;
         #declare k=-1;
       #break
     #end
        object{varanda scale<j,1,k>}
        object{porta_de_entrada scale<j,1,k>}
        object{porta_da_cozinha scale<j,1,k>}
        object{porta_da_cozinha scale<j,1,k> translate<0,0,2*k>}        //portas da area de servico
        object{porta_da_cozinha scale<j,1,k> translate<2.2*j,0,2*k>}    //portas do quarto
        object{porta_de_entrada scale<j,1,k> translate<2*j,0,5*k>}      //portas do banheiro
        object{janela_do_quarto scale<j,1,k>}
        object{janela_do_banheiro scale<j,1,k>}
        object{janela_do_banheiro scale<j,1,k> translate<0,0,-1.5*k>}   //janela da area de servico
        object{janela_da_cozinha scale<j,1,k>}

     #declare i=i+1;
   #end
}

#declare espacos = merge{
   box{<-2.4, -0.001, 2.6>,<2.4, 3.1, 6.6>}    //espacos fora do predio
   box{<-2.4, -0.001, -2.6>,<2.4, 3.1, -6.6>}

   box{<-.9, -0.1, -1>,<.9, 3.1, 1>}            //poco do elevador

   box{<-2.4, 0.2001, 1.1>,<2.4, 3.1, 2.4>}     //corredores frente e tras do elevador
   box{<-2.4, 0.2001, -1.1>,<2.4, 3.1, -2.4>}

   box{<-2.4, 0.2, -1.2>,<-1.1, 3.1, 1.2>}      //laterais do elevador
   box{<2.4, 0.2, -1.2>,<1.1, 3.1, 1.2>}

   box{<-3.4, 0.2002, -1.4>,<-2.1, 3.1, 1.4>}    // entradas dos apartamentos
   box{<3.4, 0.2002, -1.4>,<2.1, 3.1, 1.4>}

   box{<-1.5, 1.5, 2.3>,<-.8, 2.6, 2.7>}         //janelas na frente do elevador
   box{<1.5, 1.5, 2.3>,<.8, 2.6, 2.7>}

   box{<-.5, .2, .8>,<.5, 2.6, 1.2>}                //porta do elevador


   #declare i=0;
   #while (i<4)
     #switch (i)
       #case (0)
         #declare j=1;
         #declare k=1;
       #break
       #case (1)
         #declare j=-1;
         #declare k=1;
       #break
       #case (2)
         #declare j=1;
         #declare k=-1;
       #break
       #case (3)
         #declare j=-1;
         #declare k=-1;
       #break
     #end
        box{<9.8, 0.2, 6.3>,<5.6, 3.1, 3.6> scale<j,1,k>}       // quartos
        box{<9.8, 0.2, 3.4>,<5.6, 3.1, 0.1> scale<j,1,k>}	// salas
        box{<5.7, 0.2001, 1.4>,<3.6, 3.1, 0.1> scale<j,1,k>}    // corredores
        box{<5.4, 0.2, 3.4>,<2.6, 3.1, 1.6> scale<j,1,k>}	// cozinhas
        box{<5.4, 0.2, 6.3>,<2.6, 3.1, 5.1> scale<j,1,k>}	// banheiros
        box{<5.4, 0.2, 4.9>,<2.6, 3.1, 3.6> scale<j,1,k>}	// areas de servico
        box{<10.1, 0.2, 3>,<9.7, 2.6, 1.2> scale<j,1,k>}	// varandas da sala
        box{<10.1, 1.2, 4>,<9.7, 2.6, 5.8> scale<j,1,k>}	// janelas no quarto
        box{<2.3, 2, 5.25>,<2.7, 2.6, 6.25> scale<j,1,k>}	// janelas no banheiro
        box{<2.3, 2, 4.75>,<2.7, 2.6, 3.75> scale<j,1,k>}	// janelas na area de servico
        box{<2.3, .8, 2.9>,<2.7, 2.6, 3.4> scale<j,1,k>}	// janelas na cozinha
        box{<3.3, .2, .3>,<3.7, 2.6, 1.1> scale<j,1,k>}		// portas de entrada
        box{<4.6, .2, 1.3>,<3.8, 2.6, 1.7> scale<j,1,k>}	// portas da cozinha para o corredor
        box{<4.6, .2, 3.3>,<3.8, 2.6, 3.7> scale<j,1,k>}	// portas da cozinha para a área de serviço
        box{<6, .2, 3.3>,<6.8, 2.6, 3.7> scale<j,1,k>}		// portas da sala para o quarto
        box{<5.3, .2, 6.1>,<5.7, 2.6, 5.3> scale<j,1,k>}	// portas do banheiro
     #declare i=i+1;
   #end
}

#declare andar = difference{
  object{bloco}
  object{espacos
    texture {
      pigment{color White}
    }
  }
}

#declare andar_completo = merge{
  object{andar}
  object{objetos}
}

object{andar_completo}
object{andar_completo translate 3*y}
object{andar_completo translate 6*y}
object{andar_completo translate 9*y}
object{andar_completo translate 12*y}
object{andar_completo translate 15*y}
object{andar_completo translate 18*y}

// PAVIMENTO
plane{<0,1,0>,0 texture{pigment{color Green}}}


// FUNDO
background{ color Blue}
box{<500,1000,500>,<-500,-1,-500> pigment {
      bozo
      turbulence .1
      color_map {
        [0.0 color White filter 1]
        [1.0 color White]
      }
    }
    hollow}


// CAMERA
camera {
location <0,10,40>
look_at <0,10,0>
}

// LUZ
light_source{ <0,50,70> color White}
light_source{ <50,50,0> color White}