// Last edited on 2011-09-13 00:34:07 by stolfilocal // _*_ latin-1 _*_ // Bezier model of human body // Coordinate axes are X = forwards, Y = right, Z = up. #include "bzpatch.inc" // DEFORMED OBJECTS #macro bzbody_bigtoecap(TF,BF,ra,fs,fw,fh,bt) // {TF,BF} = 2x2 control arrays of previous (ankle) 4-patch ring, deformed. // {ra} = lower radius of ankle. // {fs} = actual foot length. // {fw} = actual foot width. // {fw} = actual foot height. // {bt} = upward bend angle of big toe (degrees). // Segment 5 (two 2-caps, toes): #local Tb5 = array[2][2]; #local Tb5[0][0] = bzbody_foot_morph(< +2.90, -0.02, +0.25 >,ra,fs,fw,fh); #local Tb5[0][1] = bzbody_foot_morph(< +2.95, -0.02, +0.25 >,ra,fs,fw,fh); #local Tb5[1][0] = bzbody_foot_morph(< +2.90, -1.00, +0.25 >,ra,fs,fw,fh); #local Tb5[1][1] = bzbody_foot_morph(< +2.95, -1.00, +0.25 >,ra,fs,fw,fh); #local Bb5 = array[2][2]; #local Bb5[0][0] = bzbody_foot_morph(< +2.90, -0.02, 00.00 >,ra,fs,fw,fh); #local Bb5[0][1] = bzbody_foot_morph(< +2.95, -0.02, 00.00 >,ra,fs,fw,fh); #local Bb5[1][0] = bzbody_foot_morph(< +2.90, -1.00, 00.00 >,ra,fs,fw,fh); #local Bb5[1][1] = bzbody_foot_morph(< +2.95, -1.00, 00.00 >,ra,fs,fw,fh); #local rad = 0.01*ra; union{ object{ bztube_ring4(Ta0,Ba0,Tb0,Bb0, Ta1,Ba1,Tb1,Bb1, Ta2,Ba2,Tb2,Bb2, tx_bzA, tx_bzB, rad, tx_orange) } object{ bztube_ring4(Ta1,Ba1,Tb1,Bb1, Ta2,Ba2,Tb2,Bb2, Ta3,Ba3,Tb3,Bb3, tx_bzB, tx_bzA, rad, tx_orange) } object{ bzbody_toes(Ta2,Ba2,Tb2,Bb2,ra,fs,fw,fh,bta,btb) } translate -fh*z } // DEFORMATION MACROS #macro bzbody_bend_ankle(p,x0,z0,z2,th) // Maps {p} through a bending deformation. // The deformation assumes a rod with straight axis at {x=x0} // extending between the planes {z=z0} and {z=z1}. // The deformation bends the axis isometrically // in the {+x} diretion, turning it into an arc of circle // covering an arc of {th} degrees. // Each horizontal plane is mapped isometrically to a plane // perpendicular to the arc. // Points at or above the plane {z=z1} remain fixed. // Points below {z0} follow the plane {z=z0} isometrically.. // The {y} coordinate is not affected. #if ((abs(th) < 0.01) | (p.z >= z1)) #local q = p; #else #local tr = radians(th); // Total bend angle (radians). #local R = (z1 - z0)/tr; // Radius of arc. #local xc = x0 + R; // Coord {x} of arc center. #local rp = p.x - xc; // Radius of bent fiber through {p}. #if (p.z >= z0) #local tp = (z1 - p.z)/R; // Angle of bend for horiz plane through {p} (radians). #local q = < xc - rp*cos(tp), p.y, z1 - rp*sin(tp) >; #else #local tp = tr; #local q0 = < xc - rp*cos(tp), p.y, z1 - rp*sin(tp) >; #local hp = z0 - p.z; #local q1 = < hp*sin(tp), 0, -hp*cos(tp) >; #local q = q0 + q1; #end #end q #end #macro bzbody_bend_toe(p,x0,x1,z0,th) // Maps {p} through a bending deformation. // The deformation assumes a rod with straight axis at {z=z0} // extending between the planes {x=x0} and {x=x1}. // The deformation bends the axis isometrically // in the {+z} direction, turning it into an arc of circle // covering an arc of {th} degrees. // Each vertical {y--z} plane is mapped isometrically to a plane // perpendicular to the arc. // Points with {x < x0} remain fixed. // Points with {x > x1} follow the plane {x=x1} isometrically.. // The {y} coordinate is not affected. #if ((abs(th) < 0.01) | (p.x < x0)) #local q = p; #else #local tr = radians(th); // Total bend angle (radians). #local R = (x1 - x0)/tr; // Radius of arc. #local zc = z0 + R; // Coord {z} of arc center. #local rp = p.z - zc; // Radius of bent fiber through {p}. #if (p.x <= x1) #local tp = (p.x - x0)/R; // Angle of bend for {y--z} plane through {p} (radians). #local q = < x0 + rp*sin(tp), p.y, zc - rp*cos(tp) >; #else #local tp = tr; #local q0 = < x0 + rp*sin(tp), p.y, zc - rp*cos(tp) >; #local hp = p.x - x1; #local q1 = < hp*cos(tp), 0, hp*sin(tp) >; #local q = q0 + q1; #end #end q #end // UNDEFORMED MODEL #macro bzbody_foot_ankle_set_cpoints(Ta,Ba,Tb,Bb) // Sets the 2x2 arrays {Ta,Ba,Tb,Bb} to the // undeformed free control points of the ankle joint (4-patch ring). // Assumes that the ankle spans {x=[-1 _ +1]}, {y=[-1 _ +1]}, {z=[0.7 _ 1.0]} // with the top edge on the plane {z=1}. #local Ta[0][0] = < +0.50, +1.00, +0.90 >; #local Ta[0][1] = < +0.50, +1.00, +0.80 >; #local Ta[1][0] = < +0.90, +0.33, +0.90 >; #local Ta[1][1] = < +0.90, +0.33, +0.80 >; #local Tb[0][0] = < +0.90, -0.33, +0.90 >; #local Tb[0][1] = < +0.90, -0.33, +0.80 >; #local Tb[1][0] = < +0.50, -1.00, +0.90 >; #local Tb[1][1] = < +0.50, -1.00, +0.80 >; #local Ba[0][0] = < -0.50, +1.00, +0.90 >; #local Ba[0][1] = < -0.50, +1.00, +0.80 >; #local Ba[1][0] = < -0.90, +0.33, +0.90 >; #local Ba[1][1] = < -0.90, +0.33, +0.80 >; #local Bb[0][0] = < -0.90, -0.33, +0.90 >; #local Bb[0][1] = < -0.90, -0.33, +0.80 >; #local Bb[1][0] = < -0.50, -1.00, +0.90 >; #local Bb[1][1] = < -0.50, -1.00, +0.80 >; #end #macro bzbody_foot_heel_set_cpoints(Ta,Ba,Tb,Bb) // Sets the 2x2 arrays {Ta,Ba,Tb,Bb} to the // undeformed free control points of the heel (a 4-patch ring). // Assumes that the foot (minus ankle and toes) spans {x=[-1.5 _ +2]}, {y=[-1 _ +1]}, // {z=[0 _ 0.7]} and the foot sole is at {z=0}. #local Ta[0][0] = < +0.50, +1.00, +0.80*0.70 >; #local Ta[0][1] = < +0.70, +1.00, +0.60*0.70 >; #local Ta[1][0] = < +0.90, +0.33, +0.90*0.70 >; #local Ta[1][1] = < +0.95, +0.33, +0.70*0.70 >; #local Tb[0][0] = < +0.90, -0.33, +0.90*0.70 >; #local Tb[0][1] = < +0.95, -0.33, +0.70*0.70 >; #local Tb[1][0] = < +0.50, -1.00, +0.80*0.70 >; #local Tb[1][1] = < +0.70, -1.00, +0.60*0.70 >; #local Ba[0][0] = < -0.50, +1.00, +0.50*0.70 >; #local Ba[0][1] = < -1.20, +1.00, 00.00*0.70 >; #local Ba[1][0] = < -0.90, +0.33, +0.40*0.70 >; #local Ba[1][1] = < -1.70, +0.33, 00.00*0.70 >; #local Bb[0][0] = < -0.90, -0.33, +0.40*0.70 >; #local Bb[0][1] = < -1.70, -0.33, 00.00*0.70 >; #local Bb[1][0] = < -0.50, -1.00, +0.50*0.70 >; #local Bb[1][1] = < -1.20, -1.00, 00.00*0.70 >; #end #macro bzbody_foot_arch_set_cpoints(Ta,Ba,Tb,Bb) // Sets the 2x2 arrays {Ta,Ba,Tb,Bb} to the // undeformed free control points of the foot arch (a 4-patch ring). // Assumes that the foot (minus ankle and toes) spans {x=[-1.5 _ +2]}, {y=[-1 _ +1]}, // {z=[0 _ 0.7]} and the foot sole is at {z=0}. #local Ta[0][0] = < +1.20, +1.00, +0.65*0.70 >; #local Ta[0][1] = < +1.80, +1.00, +0.45*0.70 >; #local Ta[1][0] = < +1.30, +0.33, +0.65*0.70 >; #local Ta[1][1] = < +1.90, +0.33, +0.45*0.70 >; #local Tb[0][0] = < +1.30, -0.33, +0.65*0.70 >; #local Tb[0][1] = < +1.90, -0.33, +0.45*0.70 >; #local Tb[1][0] = < +1.20, -1.00, +0.65*0.70 >; #local Tb[1][1] = < +1.80, -1.00, +0.45*0.70 >; #local Ba[0][0] = < +1.10, +1.00, 00.00*0.70 >; #local Ba[0][1] = < +1.60, +1.00, 00.00*0.70 >; #local Ba[1][0] = < +1.40, +0.33, 00.00*0.70 >; #local Ba[1][1] = < +1.80, +0.33, 00.00*0.70 >; #local Bb[0][0] = < +1.40, -0.33, 00.00*0.70 >; #local Bb[0][1] = < +1.80, -0.33, 00.00*0.70 >; #local Bb[1][0] = < +1.10, -1.00, 00.00*0.70 >; #local Bb[1][1] = < +1.60, -1.00, 00.00*0.70 >; #end #macro bzbody_foot_fork_set_cpoints(Ta3,Ba3,Tb3,Bb3, Ta4,Ba4,Tb4,Bb4) // Sets the 2x2 arrays of undeformed free control points of the foot-to-toes // joints. // {Ta3,Ba3,Tb3,Bb3} = 2x2 control arrays of toe 4-patch pre-fork. // {Ta4,Ba4,Tb4,Bb4} = 2x2 control arrays of toe 4-patch pos-fork. // Assumes that the fork and toes span {x=[+2 _ +3]}, {y=[-1 _ +1]}, // {z=[0 _ 0.7]} and the foot sole is at {z=0}. // Segment 3 (pre-fork, toe joints): #local Ta3[0][0] = < +2.15, +1.00, +0.35*0.70 >; #local Ta3[0][1] = < +2.35, +1.00, +0.35*0.70 >; #local Ta3[1][0] = < +2.15, +0.33, +0.35*0.70 >; #local Ta3[1][1] = < +2.35, +0.33, +0.35*0.70 >; #local Tb3[0][0] = < +2.15, -0.33, +0.35*0.70 >; #local Tb3[0][1] = < +2.35, -0.33, +0.35*0.70 >; #local Tb3[1][0] = < +2.15, -1.00, +0.35*0.70 >; #local Tb3[1][1] = < +2.35, -1.00, +0.35*0.70 >; #local Ba3[0][0] = < +2.15, +1.00, 00.00*0.70 >; #local Ba3[0][1] = < +2.35, +1.00, 00.00*0.70 >; #local Ba3[1][0] = < +2.15, +0.33, 00.00*0.70 >; #local Ba3[1][1] = < +2.35, +0.33, 00.00*0.70 >; #local Bb3[0][0] = < +2.15, -0.33, 00.00*0.70 >; #local Bb3[0][1] = < +2.35, -0.33, 00.00*0.70 >; #local Bb3[1][0] = < +2.15, -1.00, 00.00*0.70 >; #local Bb3[1][1] = < +2.35, -1.00, 00.00*0.70 >; // Segment 4 (posfork, toes): #local Ta4[0][0] = < +2.50, +1.00, +0.30*0.70 >; #local Ta4[0][1] = < +2.60, +1.00, +0.30*0.70 >; #local Ta4[1][0] = < +2.50, +0.02, +0.30*0.70 >; #local Ta4[1][1] = < +2.60, +0.02, +0.30*0.70 >; #local Tb4[0][0] = < +2.50, -0.02, +0.30*0.70 >; #local Tb4[0][1] = < +2.70, -0.02, +0.30*0.70 >; #local Tb4[1][0] = < +2.50, -1.00, +0.30*0.70 >; #local Tb4[1][1] = < +2.70, -1.00, +0.30*0.70 >; #local Ba4[0][0] = < +2.50, +1.00, 00.00*0.70 >; #local Ba4[0][1] = < +2.60, +1.00, 00.00*0.70 >; #local Ba4[1][0] = < +2.50, +0.02, 00.00*0.70 >; #local Ba4[1][1] = < +2.60, +0.02, 00.00*0.70 >; #local Bb4[0][0] = < +2.50, -0.02, 00.00*0.70 >; #local Bb4[0][1] = < +2.70, -0.02, 00.00*0.70 >; #local Bb4[1][0] = < +2.50, -1.00, 00.00*0.70 >; #local Bb4[1][1] = < +2.70, -1.00, 00.00*0.70 >; #end #macro bzbody_foot_bigtoecap_set_cpoints(T,B) // Sets {T,B} the 2x2 arrays of undeformed free control points of the big-toe cap // (a 2-patch cap). Only the proximal coefs {T[i][0],B[i][0]} are relevant. #local T[0][0] = < +2.90, -0.02, +0.25*0.70 >; #local T[0][1] = < +2.95, -0.02, +0.25*0.70 >; #local T[1][0] = < +2.90, -1.00, +0.25*0.70 >; #local T[1][1] = < +2.95, -1.00, +0.25*0.70 >; #local B[0][0] = < +2.90, -0.02, 00.00*0.70 >; #local B[0][1] = < +2.95, -0.02, 00.00*0.70 >; #local B[1][0] = < +2.90, -1.00, 00.00*0.70 >; #local B[1][1] = < +2.95, -1.00, 00.00*0.70 >; #end #macro bzbody_foot_smalltoescap_set_cpoints(T,B, ra,fs,fw,fh,bt) // Sets {T,B} the 2x2 arrays of undeformed free control points of the small-toes cap // (a 2-patch cap). Only the proximal coefs {T[i][0],B[i][0]} are relevant. #local T[0][0] = < +2.80, +1.00, +0.25*0.70 >; #local T[0][1] = < +2.85, +1.00, +0.25*0.70 >; #local T[1][0] = < +2.80, +0.02, +0.25*0.70 >; #local T[1][1] = < +2.85, +0.02, +0.25*0.70 >; #local B[0][0] = < +2.80, +1.00, 00.00*0.70 >; #local B[0][1] = < +2.85, +1.00, 00.00*0.70 >; #local B[1][0] = < +2.80, +0.02, 00.00*0.70 >; #local B[1][1] = < +2.85, +0.02, 00.00*0.70 >; #end // JUNK ====================================================================== #macro bzbody_foot_smalltoescap_set_cpoints(T,B, ra,fs,fw,fh,bt) // {T,B} = 2x2 control arrays of small toes 2-patch cap. // {ra} = lower radius of ankle. // {fs} = foot length. // {fw} = foot width. // {bt} = bend angle of toes. #local rad = 0.01*ra; union{ object{ bztube_ring4(Ta0,Ba0,Tb0,Bb0, Ta1,Ba1,Tb1,Bb1, Ta2,Ba2,Tb2,Bb2, tx_bzA, tx_bzB, rad, tx_orange) } object{ bztube_ring4(Ta1,Ba1,Tb1,Bb1, Ta2,Ba2,Tb2,Bb2, Ta3,Ba3,Tb3,Bb3, tx_bzB, tx_bzA, rad, tx_orange) } object{ bzbody_toes(Ta2,Ba2,Tb2,Bb2,ra,fs,fw,fh,bta,btb) } translate -fh*z } #end #macro bzbody_ankle_morph(p,ra,fh,ax,ay) // Morphs ankle control point {p} from abstract ankle coordinates to real coordinates. // {ra} = nominal ankle radius; // {fs} = nominal foot length (from mid-ankle to toe base) // {fw} = nominal foot width (at toe base). // {fh} = nominal foot height (at base of ankle). // Abstract coordinates: // {x = -1.0} is back of ankle; // {x = 00.0} is mid-ankle; // {x = +1.0} is front of ankle; // // {y = -1.0} is inner edge of ankle; // {y = 00.0} is line from mid-ankle to spce between bit toe and other toes; // {y = +1.0} is outer edge of ankle; // // {z = 00.0} is ground; // {z = +1.0} is joint of foot with ankle; #local new_x = ra*p.x; #local new_y = ra*p.y; #local new_z = fh*p.z; #local new_p = < new_x, new_y, new_z >; new_p #end #macro bzbody_foot_morph(p,ra,fs,fw,fh) // Morphs control point {p} from abstract coordinates to real coordinates. // {ra} = nominal ankle radius; // {fs} = nominal foot length (from mid-ankle to toe base) // {fw} = nominal foot width (at toe base). // {fh} = nominal foot height (at base of ankle). // Abstract coordinates: // {x = -0.5} is back of ankle; // {x = 00.0} is mid-ankle; // {x = +0.5} is front of ankle; // {x = +1.0} is base of toes; // // {y = -1.0} is inner edge of foot; // {y = 00.0} is line from mid-ankle to spce between bit toe and other toes; // {y = +1.0} is outer edge of foot; // // {z = 00.0} is ground; // {z = +1.0} is joint with ankle; #if (p.x <= 1) #local new_x = ra*p.x; #else #local new_x = ra + (fs - ra)*(p.x - 1.0); #end #local twd = (1-0.5*p.x)*2*ra + 0.5*p.x*fw; // Scaled width of foot at this {x} #local bwd = ra*(1 - 0.05*p.x); // Scaled width of inner half at this {x} #local awd = twd - bwd; // Scaled width of outer half at this {x} #if (p.y < 0) #local new_y = bwd*(p.y + 1.0) - ra; #else #local new_y = bwd + awd*p.y - ra; #end #local new_z = fh*p.z; #local new_p = < new_x, new_y, new_z >; new_p #end #macro bzbody_foot(Ta0,Ba0,Tb0,Bb0,ra,fs,fw,fh,bt) // {Ta0,Ba0,Tb0,Bb0} = 2x2 control arrays of previous (ankle) 4-patch ring. // {ra} = lower radius of ankle. // {fs} = foot length. // {fw} = foot width. // {bt} = bend angle of toes. // Segment 1 (4-patch ring, heel): #local Ta1 = array[2][2]; #local Ta1[0][0] = bzbody_foot_morph(< +0.50, +1.00, +0.80*0.70 >,ra,fs,fw,fh); #local Ta1[0][1] = bzbody_foot_morph(< +0.70, +1.00, +0.60*0.70 >,ra,fs,fw,fh); #local Ta1[1][0] = bzbody_foot_morph(< +0.90, +0.33, +0.90*0.70 >,ra,fs,fw,fh); #local Ta1[1][1] = bzbody_foot_morph(< +0.95, +0.33, +0.70*0.70 >,ra,fs,fw,fh); #local Tb1 = array[2][2]; #local Tb1[0][0] = bzbody_foot_morph(< +0.90, -0.33, +0.90*0.70 >,ra,fs,fw,fh); #local Tb1[0][1] = bzbody_foot_morph(< +0.95, -0.33, +0.70 >,ra,fs,fw,fh); #local Tb1[1][0] = bzbody_foot_morph(< +0.50, -1.00, +0.80 >,ra,fs,fw,fh); #local Tb1[1][1] = bzbody_foot_morph(< +0.70, -1.00, +0.60 >,ra,fs,fw,fh); #local Ba1 = array[2][2]; #local Ba1[0][0] = bzbody_foot_morph(< -0.50, +1.00, +0.50 >,ra,fs,fw,fh); #local Ba1[0][1] = bzbody_foot_morph(< -1.20, +1.00, 00.00 >,ra,fs,fw,fh); #local Ba1[1][0] = bzbody_foot_morph(< -0.90, +0.33, +0.40 >,ra,fs,fw,fh); #local Ba1[1][1] = bzbody_foot_morph(< -1.70, +0.33, 00.00 >,ra,fs,fw,fh); #local Bb1 = array[2][2]; #local Bb1[0][0] = bzbody_foot_morph(< -0.90, -0.33, +0.40 >,ra,fs,fw,fh); #local Bb1[0][1] = bzbody_foot_morph(< -1.70, -0.33, 00.00 >,ra,fs,fw,fh); #local Bb1[1][0] = bzbody_foot_morph(< -0.50, -1.00, +0.50 >,ra,fs,fw,fh); #local Bb1[1][1] = bzbody_foot_morph(< -1.20, -1.00, 00.00 >,ra,fs,fw,fh); // Segment 2 (4-patch ring, arch): #local Ta2 = array[2][2]; #local Ta2[0][0] = bzbody_foot_morph(< +1.20, +1.00, +0.65 >,ra,fs,fw,fh); #local Ta2[0][1] = bzbody_foot_morph(< +1.80, +1.00, +0.45 >,ra,fs,fw,fh); #local Ta2[1][0] = bzbody_foot_morph(< +1.30, +0.33, +0.65 >,ra,fs,fw,fh); #local Ta2[1][1] = bzbody_foot_morph(< +1.90, +0.33, +0.45 >,ra,fs,fw,fh); #local Tb2 = array[2][2]; #local Tb2[0][0] = bzbody_foot_morph(< +1.30, -0.33, +0.65 >,ra,fs,fw,fh); #local Tb2[0][1] = bzbody_foot_morph(< +1.90, -0.33, +0.45 >,ra,fs,fw,fh); #local Tb2[1][0] = bzbody_foot_morph(< +1.20, -1.00, +0.65 >,ra,fs,fw,fh); #local Tb2[1][1] = bzbody_foot_morph(< +1.80, -1.00, +0.45 >,ra,fs,fw,fh); #local Ba2 = array[2][2]; #local Ba2[0][0] = bzbody_foot_morph(< +1.10, +1.00, 00.00 >,ra,fs,fw,fh); #local Ba2[0][1] = bzbody_foot_morph(< +1.60, +1.00, 00.00 >,ra,fs,fw,fh); #local Ba2[1][0] = bzbody_foot_morph(< +1.40, +0.33, 00.00 >,ra,fs,fw,fh); #local Ba2[1][1] = bzbody_foot_morph(< +1.80, +0.33, 00.00 >,ra,fs,fw,fh); #local Bb2 = array[2][2]; #local Bb2[0][0] = bzbody_foot_morph(< +1.40, -0.33, 00.00 >,ra,fs,fw,fh); #local Bb2[0][1] = bzbody_foot_morph(< +1.80, -0.33, 00.00 >,ra,fs,fw,fh); #local Bb2[1][0] = bzbody_foot_morph(< +1.10, -1.00, 00.00 >,ra,fs,fw,fh); #local Bb2[1][1] = bzbody_foot_morph(< +1.60, -1.00, 00.00 >,ra,fs,fw,fh); // Segment 3 (pre-fork, toe joints): #local Ta3 = array[2][2]; #local Ta3[0][0] = bzbody_foot_morph(< +2.15, +1.00, +0.35 >,ra,fs,fw,fh); #local Ta3[0][1] = bzbody_foot_morph(< +2.35, +1.00, +0.35 >,ra,fs,fw,fh); #local Ta3[1][0] = bzbody_foot_morph(< +2.15, +0.33, +0.35 >,ra,fs,fw,fh); #local Ta3[1][1] = bzbody_foot_morph(< +2.35, +0.33, +0.35 >,ra,fs,fw,fh); #local Tb3 = array[2][2]; #local Tb3[0][0] = bzbody_foot_morph(< +2.15, -0.33, +0.35 >,ra,fs,fw,fh); #local Tb3[0][1] = bzbody_foot_morph(< +2.35, -0.33, +0.35 >,ra,fs,fw,fh); #local Tb3[1][0] = bzbody_foot_morph(< +2.15, -1.00, +0.35 >,ra,fs,fw,fh); #local Tb3[1][1] = bzbody_foot_morph(< +2.35, -1.00, +0.35 >,ra,fs,fw,fh); #local Ba3 = array[2][2]; #local Ba3[0][0] = bzbody_foot_morph(< +2.15, +1.00, 00.00 >,ra,fs,fw,fh); #local Ba3[0][1] = bzbody_foot_morph(< +2.35, +1.00, 00.00 >,ra,fs,fw,fh); #local Ba3[1][0] = bzbody_foot_morph(< +2.15, +0.33, 00.00 >,ra,fs,fw,fh); #local Ba3[1][1] = bzbody_foot_morph(< +2.35, +0.33, 00.00 >,ra,fs,fw,fh); #local Bb3 = array[2][2]; #local Bb3[0][0] = bzbody_foot_morph(< +2.15, -0.33, 00.00 >,ra,fs,fw,fh); #local Bb3[0][1] = bzbody_foot_morph(< +2.35, -0.33, 00.00 >,ra,fs,fw,fh); #local Bb3[1][0] = bzbody_foot_morph(< +2.15, -1.00, 00.00 >,ra,fs,fw,fh); #local Bb3[1][1] = bzbody_foot_morph(< +2.35, -1.00, 00.00 >,ra,fs,fw,fh); // Segment 4 (posfork, toes): #local Ta4 = array[2][2]; #local Ta4[0][0] = bzbody_foot_morph(< +2.50, +1.00, +0.30 >,ra,fs,fw,fh); #local Ta4[0][1] = bzbody_foot_morph(< +2.60, +1.00, +0.30 >,ra,fs,fw,fh); #local Ta4[1][0] = bzbody_foot_morph(< +2.50, +0.02, +0.30 >,ra,fs,fw,fh); #local Ta4[1][1] = bzbody_foot_morph(< +2.60, +0.02, +0.30 >,ra,fs,fw,fh); #local Tb4 = array[2][2]; #local Tb4[0][0] = bzbody_foot_morph(< +2.50, -0.02, +0.30 >,ra,fs,fw,fh); #local Tb4[0][1] = bzbody_foot_morph(< +2.70, -0.02, +0.30 >,ra,fs,fw,fh); #local Tb4[1][0] = bzbody_foot_morph(< +2.50, -1.00, +0.30 >,ra,fs,fw,fh); #local Tb4[1][1] = bzbody_foot_morph(< +2.70, -1.00, +0.30 >,ra,fs,fw,fh); #local Ba4 = array[2][2]; #local Ba4[0][0] = bzbody_foot_morph(< +2.50, +1.00, 00.00 >,ra,fs,fw,fh); #local Ba4[0][1] = bzbody_foot_morph(< +2.60, +1.00, 00.00 >,ra,fs,fw,fh); #local Ba4[1][0] = bzbody_foot_morph(< +2.50, +0.02, 00.00 >,ra,fs,fw,fh); #local Ba4[1][1] = bzbody_foot_morph(< +2.60, +0.02, 00.00 >,ra,fs,fw,fh); #local Bb4 = array[2][2]; #local Bb4[0][0] = bzbody_foot_morph(< +2.50, -0.02, 00.00 >,ra,fs,fw,fh); #local Bb4[0][1] = bzbody_foot_morph(< +2.70, -0.02, 00.00 >,ra,fs,fw,fh); #local Bb4[1][0] = bzbody_foot_morph(< +2.50, -1.00, 00.00 >,ra,fs,fw,fh); #local Bb4[1][1] = bzbody_foot_morph(< +2.70, -1.00, 00.00 >,ra,fs,fw,fh); // Segment 5 (two 2-caps, toes): #local Ta5 = array[2][2]; #local Ta5[0][0] = bzbody_foot_morph(< +2.80, +1.00, +0.25 >,ra,fs,fw,fh); #local Ta5[0][1] = bzbody_foot_morph(< +2.85, +1.00, +0.25 >,ra,fs,fw,fh); #local Ta5[1][0] = bzbody_foot_morph(< +2.80, +0.02, +0.25 >,ra,fs,fw,fh); #local Ta5[1][1] = bzbody_foot_morph(< +2.85, +0.02, +0.25 >,ra,fs,fw,fh); #local Tb5 = array[2][2]; #local Tb5[0][0] = bzbody_foot_morph(< +2.90, -0.02, +0.25 >,ra,fs,fw,fh); #local Tb5[0][1] = bzbody_foot_morph(< +2.95, -0.02, +0.25 >,ra,fs,fw,fh); #local Tb5[1][0] = bzbody_foot_morph(< +2.90, -1.00, +0.25 >,ra,fs,fw,fh); #local Tb5[1][1] = bzbody_foot_morph(< +2.95, -1.00, +0.25 >,ra,fs,fw,fh); #local Ba5 = array[2][2]; #local Ba5[0][0] = bzbody_foot_morph(< +2.80, +1.00, 00.00 >,ra,fs,fw,fh); #local Ba5[0][1] = bzbody_foot_morph(< +2.85, +1.00, 00.00 >,ra,fs,fw,fh); #local Ba5[1][0] = bzbody_foot_morph(< +2.80, +0.02, 00.00 >,ra,fs,fw,fh); #local Ba5[1][1] = bzbody_foot_morph(< +2.85, +0.02, 00.00 >,ra,fs,fw,fh); #local Bb5 = array[2][2]; #local Bb5[0][0] = bzbody_foot_morph(< +2.90, -0.02, 00.00 >,ra,fs,fw,fh); #local Bb5[0][1] = bzbody_foot_morph(< +2.95, -0.02, 00.00 >,ra,fs,fw,fh); #local Bb5[1][0] = bzbody_foot_morph(< +2.90, -1.00, 00.00 >,ra,fs,fw,fh); #local Bb5[1][1] = bzbody_foot_morph(< +2.95, -1.00, 00.00 >,ra,fs,fw,fh); #local rad = 0.01*ra; union{ object{ bztube_ring4(Ta0,Ba0,Tb0,Bb0, Ta1,Ba1,Tb1,Bb1, Ta2,Ba2,Tb2,Bb2, tx_bzA, tx_bzB, rad, tx_orange) } object{ bztube_ring4(Ta1,Ba1,Tb1,Bb1, Ta2,Ba2,Tb2,Bb2, Ta3,Ba3,Tb3,Bb3, tx_bzB, tx_bzA, rad, tx_orange) } object{ bzbody_toes(Ta2,Ba2,Tb2,Bb2,ra,fs,fw,fh,bta,btb) } translate -fh*z } #end #macro bzbody_toes(Ta2,Ba2,Tb2,Bb2,ra,fs,fw,fh,bta,btb) // {Ta2,Ba2,Tb2,Bb2} = 2x2 control arrays of previous (foot arch) 4-patch ring. // {ra} = lower radius of ankle. // {fs} = foot length. // {fw} = foot width. // {bta} = bend angle of toes except big toe. // {btb} = bend angle of big toe. // Segment 3 (pre-fork, toe joints): #local Ta3 = array[2][2]; #local Ta3[0][0] = bzbody_foot_morph(< +2.15, +1.00, +0.35 >,ra,fs,fw,fh); #local Ta3[0][1] = bzbody_foot_morph(< +2.35, +1.00, +0.35 >,ra,fs,fw,fh); #local Ta3[1][0] = bzbody_foot_morph(< +2.15, +0.33, +0.35 >,ra,fs,fw,fh); #local Ta3[1][1] = bzbody_foot_morph(< +2.35, +0.33, +0.35 >,ra,fs,fw,fh); #local Tb3 = array[2][2]; #local Tb3[0][0] = bzbody_foot_morph(< +2.15, -0.33, +0.35 >,ra,fs,fw,fh); #local Tb3[0][1] = bzbody_foot_morph(< +2.35, -0.33, +0.35 >,ra,fs,fw,fh); #local Tb3[1][0] = bzbody_foot_morph(< +2.15, -1.00, +0.35 >,ra,fs,fw,fh); #local Tb3[1][1] = bzbody_foot_morph(< +2.35, -1.00, +0.35 >,ra,fs,fw,fh); #local Ba3 = array[2][2]; #local Ba3[0][0] = bzbody_foot_morph(< +2.15, +1.00, 00.00 >,ra,fs,fw,fh); #local Ba3[0][1] = bzbody_foot_morph(< +2.35, +1.00, 00.00 >,ra,fs,fw,fh); #local Ba3[1][0] = bzbody_foot_morph(< +2.15, +0.33, 00.00 >,ra,fs,fw,fh); #local Ba3[1][1] = bzbody_foot_morph(< +2.35, +0.33, 00.00 >,ra,fs,fw,fh); #local Bb3 = array[2][2]; #local Bb3[0][0] = bzbody_foot_morph(< +2.15, -0.33, 00.00 >,ra,fs,fw,fh); #local Bb3[0][1] = bzbody_foot_morph(< +2.35, -0.33, 00.00 >,ra,fs,fw,fh); #local Bb3[1][0] = bzbody_foot_morph(< +2.15, -1.00, 00.00 >,ra,fs,fw,fh); #local Bb3[1][1] = bzbody_foot_morph(< +2.35, -1.00, 00.00 >,ra,fs,fw,fh); // Segment 4 (posfork, toes): #local Ta4 = array[2][2]; #local Ta4[0][0] = bzbody_foot_morph(< +2.50, +1.00, +0.30 >,ra,fs,fw,fh); #local Ta4[0][1] = bzbody_foot_morph(< +2.60, +1.00, +0.30 >,ra,fs,fw,fh); #local Ta4[1][0] = bzbody_foot_morph(< +2.50, +0.02, +0.30 >,ra,fs,fw,fh); #local Ta4[1][1] = bzbody_foot_morph(< +2.60, +0.02, +0.30 >,ra,fs,fw,fh); #local Tb4 = array[2][2]; #local Tb4[0][0] = bzbody_foot_morph(< +2.50, -0.02, +0.30 >,ra,fs,fw,fh); #local Tb4[0][1] = bzbody_foot_morph(< +2.70, -0.02, +0.30 >,ra,fs,fw,fh); #local Tb4[1][0] = bzbody_foot_morph(< +2.50, -1.00, +0.30 >,ra,fs,fw,fh); #local Tb4[1][1] = bzbody_foot_morph(< +2.70, -1.00, +0.30 >,ra,fs,fw,fh); #local Ba4 = array[2][2]; #local Ba4[0][0] = bzbody_foot_morph(< +2.50, +1.00, 00.00 >,ra,fs,fw,fh); #local Ba4[0][1] = bzbody_foot_morph(< +2.60, +1.00, 00.00 >,ra,fs,fw,fh); #local Ba4[1][0] = bzbody_foot_morph(< +2.50, +0.02, 00.00 >,ra,fs,fw,fh); #local Ba4[1][1] = bzbody_foot_morph(< +2.60, +0.02, 00.00 >,ra,fs,fw,fh); #local Bb4 = array[2][2]; #local Bb4[0][0] = bzbody_foot_morph(< +2.50, -0.02, 00.00 >,ra,fs,fw,fh); #local Bb4[0][1] = bzbody_foot_morph(< +2.70, -0.02, 00.00 >,ra,fs,fw,fh); #local Bb4[1][0] = bzbody_foot_morph(< +2.50, -1.00, 00.00 >,ra,fs,fw,fh); #local Bb4[1][1] = bzbody_foot_morph(< +2.70, -1.00, 00.00 >,ra,fs,fw,fh); // Segment 5 (two 2-caps, toes): #local Ta5 = array[2][2]; #local Ta5[0][0] = bzbody_foot_morph(< +2.80, +1.00, +0.25 >,ra,fs,fw,fh); #local Ta5[0][1] = bzbody_foot_morph(< +2.85, +1.00, +0.25 >,ra,fs,fw,fh); #local Ta5[1][0] = bzbody_foot_morph(< +2.80, +0.02, +0.25 >,ra,fs,fw,fh); #local Ta5[1][1] = bzbody_foot_morph(< +2.85, +0.02, +0.25 >,ra,fs,fw,fh); #local Tb5 = array[2][2]; #local Tb5[0][0] = bzbody_foot_morph(< +2.90, -0.02, +0.25 >,ra,fs,fw,fh); #local Tb5[0][1] = bzbody_foot_morph(< +2.95, -0.02, +0.25 >,ra,fs,fw,fh); #local Tb5[1][0] = bzbody_foot_morph(< +2.90, -1.00, +0.25 >,ra,fs,fw,fh); #local Tb5[1][1] = bzbody_foot_morph(< +2.95, -1.00, +0.25 >,ra,fs,fw,fh); #local Ba5 = array[2][2]; #local Ba5[0][0] = bzbody_foot_morph(< +2.80, +1.00, 00.00 >,ra,fs,fw,fh); #local Ba5[0][1] = bzbody_foot_morph(< +2.85, +1.00, 00.00 >,ra,fs,fw,fh); #local Ba5[1][0] = bzbody_foot_morph(< +2.80, +0.02, 00.00 >,ra,fs,fw,fh); #local Ba5[1][1] = bzbody_foot_morph(< +2.85, +0.02, 00.00 >,ra,fs,fw,fh); #local Bb5 = array[2][2]; #local Bb5[0][0] = bzbody_foot_morph(< +2.90, -0.02, 00.00 >,ra,fs,fw,fh); #local Bb5[0][1] = bzbody_foot_morph(< +2.95, -0.02, 00.00 >,ra,fs,fw,fh); #local Bb5[1][0] = bzbody_foot_morph(< +2.90, -1.00, 00.00 >,ra,fs,fw,fh); #local Bb5[1][1] = bzbody_foot_morph(< +2.95, -1.00, 00.00 >,ra,fs,fw,fh); #local rad = 0.01*ra; union{ object{ bztube_prefork42(Ta2,Ba2,Tb2,Bb2, Ta3,Ba3,Tb3,Bb3, Ta4,Ba4,Tb4,Bb4, tx_bzA, tx_bzB, rad, tx_orange) } object{ bztube_posfork42(Ta3,Ba3,Tb3,Bb3, Ta4,Ba4,Tb4,Bb4, Ta5,Ba5,Tb5,Bb5, tx_bzB, tx_bzA, rad, tx_orange) } object{ bztube_cap2(Ta4,Ba4, Ta5,Ba5, tx_bzA, tx_bzB, rad, tx_orange) } object{ bztube_cap2(Tb4,Bb4, Tb5,Bb5, tx_bzB, tx_bzA, rad, tx_orange) } } #end #macro bzbody_foot_arch_set_cpoints(Ta0,Ba0,Tb0,Bb0, ra,fs,fw,fh,bt) // {Ta0,Ba0,Tb0,Bb0} = 2x2 control arrays of previous (ankle) 4-patch ring. // {ra} = lower radius of ankle. // {fs} = foot length. // {fw} = foot width. // {bt} = bend angle of toes. // Segment 1 (4-patch ring, heel): #local Ta1 = array[2][2]; #local Ta1[0][0] = bzbody_foot_morph(< +0.50, +1.00, +0.80 >,ra,fs,fw,fh); #local Ta1[0][1] = bzbody_foot_morph(< +0.70, +1.00, +0.60 >,ra,fs,fw,fh); #local Ta1[1][0] = bzbody_foot_morph(< +0.90, +0.33, +0.90 >,ra,fs,fw,fh); #local Ta1[1][1] = bzbody_foot_morph(< +0.95, +0.33, +0.70 >,ra,fs,fw,fh); #local Tb1 = array[2][2]; #local Tb1[0][0] = bzbody_foot_morph(< +0.90, -0.33, +0.90 >,ra,fs,fw,fh); #local Tb1[0][1] = bzbody_foot_morph(< +0.95, -0.33, +0.70 >,ra,fs,fw,fh); #local Tb1[1][0] = bzbody_foot_morph(< +0.50, -1.00, +0.80 >,ra,fs,fw,fh); #local Tb1[1][1] = bzbody_foot_morph(< +0.70, -1.00, +0.60 >,ra,fs,fw,fh); #local Ba1 = array[2][2]; #local Ba1[0][0] = bzbody_foot_morph(< -0.50, +1.00, +0.50 >,ra,fs,fw,fh); #local Ba1[0][1] = bzbody_foot_morph(< -1.20, +1.00, 00.00 >,ra,fs,fw,fh); #local Ba1[1][0] = bzbody_foot_morph(< -0.90, +0.33, +0.40 >,ra,fs,fw,fh); #local Ba1[1][1] = bzbody_foot_morph(< -1.70, +0.33, 00.00 >,ra,fs,fw,fh); #local Bb1 = array[2][2]; #local Bb1[0][0] = bzbody_foot_morph(< -0.90, -0.33, +0.40 >,ra,fs,fw,fh); #local Bb1[0][1] = bzbody_foot_morph(< -1.70, -0.33, 00.00 >,ra,fs,fw,fh); #local Bb1[1][0] = bzbody_foot_morph(< -0.50, -1.00, +0.50 >,ra,fs,fw,fh); #local Bb1[1][1] = bzbody_foot_morph(< -1.20, -1.00, 00.00 >,ra,fs,fw,fh); // Segment 2 (4-patch ring, arch): #local Ta2 = array[2][2]; #local Ta2[0][0] = bzbody_foot_morph(< +1.20, +1.00, +0.65 >,ra,fs,fw,fh); #local Ta2[0][1] = bzbody_foot_morph(< +1.80, +1.00, +0.45 >,ra,fs,fw,fh); #local Ta2[1][0] = bzbody_foot_morph(< +1.30, +0.33, +0.65 >,ra,fs,fw,fh); #local Ta2[1][1] = bzbody_foot_morph(< +1.90, +0.33, +0.45 >,ra,fs,fw,fh); #local Tb2 = array[2][2]; #local Tb2[0][0] = bzbody_foot_morph(< +1.30, -0.33, +0.65 >,ra,fs,fw,fh); #local Tb2[0][1] = bzbody_foot_morph(< +1.90, -0.33, +0.45 >,ra,fs,fw,fh); #local Tb2[1][0] = bzbody_foot_morph(< +1.20, -1.00, +0.65 >,ra,fs,fw,fh); #local Tb2[1][1] = bzbody_foot_morph(< +1.80, -1.00, +0.45 >,ra,fs,fw,fh); #local Ba2 = array[2][2]; #local Ba2[0][0] = bzbody_foot_morph(< +1.10, +1.00, 00.00 >,ra,fs,fw,fh); #local Ba2[0][1] = bzbody_foot_morph(< +1.60, +1.00, 00.00 >,ra,fs,fw,fh); #local Ba2[1][0] = bzbody_foot_morph(< +1.40, +0.33, 00.00 >,ra,fs,fw,fh); #local Ba2[1][1] = bzbody_foot_morph(< +1.80, +0.33, 00.00 >,ra,fs,fw,fh); #local Bb2 = array[2][2]; #local Bb2[0][0] = bzbody_foot_morph(< +1.40, -0.33, 00.00 >,ra,fs,fw,fh); #local Bb2[0][1] = bzbody_foot_morph(< +1.80, -0.33, 00.00 >,ra,fs,fw,fh); #local Bb2[1][0] = bzbody_foot_morph(< +1.10, -1.00, 00.00 >,ra,fs,fw,fh); #local Bb2[1][1] = bzbody_foot_morph(< +1.60, -1.00, 00.00 >,ra,fs,fw,fh); // Segment 3 (pre-fork, toe joints): #local Ta3 = array[2][2]; #local Ta3[0][0] = bzbody_foot_morph(< +2.15, +1.00, +0.35 >,ra,fs,fw,fh); #local Ta3[0][1] = bzbody_foot_morph(< +2.35, +1.00, +0.35 >,ra,fs,fw,fh); #local Ta3[1][0] = bzbody_foot_morph(< +2.15, +0.33, +0.35 >,ra,fs,fw,fh); #local Ta3[1][1] = bzbody_foot_morph(< +2.35, +0.33, +0.35 >,ra,fs,fw,fh); #local Tb3 = array[2][2]; #local Tb3[0][0] = bzbody_foot_morph(< +2.15, -0.33, +0.35 >,ra,fs,fw,fh); #local Tb3[0][1] = bzbody_foot_morph(< +2.35, -0.33, +0.35 >,ra,fs,fw,fh); #local Tb3[1][0] = bzbody_foot_morph(< +2.15, -1.00, +0.35 >,ra,fs,fw,fh); #local Tb3[1][1] = bzbody_foot_morph(< +2.35, -1.00, +0.35 >,ra,fs,fw,fh); #local Ba3 = array[2][2]; #local Ba3[0][0] = bzbody_foot_morph(< +2.15, +1.00, 00.00 >,ra,fs,fw,fh); #local Ba3[0][1] = bzbody_foot_morph(< +2.35, +1.00, 00.00 >,ra,fs,fw,fh); #local Ba3[1][0] = bzbody_foot_morph(< +2.15, +0.33, 00.00 >,ra,fs,fw,fh); #local Ba3[1][1] = bzbody_foot_morph(< +2.35, +0.33, 00.00 >,ra,fs,fw,fh); #local Bb3 = array[2][2]; #local Bb3[0][0] = bzbody_foot_morph(< +2.15, -0.33, 00.00 >,ra,fs,fw,fh); #local Bb3[0][1] = bzbody_foot_morph(< +2.35, -0.33, 00.00 >,ra,fs,fw,fh); #local Bb3[1][0] = bzbody_foot_morph(< +2.15, -1.00, 00.00 >,ra,fs,fw,fh); #local Bb3[1][1] = bzbody_foot_morph(< +2.35, -1.00, 00.00 >,ra,fs,fw,fh); // Segment 4 (posfork, toes): #local Ta4 = array[2][2]; #local Ta4[0][0] = bzbody_foot_morph(< +2.50, +1.00, +0.30 >,ra,fs,fw,fh); #local Ta4[0][1] = bzbody_foot_morph(< +2.60, +1.00, +0.30 >,ra,fs,fw,fh); #local Ta4[1][0] = bzbody_foot_morph(< +2.50, +0.02, +0.30 >,ra,fs,fw,fh); #local Ta4[1][1] = bzbody_foot_morph(< +2.60, +0.02, +0.30 >,ra,fs,fw,fh); #local Tb4 = array[2][2]; #local Tb4[0][0] = bzbody_foot_morph(< +2.50, -0.02, +0.30 >,ra,fs,fw,fh); #local Tb4[0][1] = bzbody_foot_morph(< +2.70, -0.02, +0.30 >,ra,fs,fw,fh); #local Tb4[1][0] = bzbody_foot_morph(< +2.50, -1.00, +0.30 >,ra,fs,fw,fh); #local Tb4[1][1] = bzbody_foot_morph(< +2.70, -1.00, +0.30 >,ra,fs,fw,fh); #local Ba4 = array[2][2]; #local Ba4[0][0] = bzbody_foot_morph(< +2.50, +1.00, 00.00 >,ra,fs,fw,fh); #local Ba4[0][1] = bzbody_foot_morph(< +2.60, +1.00, 00.00 >,ra,fs,fw,fh); #local Ba4[1][0] = bzbody_foot_morph(< +2.50, +0.02, 00.00 >,ra,fs,fw,fh); #local Ba4[1][1] = bzbody_foot_morph(< +2.60, +0.02, 00.00 >,ra,fs,fw,fh); #local Bb4 = array[2][2]; #local Bb4[0][0] = bzbody_foot_morph(< +2.50, -0.02, 00.00 >,ra,fs,fw,fh); #local Bb4[0][1] = bzbody_foot_morph(< +2.70, -0.02, 00.00 >,ra,fs,fw,fh); #local Bb4[1][0] = bzbody_foot_morph(< +2.50, -1.00, 00.00 >,ra,fs,fw,fh); #local Bb4[1][1] = bzbody_foot_morph(< +2.70, -1.00, 00.00 >,ra,fs,fw,fh); // Segment 5 (two 2-caps, toes): #local Ta5 = array[2][2]; #local Ta5[0][0] = bzbody_foot_morph(< +2.80, +1.00, +0.25 >,ra,fs,fw,fh); #local Ta5[0][1] = bzbody_foot_morph(< +2.85, +1.00, +0.25 >,ra,fs,fw,fh); #local Ta5[1][0] = bzbody_foot_morph(< +2.80, +0.02, +0.25 >,ra,fs,fw,fh); #local Ta5[1][1] = bzbody_foot_morph(< +2.85, +0.02, +0.25 >,ra,fs,fw,fh); #local Tb5 = array[2][2]; #local Tb5[0][0] = bzbody_foot_morph(< +2.90, -0.02, +0.25 >,ra,fs,fw,fh); #local Tb5[0][1] = bzbody_foot_morph(< +2.95, -0.02, +0.25 >,ra,fs,fw,fh); #local Tb5[1][0] = bzbody_foot_morph(< +2.90, -1.00, +0.25 >,ra,fs,fw,fh); #local Tb5[1][1] = bzbody_foot_morph(< +2.95, -1.00, +0.25 >,ra,fs,fw,fh); #local Ba5 = array[2][2]; #local Ba5[0][0] = bzbody_foot_morph(< +2.80, +1.00, 00.00 >,ra,fs,fw,fh); #local Ba5[0][1] = bzbody_foot_morph(< +2.85, +1.00, 00.00 >,ra,fs,fw,fh); #local Ba5[1][0] = bzbody_foot_morph(< +2.80, +0.02, 00.00 >,ra,fs,fw,fh); #local Ba5[1][1] = bzbody_foot_morph(< +2.85, +0.02, 00.00 >,ra,fs,fw,fh); #local Bb5 = array[2][2]; #local Bb5[0][0] = bzbody_foot_morph(< +2.90, -0.02, 00.00 >,ra,fs,fw,fh); #local Bb5[0][1] = bzbody_foot_morph(< +2.95, -0.02, 00.00 >,ra,fs,fw,fh); #local Bb5[1][0] = bzbody_foot_morph(< +2.90, -1.00, 00.00 >,ra,fs,fw,fh); #local Bb5[1][1] = bzbody_foot_morph(< +2.95, -1.00, 00.00 >,ra,fs,fw,fh); #local rad = 0.01*ra; union{ object{ bztube_ring4(Ta0,Ba0,Tb0,Bb0, Ta1,Ba1,Tb1,Bb1, Ta2,Ba2,Tb2,Bb2, tx_bzA, tx_bzB, rad, tx_orange) } object{ bztube_ring4(Ta1,Ba1,Tb1,Bb1, Ta2,Ba2,Tb2,Bb2, Ta3,Ba3,Tb3,Bb3, tx_bzB, tx_bzA, rad, tx_orange) } object{ bzbody_toes(Ta2,Ba2,Tb2,Bb2,ra,fs,fw,fh,bta,btb) } translate -fh*z } #end