#version unofficial megapov 1.0; #include "mechsim.inc" #declare fn_Env = function { y } #local Dense = 1000; #local Stiff = 100000; #local Muscle = 20000; #local Damp = 5000; #local Faces = true; #local Length = 5; #local Start = 12; #local Gap = 0.1; #local TestNum = 3; #local DOGROUP = div(mod(TestNum,2),1); // <<-- the first bit #local DOCONNECT = div(mod(TestNum,4),2); // <<-- the second bit #debug concat("DOGROUP = ",str(DOGROUP, 0,0),"\n") #debug concat("DOCONNECT = ",str(DOCONNECT,0,0),"\n") #declare Trans1 = transform { translate <-0.5,-0.5,-1.5> rotate < 85,5,5> translate <0.0,10.1, 1.4> } #declare Trans2 = transform { translate <-0.5,-0.5,-1.5> rotate <185,5,5> translate <0.0, 7.0, 0.0> } #declare Trans3 = transform { translate <-0.5,-0.5,-1.5> rotate <275,5,5> translate <0.0, 8.9,-3.0> } #macro Bone(Transf) #if (DOGROUP) group { #end #local m0 = mechsim:mass_count; mass { vtransform(<0,0.5,-1>, Transf), 0, 0.1 density Dense } mass { vtransform(<1,0.5,-1>, Transf), 0, 0.1 density Dense } MechSim_Generate_Grid_Std( 0, 0.1, Dense, Stiff, Damp, Faces, <1,1,1>, <2,2,Length-1>, Transf, 3 ) mass { vtransform(<0,0.5, Length-1>, Transf), 0, 0.1 density Dense } mass { vtransform(<1,0.5, Length-1>, Transf), 0, 0.1 density Dense } #local m1 = mechsim:mass_count-1; #if (Faces) face { m0+0,m0+2,m0+4 } face { m0+1,m0+3,m0+5 } face { m0+0,m0+1,m0+3 } face { m0+0,m0+2,m0+3 } face { m0+0,m0+1,m0+5 } face { m0+0,m0+4,m0+5 } face { m1-0,m1-2,m1-4 } face { m1-1,m1-3,m1-5 } face { m1-0,m1-1,m1-3 } face { m1-0,m1-2,m1-3 } face { m1-0,m1-1,m1-5 } face { m1-0,m1-4,m1-5 } #end connection { m0+0, m0+1 stiffness Stiff damping Damp } connection { m0+0, m0+2 stiffness Stiff damping Damp } connection { m0+0, m0+3 stiffness Stiff damping Damp } connection { m0+0, m0+4 stiffness Stiff damping Damp } connection { m0+0, m0+5 stiffness Stiff damping Damp } connection { m0+1, m0+2 stiffness Stiff damping Damp } connection { m0+1, m0+3 stiffness Stiff damping Damp } connection { m0+1, m0+4 stiffness Stiff damping Damp } connection { m0+1, m0+5 stiffness Stiff damping Damp } connection { m1-0, m1-1 stiffness Stiff damping Damp } connection { m1-0, m1-2 stiffness Stiff damping Damp } connection { m1-0, m1-3 stiffness Stiff damping Damp } connection { m1-0, m1-4 stiffness Stiff damping Damp } connection { m1-0, m1-5 stiffness Stiff damping Damp } connection { m1-1, m1-2 stiffness Stiff damping Damp } connection { m1-1, m1-3 stiffness Stiff damping Damp } connection { m1-1, m1-4 stiffness Stiff damping Damp } connection { m1-1, m1-5 stiffness Stiff damping Damp } #if (DOGROUP) } #end #end #macro Heel(mEnd,mStart,Flex) #if (DOCONNECT) connection { mEnd -10, mStart+ 6 stiffness Muscle damping Damp length 2.5-Flex*2} connection { mEnd - 9, mStart+ 7 stiffness Muscle damping Damp length 2.5-Flex*2} connection { mEnd - 2, mStart+ 2 stiffness Stiff damping Damp length 0.1} connection { mEnd - 1, mStart+ 3 stiffness Stiff damping Damp length 0.1} connection { mEnd - 8, mStart+ 0 stiffness Muscle damping Damp length 0.5+Flex*2} connection { mEnd - 7, mStart+ 1 stiffness Muscle damping Damp length 0.5+Flex*2} #end #end global_settings { assumed_gamma 1.0 max_trace_level 15 mechsim { gravity <0, -9.81, 0> method 2 environment { function { fn_Env(x, y, z) } stiffness 240000 damping 35000 friction 0.2, 1.001 } collision { 2, 2 stiffness 180000 damping 30000 //5000 friction 0.2, 1.001 } #if (clock_on) step_count 500 time_step (1/24)/500 topology { #local cMainEnd = 234; load_file "test1.dat" save_file "test1.dat" 3 } #else step_count 0 topology { #local m1Start = mechsim:mass_count; Bone(Trans1) #local m1End = mechsim:mass_count; #local m2Start = mechsim:mass_count; Bone(Trans2) #local m2End = mechsim:mass_count; #local m3Start = mechsim:mass_count; Bone(Trans3) #local m3End = mechsim:mass_count; #local cMainEnd = mechsim:connection_count; #debug concat("#local cMainEnd = ",str(cMainEnd,0,0),";\n") Heel(m1End, m2Start, 0.9) Heel(m2End, m3Start, 0.9) save_file "test1.dat" 3 } #end } } // ---------------------------------------- MechSim_Show_All_Objects(-1, Faces, -1, "") // Show the connecting connectors (the muscles) #if (Faces) #local Cnt=cMainEnd; #while (Cnt0.0001) cylinder { mechsim:mass(mechsim:connection(Cnt):index1):position, mechsim:mass(mechsim:connection(Cnt):index2):position, mechsim:mass(mechsim:connection(Cnt):index1):radius*0.7 texture { MSim_Tex_C } } #end #local Cnt=Cnt+1; #end #end // Calculate the center of mass of the structure #local i=0; #local centroid=<0,0,0>; #while (i look_at centroid } light_source { <800, 400,-400> color 1 } sky_sphere { pigment { gradient y color_map { [0.00 rgb <0.8,0.9,1.0>] [0.10 rgb <0.6,0.7,1.0>] [0.25 rgb <0.2,0.3,0.8>] } } } plane{y,0 pigment{checker rgb <0.2,0.6,0.2> rgb <0.0,0.5,0.0> scale 100}}