// Original Author: Miguel Garcia Diaz, #ifndef(Seed) #declare Seed = seed(0); #end //------------------------------------------------------------ //Macros------------------------------------------------------ //------------------------------------------------------------ #macro My_Plane(p1, p2, p3) #local v1 = p3 - p1; #local v2 = p2 - p1; #local cx = v1.y*v2.z - v1.z * v2.y; #local cy = v2.x*v1.z - v2.z * v1.x; #local cz = v1.x*v2.y - v1.y * v2.x; #local tind = p1.x * cx + p1.y * cy + p1.z * cz; plane{ , tind / sqrt(cx*cx + cy*cy + cz*cz) } #end #macro My_Cube(r1, r2, r3, r4, r5, r6, r7, r8) intersection{ My_Plane(r4, r1, r8) My_Plane(r7, r6, r3) My_Plane(r8, r5, r7) My_Plane(r3, r2, r4) My_Plane(r8, r7, r4) My_Plane(r2, r6, r1) } #end #macro Module(p) sqrt(p.x*p.x + p.y*p.y + p.z*p.z) #end #macro Acel(vx, v0, v1) (-2+v0+v1)*vx*vx*vx + (3-2*v0-v1) * vx * vx + v0*vx #end #macro Trans(vt, t0, t1) (vt-t0)/(t1-t0) #end /* #macro TransAcel(vx, t0, t1, v0, v1) Acel(Trans(vx, t0, t1), v0, v1) #end */ #macro B0(vx) (1-vx)*(1-vx)*(1-vx) #end #macro B1(vx) 3*vx*(1-vx)*(1-vx) #end #macro B2(vx) 3*vx*vx*(1-vx) #end #macro B3(vx) vx*vx*vx #end #macro BezierFunction(vx, p0, p1, p2, p3) p0*B0(vx) + p1*B1(vx) + p2*B2(vx) + p3*B3(vx) #end #macro Bezier(vx, p0, p1, p2, p3, ti, tf, vi, vf) #if (vi>0) #local vB0 = (tf-ti)*(vi/(3*Module(p1-p0))); #else #local vB0 = 0; #end #if (vf>0) #local vB1 = (tf-ti)*(vf/(3*Module(p3-p2))); #else #local vB1 = 0; #end #local Aux = Trans(vx,ti,tf); BezierFunction(Acel(Aux, vB0, vB1), p0, p1, p2, p3) #end #macro BezierAux(vx, p0, p1, p2, p3, ti, tf, vi, vf, inc1, inc2) #if (vi>0) #local vB0 = (tf-ti)*(vi/(3*Module(p1-p0))); #else #local vB0 = 0; #end #if (vf>0) #local vB1 = (tf-ti)*(vf/(3*Module(p3-p2))); #else #local vB1 = 0; #end #local Aux = Trans(vx,ti,tf); #local Min = 0.0001*(0.5-inc1); #local Max = 1+0.0001*(inc2-0.5); #local Factor = 1; #local b = Bezier(vx, p0, p1, p2, p3, ti, tf, vi, vf); #if (Aux < Min | Aux > Max) #local Factor = 0; #end #end #macro ncopies(ob, n) union{ #declare ang = 360 / n; #declare cont = 0; #while (cont < n) object{ob rotate cont * ang * y } #declare cont = cont + 1; #end } #end // ************************************************************** // ************************************************************** // ** ** // ** Definition of Pieces ** // ** ** // ************************************************************** // ************************************************************** // ************************************************************** // ** The Rook ** // ************************************************************** #declare rook = object{ // **** Local Definitions **** #local narrow=444; #local narrow2=434; #local rook1=merge{ lathe{ linear_spline 2, <434-narrow2, 595> <626-narrow2,595> } lathe{ bezier_spline 8, <626-narrow2,595> <619-narrow2,529> <627-narrow2,548> <607-narrow2,542> <607-narrow2,542> <641-narrow2,474> <587-narrow2,527> <564-narrow2,446> } lathe{ linear_spline 4, <564-narrow2,446> <558-narrow2,443> <537-narrow,263> <543-narrow,258> } lathe{ bezier_spline 8, <543-narrow,258> <550-narrow,221> <603-narrow,218> <573-narrow,207> <573-narrow,207> <582-narrow,208> <580-narrow,202> <583-narrow,192> } lathe{ linear_spline 7, <583-narrow,192> <583-narrow,133> <533-narrow,133> <533-narrow,178> <514-narrow,178> <514-narrow,166> <444-narrow,166> } }; #local dientes = union{ #local diente=object{ box {<0,0, -12>, <200, 200, 12>} rotate -145*z translate <583-narrow, 185, 0> }; object{diente} object{diente rotate 60*y } object{diente rotate 120*y } object{diente rotate 180*y } object{diente rotate 240*y } object{diente rotate 300*y } }; // **** Components **** difference{ object{rook1} object{dientes} translate -595*y rotate 180*x scale 0.95/(595-133) scale 0.8*(x+z) } }; // ************************************************************** // ** The Bishop ** // ************************************************************** #declare bishop = object{ // **** Local Definitions **** #local narrow0=424; #local bishop1=merge{ lathe { linear_spline 2, <424-narrow0, 595> <616-narrow0,595> } lathe { bezier_spline 24, <616-narrow0,595> <609-narrow0,529> <617-narrow0,548> <597-narrow0,542> <597-narrow0,542> <631-narrow0,474> <548-narrow0,520> <534-narrow0,431> <480-narrow0,273> <480-narrow0,346> <488-narrow0,420> <534-narrow0,431> <480-narrow0,273> <556-narrow0,273> <546-narrow0,251> <512-narrow0,252> <512-narrow0,252> <529-narrow0,245> <518-narrow0,231> <502-narrow0,230> <502-narrow0,230> <508-narrow0,224> <511-narrow0,208> <487-narrow0,208> } }; #local dienteB=object{ box {<-0.5,0, -0.01>, <0.5, 0.2, 0.01>} rotate 45*x translate <0, 0.965, 0.05> }; // **** Components **** merge{ object{bishop1 translate -595*y rotate 180*x scale 0.95/(595-133) scale 0.8*(x+z) } difference{ sphere{ <0, 0.92, 0>, 0.16 } object{dienteB} } sphere{ <0, 1.12, 0>, 0.08 } } }; // ************************************************************** // ** The Queen ** // ************************************************************** #declare queen = object{ // **** Local Definitions **** #local narrow0=424; #local queen1=merge{ lathe { linear_spline 2, <424-narrow0, 595> <616-narrow0,595> } lathe { bezier_spline 40, <616-narrow0,595> <609-narrow0,529> <617-narrow0,548> <597-narrow0,542> <597-narrow0,542> <631-narrow0,474> <548-narrow0,520> <534-narrow0,431> <480-narrow0,208> <480-narrow0,346> <488-narrow0,420> <534-narrow0,431> <480-narrow0,208> <556-narrow0,208> <546-narrow0,186> <512-narrow0,187> <512-narrow0,187> <529-narrow0,180> <518-narrow0,166> <502-narrow0,165> <502-narrow0,165> <508-narrow0,159> <511-narrow0,143> <484-narrow0,143> <484-narrow0,143> <484-narrow0,86> <509-narrow0,80> <529-narrow0,65> <529-narrow0,65> <522-narrow0,37> <523-narrow0,34> <496-narrow0,17> <496-narrow0,17> <489-narrow0,34> <488-narrow0,32> <473-narrow0,38> <473-narrow0,38> <455-narrow0,26> <455-narrow0,29> <424-narrow0,29> } }; #local dienteQ=object{ cylinder {<0, 1.5, 0 >, <1, 0.4, 0>, 0.1} translate -0.054*y }; // **** Components **** difference{ object{queen1 translate -595*y rotate 180*x scale 0.95/(595-133) scale 0.8*(x+z) } object{dienteQ rotate 45*y } object{dienteQ rotate 135*y } object{dienteQ rotate 225*y } object{dienteQ rotate 315*y } } }; // ************************************************************** // ** The King ** // ************************************************************** #declare king = object{ // **** Local Definitions **** #local narrow0 = 424; #local hei = 15; #local king1=merge{ lathe { linear_spline 2, <424-narrow0,595> <616-narrow0,595> } lathe { bezier_spline 28, <616-narrow0,595> <609-narrow0,529> <617-narrow0,548> <597-narrow0,542> <597-narrow0,542> <631-narrow0,474> <548-narrow0,520> <534-narrow0,431> <480-narrow0,208> <480-narrow0,346> <488-narrow0,420> <534-narrow0,431> <480-narrow0,208> <556-narrow0,208> <546-narrow0,186> <512-narrow0,187> <512-narrow0,187> <529-narrow0,180> <518-narrow0,166> <502-narrow0,165> <502-narrow0,165> <508-narrow0,159> <511-narrow0,143> <484-narrow0,143> <484-narrow0,143> <483-narrow0,76> <617-narrow0,41-hei> <473-narrow0,41-hei> } lathe { linear_spline 3, <473-narrow0,41-hei> <473-narrow0,33-hei> <424-narrow0,33-hei> } }; #local dienteK=object{ prism { bezier_spline 0, 30, 32, <175,212> <141,169> <157,167> <232,167> <232,167> <307,167> <323,169> <289,212> <289,212> <307,217> <302,223> <302,238> <302,238> <302,254> <307,259> <289,264> <289,264> <323,307> <307,309> <232,309> <232,309> <157,309> <141,307> <175,264> <175,264> <157,259> <162,254> <162,238> <162,238> <162,223> <157,217> <175,212> } translate <-232, -15, -238> scale <0.80, 1.1, 1.1> rotate 90*x scale 0.0012 scale 1.2 }; // **** Components **** merge{ object{ king1 translate -595*y rotate 180*x scale 0.95/(595-133) scale 0.8*(x+z) } object{dienteK translate 1.29*y } } }; // ************************************************************** // ** The Pawn ** // ************************************************************** #declare pawn = object{ // **** Local Definitions **** #local narrow4 = 480; #local pawn1=merge{ lathe { linear_spline 2, <480-narrow4,575> <639-narrow4,575> } lathe { bezier_spline 8, <639-narrow4,575> <638-narrow4,531> <642-narrow4,536> <629-narrow4,534> <629-narrow4,534> <672-narrow4,489> <574-narrow4,513> <555-narrow4,435> } lathe { linear_spline 3, <555-narrow4,435> <544-narrow4,435> <533-narrow4,334> } lathe { bezier_spline 4, <533-narrow4,334> <592-narrow4,328> <599-narrow4,313> <532-narrow4,305> } }; // **** Components **** merge{ object{pawn1 translate -575*y rotate 180*x scale 0.95/(595-133) scale 0.8*(x+z) } sphere{ <0, 0.68, 0>,0.15 } } }; // ************************************************************** // ** The Knight ** // ************************************************************** #declare knight = object{ // **** Local Definitions **** #local knighteye=merge{ #declare rat =150; lathe { bezier_spline 20, <0,280> <27,280> <44,280> <80,280> <80,280> <94,280> <102,246> <100,220> <100,220> <100,205> <137,205> <180,205> <180,205> <195,205> <220,209> <220,280> <220,280> <232,178> <393,175> <565-rat,175> } translate -175*y scale 1.5*y scale 0.0005 }; #local knight1=object{ // Knight without eyes, and not yet scaled. // ** Local Local definitions ** #local knighttorso=merge{ // Pequeña placa lateral: object{ bicubic_patch { type 0 flatness 0 u_steps 4 v_steps 4 <486-narrow0,305, 114> <529-narrow0,302, 80> <544-narrow0,299, 60> <572-narrow0,321, 30> <478-narrow0,321, 116> <525-narrow0,320, 90> <537-narrow0,340, 60> <576-narrow0,334, 31> <472-narrow0,337, 118> <525-narrow0,340, 90> <537-narrow0,340, 60> <579-narrow0,342, 32> <485-narrow0,364, 120> <525-narrow0,364, 90> <537-narrow0,364,60 > <577-narrow0,364, 33> } } // Pequeña placa frontal: object{ bicubic_patch { type 0 flatness 0 u_steps 4 v_steps 4 <572-narrow0,321, 30> <575-narrow0,316, 20><580-narrow0,316, 10><580-narrow0,316, 0> <576-narrow0,334, 31> <581-narrow0,334, 20><585-narrow0,330, 10><585-narrow0,330, 0> <579-narrow0,342, 32> <585-narrow0,342, 20><585-narrow0,340, 10><585-narrow0,340, 0> <577-narrow0,364, 33> <580-narrow0,364, 20><580-narrow0,364, 10><580-narrow0,364, 0> } } // Pequeña placa triangular frontal : object{ bicubic_patch { type 0 flatness 0 u_steps 4 v_steps 4 <535-narrow0,276, 0> <538-narrow0,290, -20> <548-narrow0,304, -25> <572-narrow0,321, -30> <538-narrow0,290, 20> <538-narrow0,290, 10> <541-narrow0,294, 5> <575-narrow0,316,-20> <548-narrow0,304, 25> <548-narrow0,304, 15> <551-narrow0,304, 5> <580-narrow0,316, -10> <572-narrow0,321, 30> <575-narrow0,316, 20> <580-narrow0,316, 10> <580-narrow0,316, 0> } } // Gran placa frotal-lateral: object{ #local desp=<0,0,0>; bicubic_patch { type 0 flatness 0 u_steps 4 v_steps 4 <329-narrow0,130, 75> <390-narrow0,150, 45> <488-narrow0,208, 20> <535-narrow0,276, 0> <425-narrow0,200, 80> <450-narrow0, 237, 63>+desp <450-narrow0, 237, 63>+desp <538-narrow0,290, 20> <436-narrow0,209, 92> <450-narrow0, 237, 63>+desp<450-narrow0, 237, 63>+desp<548-narrow0,304, 25> <486-narrow0,305, 114> <529-narrow0,302, 80> <544-narrow0,299, 60> <572-narrow0,321, 30> } } // Triángulo frontal. /* Es triangular, y me ha costado mucho eliminar las anormalidades que se producen. Al final no ha quedado mal. OBS: La placa no encaja exactamente, sino que se mete DENTRO del caballo, en el cuello. Así, en realidad no es triangular, sino que tiene 4 lados. */ object{ #local rap=0.6; #local rap2=1-rap; #local q2a = <329-narrow0,130, 75>; #local q2b = <390-narrow0,150, 45>; #local q2c = <488-narrow0,208, 20>; #local q2d = <535-narrow0,276, 0>; #local q4a = <1, 1, -1> * q2a; #local q4b = <1, 1, -1> * q2b; #local q4c = <1, 1, -1> * q2c; #local q4d = q2d; #local q1a = q2a; #local q1d = <1,1,0>*q1a + 0.3*(<1,1,0>*q1a - q2d); #local q1b = q1a * 0.6 + q1d * 0.3; #local q1c = q1a * 0.3 + q1d * 0.6; #local q3a = q1a; #local q3b = <1, 1, -1> * q1b; #local q3c = <1, 1, -1> * q1c; #local q3d = <1, 1, -1> * q1d; #local rat=0.999; #local rat2=1-rat; bicubic_patch { type 0 flatness 0 u_steps 4 v_steps 4 q1a q1b q1c q1d q2b rat*q2b + rat2 * q3c rat*q3c + rat2 * q2b q3c q2c rat*q2c + rat2 * q3b rat*q3b + rat2 * q2c q3b q2d q4c q4b q3a } } // bajo object{ #local desp=<0,0,0>; bicubic_patch { type 0 flatness 0 u_steps 4 v_steps 4 <265-narrow0,364,0> <327-narrow0,364,106> <416-narrow0,364,106> <485-narrow0,364,120> <460-narrow0,364, 0> <400-narrow0, 363, 30><400-narrow0, 363, 30> <525-narrow0,364, 90> <530-narrow0,364, 0> <400-narrow0, 363, 30><400-narrow0, 363, 30> <537-narrow0,364,60 > <580-narrow0,364, 0> <580-narrow0,364, 10> <580-narrow0,364, 20> <577-narrow0,364, 33> } } // Main side merge{ #local p0=<329-narrow0,130, 75>; #local p1=<310-narrow0, 200, 75>; #local p2=<290-narrow0, 330, 50>; #local p3=<265-narrow0,364,0>; #local v0=<96,70, 5>; #local v1=<60, -20, 10>; #local v2=<60, -20, 10>; #local v3=<62,0,106>; #local q0=<200-narrow0, 37, 9>; #local q1=<250-narrow0,90, 60>; #local q2=p0-v0; #local q3=p0; #local w1=<20,230, -10>; #local w2=p1-0.1*v1 - q2; #local p3aux=<475-narrow0,47,50>; #local p5aux=<565-narrow0,47+(9/57)*90,8>; #local p1a=<418-narrow0,38,-18>; #local p1b=<418-narrow0,38,-9>; #local p1c=<1, 1, -1> * p1b; #local p1d=<1, 1, -1> * p1a; #local p3a=<1,1,-1>*p3aux; #local p3b=<1,1,-0.8>*p3aux; #local p3c=<1,1,0.8>*p3aux; #local p3d=<1,1,1>*p3aux; #local p2a = p1d; #local p2b = <430-narrow0,38+12*(9/57),18>; #local p2c = <433-narrow0,38+15*(9/57), 34>; #local p2d = p3d; #local p5a=<1,1,-1>*p5aux; #local p5b=<1,1,-0.8>*p5aux; #local p5c=<1,1,0.8>*p5aux; #local p5d=<1,1,1>*p5aux; #local p8a=<200-narrow0, 37, 9>; #local p8b= <240-narrow0,37,120>; #local p8c= <270-narrow0,37,-5>; #local p8d= p1d; #local p9a= q3; #local p9b= <380-narrow0, 122, 70.5>; #local p9c=<464-narrow0, 55, 34.5>; #local p9d=p2d; #local p4a=p3d; #local p4b=0.9*p3d+0.1*p5d; #local p4c=0.1*p3d+0.9*p5a; #local p4d=p5d; #local p10a=p4d; #local p10b=p4d+20*y; #local p10c=p4d+35*y; #local p10d=p4d+55*y; #local p7a=p4a; #local p7d=p7a+80*y; #local p7b=0.9*p7a+0.1*p7d; #local p7c=0.1*p7a+0.9*p7d; #local p11a=p7d; #local p11d=p10d; #local p11b=0.9*p11a+0.1*p11d; #local p11c=0.1*p11a+0.9*p11d; #local p12a = p9a; #local p12d = <369.336-narrow0, 146.336, 57.6>; #local p12b=0.9*p12a+0.1*p12d; #local p12c=0.1*p12a+0.9*p12d; #local p13a = p12d; #local p13d = p7d; #local p13b=0.9*p13a+0.1*p13d- 40*y; #local p13c=0.9*p13a+0.1*p13d - 40*y; #declare inc=20; // bottom object{ #local desp=<0,0,0>; bicubic_patch { type 0 flatness 0 u_steps 4 v_steps 4 p0 p0+v0 <436-narrow0,209, 92> <486-narrow0,305, 114> p1 p1+v1 <370-narrow0, 200, 75> <478-narrow0,321, 116> p2 p2+v2 <416-narrow0, 330, 106> <472-narrow0,337, 118> p3 p3+v3 <416-narrow0,364,106> <485-narrow0,364,120> } } // top object{ bicubic_patch { type 0 flatness 0 u_steps 4 v_steps 4 q0 q1 q2 q3 <197-narrow0, 65, 4> q1+w1 q2+w2 p1 <194-narrow0, 82, 0> <270-narrow0, 110,35> p2-0.1*v2 p2 <195-narrow0,113,0> <234-narrow0,163,0> <297-narrow0,187,0> p3 } } // cara1 object{ bicubic_patch { type 0 flatness 0 u_steps 4 v_steps 4 p8a p8b p8c p8d q1 q1-0.3*w1 <399-narrow0, 80, 40> p2b q2 q2-0.3*w2 <399-narrow0, 80, 40> p2c p9a p9b p9c p9d } } // cara5 object{ bicubic_patch { type 0 flatness 0 u_steps 4 v_steps 4 <1, 1, -1>*p8a <1, 1, -1>*p8b <1, 1, -1>*p8c <1, 1, -1>*p8d <200-narrow0, 37, -4.5> <329-narrow0, 39, 0><329-narrow0, 37, 0> p1b <200-narrow0, 37, 4.5> <329-narrow0, 39, 0><329-narrow0, 37, 0> p1c p8a p8b p8c p8d } } // cara4 object{ bicubic_patch { type 0 flatness 0 u_steps 4 v_steps 4 p1a <1, 1, -1> * p2b <1, 1, -1> * p2c p3a p1b <440-narrow0,38+22*(9/57),-5> <450-narrow0,38+32*(9/57),-5> p3b p1c <440-narrow0,38+22*(9/57),5> <450-narrow0,38+32*(9/57),5> p3c p1d p2b p2c p2d } } // cara 2 object{ bicubic_patch { type 0 flatness 0 u_steps 4 v_steps 4 p9a p9b p9c p9d p12b 0.8*p9a + 0.2*p7d 0.8*p9d + 0.2*p12d p7b p12c 0.8*p12d + 0.2*p9d 0.8*p7d+ 0.2*p9a p7c p12d p13b p13c p7d } } // papada object{ bicubic_patch { type 0 flatness 0 u_steps 4 v_steps 4 p13a p13a*<1, 1, 0.66> p13a*<1, 1, 0.33> p13a*<1, 1, 0>, p13b p13b*<1, 1, 0.66> p13b*<1, 1, 0.33> p13b*<1, 1, 0> p13c p13c*<1, 1, 0.66> p13c*<1, 1, 0.33> p13c*<1, 1, 0> p13d p13d*<1, 1, 0.66> p13d*<1, 1, 0.33> p13d*<1, 1, 0> } } // Triangulito tras las orejas. object{ #local desp=<0,0,0>; bicubic_patch { type 0 flatness 0 u_steps 4 v_steps 4 <200-narrow0, 37, 0><200-narrow0, 37, 2.5><200-narrow0, 37, 4.5><200-narrow0, 37, 9> <197-narrow0, 65, 0><197-narrow0, 65, 1><197-narrow0, 65, 2><197-narrow0, 65, 4.5> <194-narrow0, 82, 0><194-narrow0, 82, 0><194-narrow0, 82, 0><194-narrow0, 82, 2.5> <195-narrow0,113,0><195-narrow0,113,0><195-narrow0,113,0> <195-narrow0,113,0> } } // oreja merge{ #local ver1 = <210-narrow0, 45, 0>; #local ver2 = <340-narrow0, 45, 0>; #local ver3 = <350-narrow0, 136, 0>; #local ver4 = <200-narrow0, 106, 0>; #local ver5 = <221-narrow0, 35, 100>; polygon{ 3, ver1, ver2, ver5 } polygon{ 3, ver2, ver3, ver5 } polygon{ 3, ver3, ver4, ver5 } polygon{ 3, ver4, ver1, ver5 } } // morro difference{ #local rat = 8; #local perc = 0.8; #local comisura = <1, 1, -1>*(perc*p7d+(1-perc)*p10d)-20*y; // Mandíbula object{ My_Cube( <1, 1, -1>*p7d, <1, 1, -1>*p10d, <1, 1, -1>*p4d, <1, 1, -1>*p4a, <1, 1, 0> * p7d, <1, 1, 0> * p10d, <1, 1, 0> * p4d, <1, 1, 0> * p4a) } // Dentadura sphere{ comisura, rat } cylinder{ comisura, <1, 1, -1>*p10d - 20*y+0.8*x, rat } cylinder{ <1, 1, -1>*p10d - 20*y+0.8*x, <1,1,0.1>*(p10d - 20*y)+0.8*x, rat } // Orificio nasal sphere{ <0,0,0>, 1 scale <30, 8, 8> rotate 25*z rotate 185*y translate <1, 1, -1>*p4d + <-30, 15, 0> } } // cresta merge{ #local ver1 = <200-narrow0, 39, 9>; #local ver2 = <217.5-narrow0, 20, 9>; #local ver3 = <322.5-narrow0, 20, 9>; #local ver4 = <340-narrow0, 39, 9>; #local ver5 = <1,1,0>*ver1; #local ver6 = <1,1,0>*ver2; #local ver7 = <1,1,0>*ver3; #local ver8 = <1,1,0>*ver4; #local verb1 = <217.5-narrow0, 20, 6>; #local verb2 = <235-narrow0, 3, 6>; #local verb3 = <305-narrow0, 3, 6>; #local verb4 = <322.5-narrow0, 20, 6>; #local verb5 = <1,1,0>*verb1; #local verb6 = <1,1,0>*verb2; #local verb7 = <1,1,0>*verb3; #local verb8 = <1,1,0>*verb4; polygon{ 4, ver1, ver2, ver3, ver4 } polygon{ 4, ver1, ver2, ver6, ver5 } polygon{ 4, ver2, ver3, ver7, ver6 } polygon{ 4, ver3, ver4, ver8, ver7 } polygon{ 4, verb1, verb2, verb3, verb4 } polygon{ 4, verb1, verb2, verb6, verb5 } polygon{ 4, verb2, verb3, verb7, verb6 } polygon{ 4, verb3, verb4, verb8, verb7 } } } scale <1, 1, 1.2> }; // ** Local Components ** merge{ lathe { linear_spline 2, <424-narrow0,595> <616-narrow0,595> } lathe { bezier_spline 12, <616-narrow0,595> <609-narrow0,529> <617-narrow0,548> <597-narrow0,542> <597-narrow0,542> <659-narrow0,509> <479-narrow0,473> <550-narrow0,389> <550-narrow0,389> <541-narrow0,382> <539-narrow0,385> <530-narrow0,380> } union{ object{knighttorso} object{ knighttorso scale <1, 1, -1> } translate +17*y } } }; // **** Components **** merge{ object{knight1 translate -595*y rotate 180*x scale 0.95/(595-133) scale 0.8*(x+z) } object{knighteye scale 0.3 rotate -72*x rotate -2*y translate <-0.19,1.02,-0.1205> } object{knighteye scale 0.3 rotate -72*x rotate -2*y translate <-0.19,1.02,-0.1205> scale <1, 1, -1> } rotate -90*y } }; // ********************************************************************** // ** MACROS FOR OBJECTS ** // ********************************************************************** #macro piecesmacro(Nbpieces, Ids, Pos, Pieces1, Pieces2) #local I=0; #while (I10) rotate 0*y #end translate Pos[I] } #local I = I+1; #end #end