/*------------------------------------------------------------------*/ /* TEXTURES */ /*------------------------------------------------------------------*/ #declare BodyTexture = texture { #if (use_flat) pigment { color White } #else pigment { //rgb ReflectiveSpectrum(RS_White_Shiny_Plastic) //RS_TitaniumWhite_PW6_PW4 //rgb ReflectiveSpectrum(RS_TitaniumWhite_PW6_PW4) //RS_White_A4_Paper color White //color Tan } finish { reflection .1 //reflection 0 ambient .5 //.5 //roughness 12 roughness 0.01 } #end } #declare p_micro2= pigment{ crackle turbulence 1 color_map{ [0.00 White*.9] //7] [0.01 White*.9] //7] [0.02 White] [1.00 White] } scale 5 } #declare p_micro1= pigment{ cells turbulence .5 color_map{ [0.0 White*1] //.9] [1.0 White] } scale .01 } #declare p_brushed_new= pigment{ average turbulence 0 pigment_map{ [0.0 p_micro1] [0.1 p_micro1 rotate 45*x] [0.2 p_micro1 rotate -45*x] [0.3 p_micro2] [0.4 p_micro1 rotate 45*y] [0.5 p_micro1 rotate -45*y] [0.6 p_micro1 rotate 90*z] [0.7 p_micro2 rotate 45] [0.8 p_micro1 rotate 45*z] [0.9 p_micro1 rotate 90*y] [1.0 p_micro1 rotate -45*z] } scale .1 } // + declare the final normal as image_pattern #declare n_brushed_new = normal{pigment_pattern{p_brushed_new} .1 } // .4} #declare RobotMetalTexture = texture { #if (use_flat) pigment { color Gray } #else //Silver2 //Aluminum T_Chrome_3C pigment { //rgb <.70,.70,.70> //rgb <0.55, 0.5, 0.45> //rgb ReflectiveSpectrum(RS_BrushedAluminum1) //rgb ReflectiveSpectrum(RS_Nickel1) //rgb <.25,.25,.25> //color White } finish { //metallic //ambient 0.1 //ambient 0.6 //diffuse 0.65 //specular 0.5 //specular 0.85 //specular 1 //roughness 0.001 //reflection { // 0.45 // metallic //fresnel on //} brilliance 1.5 } normal{ n_brushed_new .5 scale .25 } #end } // ************************* // *** OLD BRUSHED METAL *** // ************************* // + microsurface normal /* #declare p_micro2= pigment{ crackle turbulence 1 color_map{ [0.00 White*.9] //7] [0.01 White*.9] //7] [0.02 White] [1.00 White] } scale 5 } #declare p_micro1= pigment{ cells turbulence .5 color_map{ [0.0 White*1] //.9] [1.0 White] } scale .01 } // + average all the normals #declare p_brushed_new= pigment{ average turbulence 0 pigment_map{ [0.0 p_micro1] [0.1 p_micro1 rotate 45*x] [0.2 p_micro1 rotate -45*x] [0.3 p_micro2] [0.4 p_micro1 rotate 45*y] [0.5 p_micro1 rotate -45*y] [0.6 p_micro1 rotate 90*z] [0.7 p_micro2 rotate 45] [0.8 p_micro1 rotate 45*z] [0.9 p_micro1 rotate 90*y] [1.0 p_micro1 rotate -45*z] } scale .1 } // + declare the final normal as image_pattern #declare n_brushed_new= normal{pigment_pattern{p_brushed_new} .1 } // .4} // + declare the final metal texture #declare t_metal = texture{ pigment{ //rgb ReflectiveSpectrum(RS_BoltMetal2) //rgb ReflectiveSpectrum(RS_Nickel1) // rgb ReflectiveSpectrum(RS_NickelBrass1) //rgb ReflectiveSpectrum(RS_NordicGold1) color White // rgb ReflectiveSpectrum(RS_Iron) // rgb ReflectiveSpectrum(RS_StainlessSteel1) } finish{ Metal reflection .1 ambient 1 diffuse 0 } //#if (use_norm) normal{n_brushed_new .5} //#end } */ /*------------------------------------------------------------------*/ /* PARTS */ /*------------------------------------------------------------------*/ #declare Triangle=union { triangle { <-1,0,1>,<0,1,0>,<1,0,1> } triangle { <1,0,1>,<0,1,0>,<1,0,-1> } triangle { <-1,0,-1>,<0,1,0>,<1,0,-1> } triangle { <-1,0,1>,<0,1,0>,<-1,0,-1> } scale .5 } #macro CylinderGrip(wid, dia, cnt) union { #if (show_grip) #local s = wid/cnt; #local ang = 0; #local ang_step = (360*s)/(pi*dia); #while (ang < 360) #local start_x = 0; #local end_x = wid; #local step_x = (end_x - start_x) / cnt; #local n = start_x; #while (n rotate } #local n = n + step_x; #end #local ang = ang + ang_step; #end #end } #end #declare Bolt = union { cylinder { <0,-.3125,0>,<0,.3125,0>,1 } cylinder { <0,.3125,0>,<0,.4375,0>,1.0625 } cylinder { <0,-.3125,0>,<0,-.4375,0>,1.0625 } difference { union { torus { .8125, .25 } cylinder { <0,-.25,0>,<0,.25,0>,.8125 } } box { <-10,-10,-10>,<10,0,10> } cylinder { <0,-.125,.5>,<0,1,.5>,.16 } cylinder { <0,-.125,-.5>,<0,1,-.5>,.16 } cylinder { <-.4,-.125,0>,<-.4,1,0>,.16 } cylinder { <.4,-.125,0>,<.4,1,0>,.16 } cylinder { <0,-.125,0>,<0,1,0>,.32 } box { <-.16,-.125,.5>,<.16,1,-.5> } box { <-.4,-.125,-.16>,<.4,1,.16> } sphere { <0,.41,.5>,.26 } sphere { <0,.41,-.5>,.26 } sphere { <-.4,.41,0>,.26 } sphere { <.4,.41,0>,.26 } sphere { <0,.41,0>,.42 } cylinder { <0,.41,.5>,<0,.41,-.5>,.26 } cylinder { <-.4,.41,0>,<.4,.41,0>,.26 } translate<0,.4375,0> } cylinder { <0,-.4375,0>,<0,-.5,0>,1 } #if(show_grip) object { CylinderGrip(.625, 2, 4) rotate <0, 0, 90> translate <0,-.3125,0> } #end } #macro RoundDisc(inner, outer) union { torus { inner, outer } cylinder { <0, -outer, 0>, <0, outer, 0>, inner } } #end #macro RoundCylinder(inner, outer, length) union { torus { inner-outer, outer translate <0, length/2-outer, 0> } cylinder { <0, -length/2+outer, 0>, <0, length/2-outer, 0>, inner } cylinder { <0, -length/2, 0>, <0, length/2, 0>, inner-outer } torus { inner-outer, outer translate <0, -(length/2)+outer, 0> } } #end // FIX #macro RoundCylinder2(inner, outer, length) union { torus { inner, outer translate <0, length/2-outer, 0> } cylinder { <0, -length/2+outer, 0>, <0, length/2-outer, 0>, inner+outer } cylinder { <0, -length/2, 0>, <0, length/2, 0>, inner } torus { inner, outer translate <0, -(length/2)+outer, 0> } } #end #macro Tube(inner, outer, inner2, outer2, length) union { difference { RoundCylinder2(inner, outer, length) cylinder { <0, -1000, 0>, <0, 1000, 0>, inner2 - outer2 } cylinder { <0, -1000, 0>, <0, -(length/2-outer2), 0>, inner2 } cylinder { <0, 1000, 0>, <0, length/2-outer2, 0>, inner2 } } torus { inner2, outer2 translate <0, length/2-outer2, 0> } torus { inner2, outer2 translate <0, -(length/2-outer2), 0> } } #end #macro RoundCylinderWidthBars(inner, outer, bar_rad, length) union{ object { RoundCylinder(inner, outer, length) } #local tpad_y1 = length/2-(outer+bar_rad*2); #local tpad_y2 = -length/2+(outer+bar_rad*2); #local loop = 0; #while (loop < 360) union { sphere { <0, tpad_y1, -inner>, bar_rad } cylinder { <0,tpad_y1,-inner>, <0, tpad_y2, -inner>, bar_rad } sphere { <0, tpad_y2, -inner>, bar_rad } rotate <0, loop, 0> } #local loop = loop + 36; #end } #end #macro BoltTube(inner, outer, inner2, outer2, length) union { Tube(inner, outer, inner2, outer2, length) object { Bolt scale inner2 - outer2*3 translate <0, length/2, 0> } object { Bolt scale inner2 - outer2*3 rotate <180, 0, 0> translate <0, -length/2, 0> } } #end #macro RoundBox(w, h, d, r) union { cylinder { <-w/2+r, -h/2+r, -d/2+r>, , r } cylinder { <-w/2+r, h/2-r, -d/2+r>, , r } cylinder { <-w/2+r, -h/2+r, d/2-r>, , r } cylinder { <-w/2+r, h/2-r, d/2-r>, , r } cylinder { <-w/2+r, -h/2+r, -d/2+r>, <-w/2+r, h/2-r, -d/2+r>, r } cylinder { , , r } cylinder { <-w/2+r, -h/2+r, d/2-r>, <-w/2+r, h/2-r, d/2-r>, r } cylinder { , , r } sphere { <-w/2+r, -h/2+r, -d/2+r>, r } sphere { , r } sphere { <-w/2+r, -h/2+r, d/2-r>, r } sphere { , r } sphere { <-w/2+r, h/2-r, -d/2+r>, r } cylinder { <-w/2+r, h/2-r, -d/2+r>, <-w/2+r, h/2-r, d/2-r>, r } sphere { <-w/2+r, h/2-r, d/2-r>, r } sphere { , r } cylinder { , , r } sphere { , r } box { <-w/2, -h/2+r, -d/2+r>, } box { <-w/2+r, -h/2, -d/2+r>, } box { <-w/2+r, -h/2+r, -d/2>, } } #end /*-----------------------------------------------------*/ /* VENT */ /*-----------------------------------------------------*/ #declare Vent = union { #local VentBlade=object { box { <-10,-1.5,-.1>,<10,1.5,.1> } rotate<45,0,0> } difference { union { cylinder { <0,0,-2>,<0,0,2>,10 } cylinder { <0,0,0>,<0,0,15>,12 } torus { 10,2 rotate<90,0,0> } } cylinder { <0,0,-5>,<0,0,-1.7>,10 } cylinder { <0,0,-10>,<0,0,10>,9 } } intersection { cylinder { <0,0,-2>,<0,0,2>,9.5 } union { object { VentBlade translate<0,-8,0> } object { VentBlade translate<0,-6,0> } object { VentBlade translate<0,-4,0> } object { VentBlade translate<0,-2,0> } object { VentBlade } object { VentBlade translate<0,2,0> } object { VentBlade translate<0,4,0> } object { VentBlade translate<0,6,0> } object { VentBlade translate<0,8,0> } } } scale .10625 } /* #declare grip = union { #local length = 5; #local bevel = .5; object { cylinder_slice(length, 2, 7, -50, 50, bevel) } object { cylinder_slice(length, 2, 7, -50, 50, bevel) rotate <90,0,0> } object { cylinder_slice(length, 2, 7, -50, 50, bevel) rotate <180,0,0> } object { cylinder_slice(length, 2, 7, -50, 50, bevel) rotate <270,0,0> } } */ #macro MultiJoint(d1,d2,d3,d4,d5,s1,s2,s3,s4,s5,s6,r1,r2,cnt) /* #local d1 = 4; #local d2 = 6; #local d3 = 10; #local d4 = 2; #local d5 = 9; #local s1 = 1; #local s2 = .5; #local s3 = 2; #local s4 = 2; #local s5 = 1.5; #local s6 = 4; #local r1 = 1; #local r2 = .25; // .25 */ union { difference { union { object { RoundCylinder(d2/2, r2, s5) rotate <90, 0, 0> translate <0, 0, -s6/2-s5/2> } object { RoundBox(d2/2+s1+r1, d2, s5, r2) translate <(d2/2+s1+r1)/2, 0, -s6/2-s5/2> } } cylinder { <0, 0, -s6/2-s5/2>, <0,0,-1000>, d1/2 } cylinder { <0, 0, -s6/2-s5+r2/2>, <0,0,-1000>, d1/2 + r2 } cylinder { <0, 0, -1000>, <0, 0, 1000>, d4/2 } } torus { d1/2+r2, r2 rotate <90,0,0> translate <0,0,-s6/2-s5+r2> } union { object { RoundCylinder(d2/2, r2, s5) rotate <90, 0, 0> translate <0, 0, s6/2+s5/2> } object { RoundBox(d2/2+s1+r1, d2, s5, r2) translate <(d2/2+s1+r1)/2, 0, s6/2+s5/2> } } // R1 difference { //torus { d3/2-r1, r1 rotate <0, 0, 90> translate } object { RoundDisc(d3/2-r1, r1) rotate <0, 0, 90> translate } box { , <1000, 1000, 1000> } } // S2 cylinder { , , d3/2 } // R2 #1 difference { //torus { d3/2-r2, r2 rotate <0, 0, 90> translate } object { RoundDisc(d3/2-r2, r2) rotate <0, 0, 90> translate } box { <-1000, -1000, -1000>, } //pigment { color Red } } // S3 cylinder { , , d5/2 } // the grip object { CylinderGrip(s3, d5, cnt) translate } // R2 #2 difference { //torus { d3/2-r2, r2 rotate <0, 0, 90> translate } object { RoundDisc(d3/2-r2, r2) rotate <0, 0, 90> translate } box { , <1000, 1000, 1000> } } // S4 cylinder { , , d3/2 } } #end #declare BodyCover = union { // top shell difference { sphere { <0,0,0>,10 } sphere { <0,0,0>,9.8 } box { <-100,-100,-100>,<100,-5,100> } box { <-100,7,-100>,<100,100,100> } // arm hole cutout cylinder { <-100, 0, 0>,<100, 0, 0>, 3 } // slit cutout box { <-100, -100, -.5>, <100, 100, .5> } // eye cutouts sphere { <-3,3,-8>,3 } sphere { <3,3,-8>,3 } // mouth/nose cutout cylinder { <0,-2.5,0>,<0,-2.5,-100>, 3.5 } box { <-3.5,-2.5,0>,<3.5,-100,-100> } // vent cutouts cylinder { <0,0,0>, <0,0,-100>, 1.5 rotate <-15,65,0> } cylinder { <0,0,0>, <0,0,-100>, 1.5 rotate <-15,115,0> } cylinder { <0,0,0>, <0,0,-100>, 1.5 rotate <-15,-65,0> } cylinder { <0,0,0>, <0,0,-100>, 1.5 rotate <-15,-115,0> } cylinder { <0,0,0>, <0,0,-100>, 1.5 rotate <15,65,0> } cylinder { <0,0,0>, <0,0,-100>, 1.5 rotate <15,115,0> } cylinder { <0,0,0>, <0,0,-100>, 1.5 rotate <15,-65,0> } cylinder { <0,0,0>, <0,0,-100>, 1.5 rotate <15,-115,0> } } // dots around vents #local loop = 0; #while (loop < 360) sphere { <0, 0, 0> .125 scale <1, 1, .5> translate <0, 0, -10> rotate <0, -10, 0> rotate <0, 0, loop> rotate <-15,65,0> } sphere { <0, 0, 0> .125 scale <1, 1, .5> translate <0, 0, -10> rotate <0, -10, 0> rotate <0, 0, loop> rotate <-15,115,0> } sphere { <0, 0, 0> .125 scale <1, 1, .5> translate <0, 0, -10> rotate <0, -10, 0> rotate <0, 0, loop> rotate <-15,-65,0> } sphere { <0, 0, 0> .125 scale <1, 1, .5> translate <0, 0, -10> rotate <0, -10, 0> rotate <0, 0, loop> rotate <-15,-115,0> } sphere { <0, 0, 0> .125 scale <1, 1, .5> translate <0, 0, -10> rotate <0, -10, 0> rotate <0, 0, loop> rotate <15,65,0> } sphere { <0, 0, 0> .125 scale <1, 1, .5> translate <0, 0, -10> rotate <0, -10, 0> rotate <0, 0, loop> rotate <15,115,0> } sphere { <0, 0, 0> .125 scale <1, 1, .5> translate <0, 0, -10> rotate <0, -10, 0> rotate <0, 0, loop> rotate <15,-65,0> } sphere { <0, 0, 0> .125 scale <1, 1, .5> translate <0, 0, -10> rotate <0, -10, 0> rotate <0, 0, loop> rotate <15,-115,0> } #local loop = loop + 20; #end // leg connector object { RoundCylinder(3.75, .5, 4) rotate <0,0,90> translate <0, -11, 0> } difference { sphere { <0,0,0>,10 } cylinder { <-1000, -11, 0>, <-1, -11, 0>, 3.5 } cylinder { <1, -11, 0>, <1000, -11, 0>, 3.5 } //sphere { <0,0,0>,9.8 } box { <-100,-6,-100>,<100,100,100> } texture { BodyTexture } } #local loop = 0; #while (loop < 360) object { RoundBox(2, 2, .5, .125) translate <0, 0, -9.85> rotate <-45,0,0> rotate <0, loop, 0> } #local loop = loop + 36; #end } #declare Body = union { //sphere { <0,0,0>, 9.6 texture { Glass3 } } difference { union { sphere { <0,0,0>,9.7 } sphere { <8,3,-3>,2.5 } sphere { <8,3,3>,2.5 } } sphere { <0,0,0>,9.4 } sphere { <8,3,-3>,2.4 } sphere { <8,3,3>,2.4 } // cut the top off the head //box { <-100, 7, -100>, <100, 100, 100> } // cut off the bottom of the body box { <-100, -100, -100>, <100, -6.5, 100> } rotate <0,90,0> } // hair /* #declare R1 = seed(0); #local cnt = 0; #while (cnt < 50) #local rad = 8; #local srad = .25; union { #local loop = -3.14/2; #local step = .2; #while (loop < 3.14/2) #local sx = rad * cos(loop); #local sy = rad * sin(loop); #local sx2 = rad * cos(loop + step); #local sy2 = rad * sin(loop + step); sphere { <0, sx2, sy2>, srad } cylinder { <0, sx, sy>, <0, sx2, sy2>, srad } #local loop = loop + step; #end translate <0, 9.7, rad> rotate <0, 0, rand(R1)*-35 + rand(R1) * 35> rotate } #local cnt = cnt + 1; #end */ /* #declare R1 = seed(0); #local cnt = 0; #while (cnt < 150) #local rad = 7; #local srad = .25; #local sx = rand(R1) * -rad + rand(R1) * rad; #local sy = rand(R1) * 3 + 7; #local sz = rand(R1) * -rad + rand(R1) * rad; #local r = rand(R1) * 1; cylinder { , , r } sphere { , r } #local cnt = cnt + 1; #end */ // the mouth difference { union { // main mouth cylinder cylinder { <0,-2.5,0>, <0,-2.5,-10>, 3 } //rotate <0,-90,0> } // redo, so we don't have to rotate! union { torus { 2.5,.5 rotate <90,0,0> translate <0,-2.5,-10> } cylinder { <0,-2.5,0>, <0,-2.5,-10.5>, 2.5 } box { <-3,-2.5,0>,<3,-5.5,-10> } cylinder { <-2.5,-2.5,-10>,<-2.5,-5.5,-10>, .5 } cylinder { <2.5,-2.5,-10>,<2.5,-5.5,-10>, .5 } box { <-2.5,-2.5,0>,<2.5,-5.5,-10.5> } //rotate <0,-90,0> } //rotate <0,-90,0> } cylinder { <0,-2.5,0>,<0,-2.5,-100>, 2.25 } box { <-2.25, -2.5, 0>, <2.25, -5, -100> } } // mouth vent blades intersection { union { #local ystart = -5.5; #while (ystart < 0) box { <-3, -.05, 0>, <3, .05, 2> rotate <-45, 0, 0> translate <0,ystart,-10> } #local ystart = ystart + .25; #end } union { cylinder { <0,-2.5,0>,<0,-2.5,-100>, 2.25 } box { <-2.25, -2.5, 0>, <2.25, -5, -100> } } } // the vents object { Vent translate <0,0,-10> rotate <-15,65,0> } object { Vent translate <0,0,-10> rotate <-15,115,0> } object { Vent translate <0,0,-10> rotate <-15,-65,0> } object { Vent translate <0,0,-10> rotate <-15,-115,0> } object { Vent translate <0,0,-10> rotate <15,65,0> } object { Vent translate <0,0,-10> rotate <15,115,0> } object { Vent translate <0,0,-10> rotate <15,-65,0> } object { Vent translate <0,0,-10> rotate <15,-115,0> } } #macro Finger(j1_rot, j2_rot) union { // joint 1 torus { 2.75, .25 rotate <0,0,90> translate <-2,0,0> } torus { 2.75, .25 rotate <0,0,90> translate <2,0,0> } cylinder { <-2,0,0>,<2,0,0>, 3 } object { Bolt scale 2 rotate <0,0,90> translate <-2.25,0,0> } object { Bolt scale 2 rotate <0,0,-90> translate <2.25,0,0> } // long 1 cylinder { <0,0,0>,<0,-7,0>, 2 } union { // joint 2 torus { 2, .25 rotate <0,0,90> translate <-2,0,0> } torus { 2, .25 rotate <0,0,90> translate <2,0,0> } cylinder { <-2,0,0>,<2,0,0>,2.1 } object { Bolt scale 1.25 rotate <0,0,90> translate <-2.25,0,0> } object { Bolt scale 1.25 rotate <0,0,-90> translate <2.25,0,0> } // long 2 cylinder { <0,0,0>,<0,-7,0>,2 } union { // joint 3 torus { 2, .25 rotate <0,0,90> translate <-2,0,0> } torus { 2, .25 rotate <0,0,90> translate <2,0,0> } cylinder { <-2,0,0>,<2,0,0>,2.1 } object { Bolt scale 1.25 rotate <0,0,90> translate <-2.25,0,0> } object { Bolt scale 1.25 rotate <0,0,-90> translate <2.25,0,0> } // long 3 cylinder { <0,0,0>,<0,-5,0>,2 } // finger tip sphere { <0, -5, 0>, 2 } rotate translate <0,-7,0> } rotate translate <0,-7,0> } // rotate whole finger rotate } #end #declare R1 = seed(0); #macro Hand() union { object { Finger(rand(R1)*-60,rand(R1)*-60) translate <-8,0,0> } object { Finger(rand(R1)*-60,rand(R1)*-60) translate <-2.5,0,0> } object { Finger(rand(R1)*-60,rand(R1)*-60) translate <2.5,0,0> } object { Finger(rand(R1)*-60,rand(R1)*-60) translate <8,0,0> } box { <-10,0,-1.75>,<10,7,1.75> } difference { union { cylinder { <0,7,-1.75>,<0,7,1.75>, 10 } cylinder { <0,7,-2.75>,<0,7,2.75>, 9 } torus { 9, 1 rotate <90,0,0> translate <0,7,-1.75> } torus { 9, 1 rotate <90,0,0> translate <0,7, 1.75> } } box { <-100,-100,-100>,<100,7,100> } //pigment { color Red } } cylinder { <-9, 7, -1.75>,<-9, 0, -1.75>, 1 } cylinder { <9, 7, -1.75>,<9, 0, -1.75>, 1 } box { <-9, 7, 0>, <9, 0, -2.75> } cylinder { <-9, 7, 1.75>,<-9, 0, 1.75>, 1 } cylinder { <9, 7, 1.75>,<9, 0, 1.75>, 1 } box { <-9, 7, 0>, <9, 0, 2.75> } // wrist joint sphere { <0,17,0>,5 } } #end #macro Arm(hand_rot_fwd, hand_rot, sholder_rot_forward, sholder_rot_side, elbow_rot_fwd, elbow_rot_side) union { // main connector to body object { #local d1 = 4; #local d2 = 6; #local d3 = 10; #local d4 = 2; #local d5 = 9; #local s1 = 0; #local s2 = .5; #local s3 = 1.5; #local s4 = 2; #local s5 = 1.5; #local s6 = 4; #local r1 = 1; #local r2 = .25; // .25 MultiJoint(d1,d2,d3,d4,d5,s1,s2,s3,s4,s5,s6,r1,r2,3) scale .5 } object { Bolt rotate <-90,0,0> scale .75 translate <0,0,-2> } object { Bolt rotate <90,0,0> scale .75 translate <0,0,2> } // cylinder that runs through the joint cylinder { <0,0,-2>,<0,0,2>, .75 } union { // joint connector cylinder { <0,0,-1>, <0,0,1>, 1 } // upper arm cylinder { <0,0,0>,<0,-8,0>, 1 } // arm band object { RoundCylinderWidthBars(1.75, .25, .125, 3.5) translate <0, -4.25, 0> texture { BodyTexture } } union { // elbow object { BoltTube(1.25, .125, 1, .125, 2.5) rotate <0, 0, 90> } // fore arm cylinder { <0,0,0>,<0,-5,0>,1 } // wrist band object { RoundCylinderWidthBars(1.5, .25, .125, 2.5) translate <0, -3, 0> texture { BodyTexture } } // the hand object { Hand() scale .25 translate <0,-2,0> // hand rotation rotate <0,90,0> rotate rotate <0,hand_rot,0> translate <0,-8,0> } // elbow rotation rotate rotate <0, elbow_rot_side, 0> translate <0,-8,0> } // sholder rotation, side-side rotate <0,0,sholder_rot_side> } // forward back rotate translate <-2,0,0> } #end #macro Foot() union { difference { union { sphere { <0,0,0>,4 } cylinder { <0,0,-2>,<0,0,0>,4 } sphere { <0,0,-2>,4 } } box { <-100,-100,-100>,<100,0,100> } cylinder { <-100,4,0>,<100,4,0>, 2 } translate <0,.25,0> texture { BodyTexture } } union { torus { 3.75, .25 translate <0,.25,0> } torus { 3.75, .25 translate <0,.25,-2> } cylinder { <-3.75,.25,0>, <-3.75,.25,-2>, .25 } cylinder { <3.75,.25,0>, <3.75,.25,-2>, .25 } texture { BodyTexture } } // pad of shoe/foot torus { 3.75, .25 translate <0,-.25,0> } torus { 3.75, .25 translate <0,-.25,-2> } cylinder { <0,-.25,0>,<0,-.75,0>, 4 } box { <-4,-.75,-2>,<4,-.25,0> } cylinder { <0,-.25,-2>,<0,-.75,-2>,4 } torus { 3.75, .25 translate <0,-.75,0> } torus { 3.75, .25 translate <0,-.75,-2> } cylinder { <-3.75,-.25,0>, <-3.75,-.25,-2>, .25 } cylinder { <-3.75,-.75,0>, <-3.75,-.75,-2>, .25 } cylinder { <3.75,-.25,0>, <3.75,-.25,-2>, .25 } cylinder { <3.75,-.75,0>, <3.75,-.75,-2>, .25 } translate <0, -4, 0> } #end #macro Leg(isLeft) union { #local theigh_len = 7; #local caf_len = 5; // main connector to body object { #local d1 = 4; #local d2 = 6; #local d3 = 10; #local d4 = 2; #local d5 = 9; #local s1 = 0; #local s2 = .5; #local s3 = 2; #local s4 = 2; #local s5 = 1.5; #local s6 = 4; #local r1 = 1; #local r2 = .25; // .25 MultiJoint(d1,d2,d3,d4,d5,s1,s2,s3,s4,s5,s6,r1,r2,4) scale .6 //.5 #if (isLeft = false) rotate <0,0,180> #end } union { // bolt object { Bolt scale .75 rotate <-90,0,0> translate <0, 0, -2> } // theigh object { RoundCylinder(1.25, .25, 2) rotate <90,0,0> } cylinder { <0,0,0>,<0,-theigh_len,0>, 1 } // theigh pad object { RoundCylinderWidthBars(1.5, .25, .125, 2.75) translate <0, -3.75, 0> texture { BodyTexture } } // nee union { object { BoltTube(1.25, .25, 1, .1, 2.75) rotate <0, 0, 90> } // caf cylinder { <0,0,0>,<0,-caf_len,0>, 1 } // ankle object { BoltTube(1.75, .25, 1.25, .1, 2.75) rotate <0, 0, 90> translate <0, -caf_len, 0> } object { Foot() // rotate the foot, fwd-back rotate <-2, 0, 0> translate <0,-caf_len,0> } // rotate at the nee, fwd-back rotate <-2, 0, 0> translate <0, -theigh_len, 0> } // rotate whole jeg, side-side #if (!isLeft) rotate <0, 0, 2> #else rotate <0, 0, -2> #end } // rotate whole leg, fwd-back rotate <2, 0, 0> } #end #macro Robot(positionArray) union { object { Body } object { BodyCover texture { BodyTexture } } // left leg object { Leg(true) translate <-7,-11,0> } // right leg object { Leg(false) translate<7,-11,0> } // Left Arm object { #local hand_rot_fwd = positionArray[0]; #local hand_rot = positionArray[1]; #local sholder_rot_fwd = positionArray[2]; #local sholder_rot_side = positionArray[3]; #local elbow_rot_fwd = positionArray[4]; #local elbow_rot_side = positionArray[5]; // rand(R1)*45,rand(R1)*-90,rand(R1)*-90 Arm(hand_rot_fwd, hand_rot, sholder_rot_fwd, sholder_rot_side, elbow_rot_fwd, elbow_rot_side) rotate <0,180,0> translate <11,0,0> } // Right Arm object { #local hand_rot_fwd = positionArray[6]; #local hand_rot = positionArray[7]; #local sholder_rot_fwd = positionArray[8]; #local sholder_rot_side = positionArray[9]; #local elbow_rot_fwd = positionArray[10]; #local elbow_rot_side = positionArray[11]; // rand(R1)*-45,rand(R1)*90,rand(R1)*90 Arm(hand_rot_fwd, hand_rot, sholder_rot_fwd, sholder_rot_side, elbow_rot_fwd, elbow_rot_side) translate <-11,0,0> } translate <0,26,0> rotate <0,-33,0> texture { RobotMetalTexture } //texture { t_metal } } #end