macroscript muscleSetup category:"Toke Scripts" ( fn muscleBone type = ( p1 = selection[1] p2 = selection[2] if p1 == undefined then ( messagebox "Select two points." )else if p2 == undefined do ( messagebox "Select one more point." ) try ( p1.name = (uniqueName "MuscleStart_") p2.name = (uniqueName "MuscleEnd_") muscle = BoneSys.createBone p1.pos p2.pos [0,0,1] muscle.boneFreezeLength = off muscle.boneScaleType = type muscle.name = (uniqueName "Muscle_") muscle.position.controller = Position_Constraint () muscle.position.controller.appendTarget p1 100 muscle.rotation.controller = Lookat_Constraint lookat_vector_length:0 upnode_world:false pickUpNode:p2 muscle.rotation.controller.appendTarget p2 100 muscleNull = BoneSys.createBone [0,0,0] [0,0,0] [0,0,1] muscleNull.pos = p2.pos muscleNull.parent = muscle muscleNull.name = (uniqueName "MuscleNull_") muscleNull.position.controller = position_constraint () muscleNull.position.controller.appendTarget p2 100 )catch() ) fn muscleCylinder type = ( p1 = selection[1] p2 = selection[2] if p1 == undefined then ( messagebox "Select two points." )else if p2 == undefined do ( messagebox "Select one more point." ) try ( p1.name = (uniqueName "MuscleStart_") p2.name = (uniqueName "MuscleEnd_") dist = (distance p1.pos p2.pos) --searching through scene for other muscles and instances modifier flexMuscles = for i in geometry where i.boneEnable == true and classof (i.modifiers[1]) == flex collect i muscle = cylinder radius:3 height:1 sides:8 heightsegs:10 name:(uniqueName "Muscle_") muscle.pos = p1.pos muscle.boneEnable = true muscle.boneFreezeLength = off muscle.boneScaleType = type muscle.position.controller = Position_Constraint () muscle.position.controller.appendTarget p1 100 muscle.rotation.controller = Lookat_Constraint lookat_vector_length:0 upnode_world:false pickUpNode:p2 muscle.rotation.controller.appendTarget p2 100 addmodifier muscle (xform()) muscle.modifiers[#XForm].gizmo.rotation += quat 0 0.707107 0 0.707107 muscle.modifiers[#Xform].gizmo.scale += [0,0,(dist-1)] addmodifier muscle (ffdBox ()) setDimensions muscle.modifiers[#FFD_box__4x4x4] [5,2,2] addmodifier muscle (volumeselect level:1 useAffectRegion:true falloff:(dist/2)) completeRedraw() muscle.modifiers[#Vol__Select].gizmo.scale = [0.01,1,1] muscle.modifiers[1].gizmo.position = [(dist/2),0,0] muscleNull = BoneSys.createBone [0,0,0] [0,0,0] [0,0,1] muscleNull.pos = p2.pos muscleNull.parent = muscle muscleNull.name = (uniqueName "MuscleNull_") muscleNull.position.controller = position_constraint () muscleNull.position.controller.appendTarget p2 100 if flexMuscles.count > 0 then ( tempMod = flexMuscles[1].modifiers[1] addmodifier muscle tempMod muscle.baseobject = flexMuscles[1].baseobject )else ( addmodifier muscle (flex flex:0.2 strength:4 sway:10) ) )catch() ) rollout rollout_muscleSetup "Muscle Setup" ( group "Step 1" ( label lb1 "Select two points." ) group "Step 2" ( label lb2 "Choose type" radiobuttons muscleType labels:#("scale","squash") ) group "Step 3" ( label lb3 "Choose muscle" button cylinderBN "Cylinder w. Flex" button boneBN "Bone" ) on boneBN pressed do ( if muscleType.state == 1 then ( muscleBone #scale )else ( muscleBone #squash ) ) on cylinderBN pressed do ( if muscleType.state == 1 then ( muscleCylinder #scale )else if muscleType.state == 2 do ( muscleCylinder #squash ) ) ) createdialog rollout_muscleSetup style:#(#style_titlebar,#Style_toolwindow,#style_sysmenu) )