//Pov-Ray Dalek
//BotRejectsInc.
//www.cronodon.com

#include "colors.inc"
#include "metals.inc"
#include "shapes.inc"
#include "shapes2.inc"
#include "shapesq.inc"
#include "glass.inc"

background {color White*0}

global_settings { ambient_light rgb <1, 1, 1>*(1) }

light_source { <0,-50,-100> color rgb <1,1,1>*1 translate <0, 0, 0> shadowless }
light_source { <0,250,-150> color rgb <1,1,1>*1 translate <0, 0, 0> shadowless }

camera { location <0,0,-150+110> look_at <0,0,0> translate <0,0,0> }  

union{

//Main body
mesh {

//Panel OA
triangle { <0,0,0>, <8,0,14>, <25,71.1,0> }
triangle { <8,0,14>, <25,71.1,0>, <29,71.1,12> }
//Panel AB
triangle { <8,0,14>, <24,0,29>, <29,71.1,12> }
triangle { <24,0,29>, <41,71.1,22>, <29,71.1,12> }
//Panel BC
triangle { <24,0,29>, <45,0,34>, <41,71.1,22> }
triangle { <45,0,34>, <54,71.1,28>, <41,71.1,22> }
//Panel CD
triangle { <45,0,34>, <84,0,34>, <54,71.1,28> }
triangle { <84,0,34>, <79,71.1,28>, <54,71.1,28> }
//Panel DE
triangle { <84,0,34>, <96.5,0,21>, <79,71.1,28> }
triangle { <96.5,0,21>, <86,71.1,15.5>, <79,71.1,28> }
//Panel EF
triangle { <96.5,0,21>, <96.5,0,0>, <86,71.1,15.5> }
triangle { <96.5,0,0>, <86,71.1,0>, <86,71.1,15.5> }

//Panel OA
triangle { <0,0,0>, <8,0,-14>, <25,71.1,0> }
triangle { <8,0,-14>, <25,71.1,0>, <29,71.1,-12> }
//Panel AB
triangle { <8,0,-14>, <24,0,-29>, <29,71.1,-12> }
triangle { <24,0,-29>, <41,71.1,-22>, <29,71.1,-12> }
//Panel BC
triangle { <24,0,-29>, <45,0,-34>, <41,71.1,-22> }
triangle { <45,0,-34>, <54,71.1,-28>, <41,71.1,-22> }
//Panel CD
triangle { <45,0,-34>, <84,0,-34>, <54,71.1,-28> }
triangle { <84,0,-34>, <79,71.1,-28>, <54,71.1,-28> }
//Panel DE
triangle { <84,0,-34>, <96.5,0,-21>, <79,71.1,-28> }
triangle { <96.5,0,-21>, <86,71.1,-15.5>, <79,71.1,-28> }
//Panel EF
triangle { <96.5,0,-21>, <96.5,0,0>, <86,71.1,-15.5> }
triangle { <96.5,0,0>, <86,71.1,0>, <86,71.1,-15.5> }

//pigment { rgbt <1,1,1,0>*1 }
texture { T_Chrome_4A }
}


//Base
prism {
 linear_sweep
 linear_spline
 -8, // sweep the following shape from here ...
 0, // ... up through here
 12, // the number of points making up the shape ...
 <0,0>, <8,14>, <24,29>, <45,34>, <84,34>, <96.5-2,21>, <96.5-2,0>,
 <96.5-2,-21>, <84,-34>, <45,-34>, <24,-29>, <8,-14>
 pigment { rgbt <1,1,1,0>*1 }
 scale <1.1,0.9,1.2> translate <-9.65/2,5,0>
}

//Sensor globes
#declare X2 = 1.3;
#declare Z2 = 1.5;
#declare X3 = 1.39;
#declare Z3 = 1.5;
#declare X4 = 1.45;
#declare Z4 = 1.5;
#declare X5 = 1.54;
#declare Z5 = 1.5;
#declare X6 = 1.45;
#declare Z6 = 1.5;
#declare X7 = 1.45;
#declare Z7 = 1.5;

union{
#declare R = 4.5;
//row 1
#declare Y = 11.52;
sphere { <Y/tan(1.25)+R,Y,7>, R }
sphere { <16+Y/tan(X2),Y,21.5-Y/tan(Z2)>, R }
sphere { <34.5+Y/tan(X3),Y,31.5-Y/tan(Z3)>, R }
sphere { <53+Y/tan(X4),Y,34-Y/tan(Z4)>, R }
sphere { <75-Y/tan(X5),Y,34-Y/tan(Z5)>, R }
sphere { <90.25-Y/tan(X6),Y,27.5-Y/tan(Z6)>, R }
sphere { <96.5-Y/tan(X7),Y,10.5-Y/tan(Z7)>, R }
//
sphere { <Y/tan(1.25)+R,Y,-7>, R }
sphere { <16+Y/tan(X2),Y,-21.5+Y/tan(Z2)>, R }
sphere { <34.5+Y/tan(X3),Y,-31.5+Y/tan(Z3)>, R }
sphere { <53+Y/tan(X4),Y,-34+Y/tan(Z4)>, R }
sphere { <75-Y/tan(X5),Y,-34+Y/tan(Z5)>, R }
sphere { <90.25-Y/tan(X6),Y,-27.5+Y/tan(Z6)>, R }
sphere { <96.5-Y/tan(X7),Y,-10.5+Y/tan(Z7)>, R }
//row 2
#declare Y = 11.52+16.02;
sphere { <Y/tan(1.25)+R,Y,7>, R }
sphere { <16+Y/tan(X2),Y,21.5-Y/tan(Z2)>, R }
sphere { <34.5+Y/tan(X3),Y,31.5-Y/tan(Z3)>, R }
sphere { <53+Y/tan(X4),Y,34-Y/tan(Z4)>, R }
sphere { <75-Y/tan(X5),Y,34-Y/tan(Z5)>, R }
sphere { <90.25-Y/tan(X6),Y,27.5-Y/tan(Z6)>, R }
sphere { <96.5-Y/tan(X7),Y,10.5-Y/tan(Z7)>, R }
//
sphere { <Y/tan(1.25)+R,Y,-7>, R }
sphere { <16+Y/tan(X2),Y,-21.5+Y/tan(Z2)>, R }
sphere { <34.5+Y/tan(X3),Y,-31.5+Y/tan(Z3)>, R }
sphere { <53+Y/tan(X4),Y,-34+Y/tan(Z4)>, R }
sphere { <75-Y/tan(X5),Y,-34+Y/tan(Z5)>, R }
sphere { <90.25-Y/tan(X6),Y,-27.5+Y/tan(Z6)>, R }
sphere { <96.5-Y/tan(X7),Y,-10.5+Y/tan(Z7)>, R }
//Row 3
#declare Y = 11.52+(2*16.02);
sphere { <Y/tan(1.25)+R,Y,7>, R }
sphere { <16+Y/tan(X2),Y,21.5-Y/tan(Z2)>, R }
sphere { <34.5+Y/tan(X3),Y,31.5-Y/tan(Z3)>, R }
sphere { <53+Y/tan(X4),Y,34-Y/tan(Z4)>, R }
sphere { <75-Y/tan(X5),Y,34-Y/tan(Z5)>, R }
sphere { <90.25-Y/tan(X6),Y,27.5-Y/tan(Z6)>, R }
sphere { <96.5-Y/tan(X7),Y,10.5-Y/tan(Z7)>, R }
//
sphere { <Y/tan(1.25)+R,Y,-7>, R }
sphere { <16+Y/tan(X2),Y,-21.5+Y/tan(Z2)>, R }
sphere { <34.5+Y/tan(X3),Y,-31.5+Y/tan(Z3)>, R }
sphere { <53+Y/tan(X4),Y,-34+Y/tan(Z4)>, R }
sphere { <75-Y/tan(X5),Y,-34+Y/tan(Z5)>, R }
sphere { <90.25-Y/tan(X6),Y,-27.5+Y/tan(Z6)>, R }
sphere { <96.5-Y/tan(X7),Y,-10.5+Y/tan(Z7)>, R }
//Row 4
#declare Y = 11.52+(3*16.02);
sphere { <Y/tan(1.25)+R,Y,7>, R }
sphere { <16+Y/tan(X2),Y,21.5-Y/tan(Z2)>, R }
sphere { <34.5+Y/tan(X3),Y,31.5-Y/tan(Z3)>, R }
sphere { <53+Y/tan(X4),Y,34-Y/tan(Z4)>, R }
sphere { <75-Y/tan(X5),Y,34-Y/tan(Z5)>, R }
sphere { <90.25-Y/tan(X6),Y,27.5-Y/tan(Z6)>, R }
sphere { <96.5-Y/tan(X7),Y,10.5-Y/tan(Z7)>, R }
//
sphere { <Y/tan(1.25)+R,Y,-7>, R }
sphere { <16+Y/tan(X2),Y,-21.5+Y/tan(Z2)>, R }
sphere { <34.5+Y/tan(X3),Y,-31.5+Y/tan(Z3)>, R }
sphere { <53+Y/tan(X4),Y,-34+Y/tan(Z4)>, R }
sphere { <75-Y/tan(X5),Y,-34+Y/tan(Z5)>, R }
sphere { <90.25-Y/tan(X6),Y,-27.5+Y/tan(Z6)>, R }
sphere { <96.5-Y/tan(X7),Y,-10.5+Y/tan(Z7)>, R }

//pigment { rgbt <1,0,0,0> }
pigment { rgbt <0.4+0.2,1,0.2,0> }
//pigment { rgbt <0,1,1,0> }
finish { ambient 0.1 phong 0.2 phong_size 20 reflection { 0.0 } }
}

difference{
object {
Supercone ( <37,71.1,0>, 35-1, 28, <25.5,105.4-4,0>, 24, 24 )
rotate <0,0,-20> rotate <0,20,0> translate <8,16,18>
}
box { <82.5,70,-30>, <100,110,30> rotate <0,0,0> }
scale <1.06,0,0> translate <-6,0,2>
texture { T_Chrome_4B }
}
//Slats
box { <1,0,-2.5>, <0,18,2.5> pigment { rgbt <1,1,1,0> } rotate <0,0,10> translate <92,80,0> }
//8 x 2
union{
#declare Slats = 8;
#declare Slat = 1;
#while(Slat <= Slats)
box { <1,0,-2>, <0,18,2> pigment { rgbt <1,1,1,0> }
rotate <0,0,10>
#if(Slat = 1)
rotate <0,5,0>
translate <1.1,0,0>
#end
#if(Slat = 2)
rotate <0,5,0>
translate <1.1,0,0>
#end  
#if(Slat = 4)
translate <0.65,0,0> rotate <0,10,0>
#end
#if(Slat = 7)
rotate <0,20,0>
#end
#if(Slat = 8)
rotate <0,30,0>
#end
translate <46-2.5*Slat,80,0> rotate <0,(110/Slats)*Slat,0>
#if(Slat > 3 )
scale <1,1,0.9>
#end
#if(Slat = 8)
scale <1,1,0.9> rotate <0,-2,0>
#end
}
box { <1,0,-2>, <0,18,2> pigment { rgbt <1,1,1,0> }
rotate <0,0,10>
#if(Slat = 1)
rotate <0,-5,0>
translate <1.1,0,0>
#end
#if(Slat = 2)
rotate <0,-5,0>
translate <1.1,0,0>
#end   
#if(Slat = 4)
translate <0.65,0,0> rotate <0,10,0>
#end
#if(Slat = 7)
rotate <0,-20,0>
#end  
#if(Slat = 8)
rotate <0,-30,0>
#end
translate <46-2.5*Slat,80,0> rotate <0,-(110/Slats)*Slat,0>
#if(Slat > 3 )
scale <1,1,0.9>
#end
#if(Slat = 8)
scale <1,1,0.9> rotate <0,2,0>
#end  
}
#declare Slat = Slat + 1;
#end
translate <46,0,0>
}
//Short slats
union{
box { <1,8,-2>, <0,18,2> rotate <0,0,15> translate <30,80,0> rotate <0,142,0> }
box { <1,8,-2>, <0,18,2> rotate <0,0,15> translate <30,80,0> rotate <0,157,0> }
box { <1,8,-2>, <0,18,2> rotate <0,0,15> translate <30,80,0> rotate <0,172,0> }
box { <1,8,-2>, <0,18,2> rotate <0,0,15> translate <30,80,0> rotate <0,-142,0> }
box { <1,8,-2>, <0,18,2> rotate <0,0,15> translate <30,80,0> rotate <0,-157,0> }
box { <1,8,-2>, <0,18,2> rotate <0,0,15> translate <30,80,0> rotate <0,-172,0> }
pigment { rgbt <1,1,1,0> }
translate <56,0,0>
}
//Mesh
union{
#declare grids = 100;
#declare grid = 1;
#while(grid <= grids)
union{
cylinder { <0,0,0>, <0,18,0>, 0.2 rotate <15,0,0> rotate <0,0,9+1.0> translate <30,0,0> rotate
<0,(360/grids)*(grid-1),0> }
cylinder { <0,0,0>, <0,18,0>, 0.2 rotate <-15,0,0> rotate <0,0,9+1.0> translate <30,0,0> rotate
<0,(360/grids)*(grid-1),0> }
//Corrections for departure from cylindrical symmetry
#if(grid > 85 & grid < 90)
rotate <0,0,1>
#end
#if(grid > 12 & grid < 20)
rotate <3,0,0> translate <0,-1,-0.5>
#end
}
#declare grid = grid + 1;
#end
pigment { rgbt <1,1,1,0>*0.7 }
scale <1.06,1,0.92+0.01>
translate <60,80,0>
}

//Belt
intersection{
prism { linear_sweep cubic_spline
 0, // sweep from here ...
 -7.5, // ... up through here
 11, // number of points
 <30,-25>,   //(control point... not on curve)
 <-61,0>,   //THIS POINT ...
 <-35,30>,
 //<0,36>,
 <5,36>,
 <25,30>,
 <36,0>,
 <25,-30>,
 <5,-36>,
 //<0,-36>,
 <-35,-30>,
 <-61,0>,   //MUST MATCH THIS POINT
 <30,25>     //point#6 (control point... not on curve)
pigment { rgbt <1,1,1,0> }
}
cone { <0,-7.5,0>, 30, <0,0,0>, 29 pigment { rgb <1,1,1> } scale <2,1,1.21> }
scale <0.682,1,0.9>
translate <48+16+0.2,71+7.5-0.5,0>
}

//Arm box
difference{
box { <0,0,-21>, <8.5,14,21> pigment { rgbt <1,1,1,0> }
Shear_Trans(<1,0.5,0>, <0,1,0>, <0,0,1>)
rotate <0,0,-20>
translate <20,73,0>  
}
box { <2,0,-8>, <-10,20,8> pigment { rgbt <1,1,1,0>*0.6 } rotate <0,0,-20> translate <20,73,0> }
}
cylinder { <2,10,0>, <1,10,0>, 1 scale <1,4,6> pigment { rgbt <1,1,1,0> } rotate <0,0,-20> translate
<10,43,0> }
//Sucker arm
union{
sphere { <0,0,0>, 5 pigment { rgbt <1,1,1,0>*0.6 } }
cylinder { <0,0,0>, <-40,0,0>, 3 pigment { rgbt <1,1,1,0>*0.6 } }
cylinder { <-20,0,0>, <-88,0,0>, 2 pigment { rgbt <1,1,1,0>*0.6 } }
difference{
sphere { <-90,0,0>, 8 }
sphere { <-90,0,0>, 7 }
box { <-90,10,10>, <-100,-10,-10> }
pigment { rgbt <1,1,1,0>*0.4 }
}
rotate <0,20,0>
translate <24,79,15>
}

//Gun arm
sphere { <0,0,0>, 5 pigment { rgbt <1,1,1,0>*0.6 } translate <24,79,-15> }
union{
difference{
cylinder { <0,0,0>, <-40,0,0>, 2.5 }
cylinder { <-10,0,0>, <-50,0,0>, 1.2 }
pigment { rgbt <1,1,1,0>*0.6 }
}
#declare fins = 8;
#declare fin = 1;
#while(fin <= fins)
cylinder { <-5,0,0>, <-38,0,0>, 0.5 translate <0,3,0> rotate <(360/fins)*(fin-1),0,0> pigment { rgbt
<1,1,1,0>*0.4 } }
#declare fin = fin + 1;
#end
rotate <0,-20,0>
translate <24,79,-15>
}  

//Head
union{

cone { <0,0,0>, 44/2, <0,22.8,0>, 40/2 texture { T_Chrome_4B } translate <57,105.5,0> scale
<1.1,1,1.1> normal { dents 1 scale 0.5 } }
#declare rods = 8;
#declare rod = 1;
#while(rod <= rods)
cylinder { <0,-1,0>, <0,22.8,0>, 0.5  pigment { rgbt <1,1,1,0> } translate <33,105.5,0>
rotate <0,0,4.5> rotate <0,(360/rods)*(rod-1)+360/(2*rods),0> translate <62.5,0,0> }
#declare rod = rod + 1;
#end
//
union{
cone { <0,0,0>, 53/2, <0,1.5,0>, 50/2 pigment { rgbt <1,1,1,0> } translate <57,105.5,0> }
cone { <0,0,0>, 0.96*53/2, <0,1.5,0>, 0.96*50/2 pigment { rgbt <1,1,1,0> } translate
<57,105.5+7.5,0> }
cone { <0,0,0>, 0.96*0.96*53/2, <0,1.5,0>, 0.96*0.96*50/2 pigment { rgbt <1,1,1,0> } translate
<57,105.5+15,0> }
scale <1.1,1,1.1>
}  
//Dome
cone { <0,0,0>, 52/2, <0,7.5,0>, 46/2 pigment { rgbt <1,1,1,0>*0.5 } translate
<62.5,(105.5+22.8),0> scale 1  }
difference {
sphere { <0,0,0>, (44/1.1)/2 }
cylinder { <0,5,0>, <0,-20,0>, 41 }
pigment { rgb 0.5 } translate <57/1.05,(105.5+22.8+3)/1.05,0> scale 1.05
scale <1.1,1,1.1>  
}
translate <-2,-2,0>
}
sphere { <0,0,0>, 4 translate <48+10,140,20> pigment { rgbt <1,1,1,0.4> } }
sphere { <0,0,0>, 4 translate <48+10,140,-20> pigment { rgbt <1,1,1,0.4> } }

//Eye stalk
union{
difference{
cylinder { <0,0,3>, <0,0,-3>, 5 }
box { <-4.2,-10,10>, <-6,10,-10> }
pigment { rgbt <1,1,1,0>*0.8 }
rotate <0,0,-10>
}
cylinder { <0,1,0>, <-30,1,0>, 2 pigment { rgbt <1,1,1,0>*0.5 } rotate <0,0,-10> }
difference{
sphere { <-30,0,0>, 5 }
box { <-30,-10,-10>, <-40,10,10> }
rotate <0,0,-10>
pigment { rgbt <1,1,1,0>*0.5 }
translate <0,1,0>  
}
difference {
cone { <-30,0,0>, 5, <-34,0,0>, 4 }
cone { <-31,0,0>, 4, <-36,0,0>, 3 }
rotate <0,0,-10>
pigment { rgbt <1,1,1,0>*0.5 }
translate <0,1,0>  
}
//Lens
union{
cylinder { <-33,0,0>, <-32,0,0>, 3.5 texture { T_Glass1 } }
difference{
cylinder { <-33.1,0,0>, <-33,0,0>, 2 pigment { rgbt <1,1,1,0> } }
cylinder { <-33.2,0,0>, <-32,0,0>, 1.5 pigment { rgbt <1,1,0,0> } }
}
rotate <0,0,-10>
translate <0,1,0>  
}
union{
sphere { <0,0,0>, 4 scale <0.2,0.8,1> translate <-21.5,0,0> rotate <0,0,-10> pigment { rgbt
<1,1,1,0>*0.5 } translate <0,1,0> }
sphere { <0,0,0>, 4 scale <0.2,1,1> translate <-20,0,0> rotate <0,0,-10> pigment { rgbt
<1,1,1,0>*0.5 } translate <0,1,0> }
sphere { <0,0,0>, 4 scale <0.2,1.2,1> translate <-20+1.5,0,0> rotate <0,0,-10> pigment { rgbt
<1,1,1,0>*0.5 } translate <0,1,0> }
sphere { <0,0,0>, 4 scale <0.2,1,1> translate <-20+3,0,0> rotate <0,0,-10> pigment { rgbt
<1,1,1,0>*0.5 } translate <0,1,0> }
sphere { <0,0,0>, 4 scale <0.2,0.8,1> translate <-20+4.5,0,0> rotate <0,0,-10> pigment { rgbt
<1,1,1,0>*0.5 } translate <0,1,0> }  
scale <1,1.05,1.05>
}
translate <43,141,0>
}


translate <0,-80,0>
scale 0.2

rotate <0,-40,0> //angled view

//rotate <0,-90,0> //front view
//rotate <0,90,0> //rear view
//rotate <0,180,0> translate <0,0,5> //right side
//rotate <0,0,0> translate <0,0,5> //left side
//rotate <-90,0,0> //top view
}