├── Proportion_Trick ├── QC.txt ├── ValveBiped.txt ├── hitbox.qci ├── lua │ └── autorun │ │ └── test.lua ├── physics.qci ├── proportion_trick_2.7.blend ├── proportion_trick_2.7_new.blend ├── proportion_trick_2.9.blend └── scripts │ ├── 2.7 │ ├── proportion_trick1.py │ └── proportion_trick2.py │ ├── 2.7_new │ ├── proportion_trick1.py │ └── proportion_trick2.py │ └── 2.9 │ ├── proportion_trick1.py │ └── proportion_trick2.py ├── README.md ├── operator_proportion_trick.py ├── rag.zip └── unpack 0.68.zip /Proportion_Trick/QC.txt: -------------------------------------------------------------------------------- 1 | //Visit https://developer.valvesoftware.com/wiki/Main_Page if you want to know the function of all commands in this file 2 | 3 | $ikchain "rhand" "ValveBiped.Bip01_R_Hand" knee 0.707 0.707 0 4 | $ikchain "lhand" "ValveBiped.Bip01_L_Hand" knee 0.707 0.707 0 5 | $ikchain "rfoot" "ValveBiped.Bip01_R_Foot" knee 0.707 -0.707 0 6 | $ikchain "lfoot" "ValveBiped.Bip01_L_Foot" knee 0.707 -0.707 0 7 | 8 | //The first value, 0.5, dictates how high the foot is off the ground. Generally values between 0-1 are acceptable enough, but you can go higher or go lower into the negatives if need be. 9 | //The second value, 0.1 can be left untouched (or even at 0). This controls the rotation of the foot and isn't really necessary. 10 | //Copied from CaptainBigButt's post: https://web.archive.org/web/20160608040725/https://facepunch.com/showthread.php?t=1439159 11 | $ikautoplaylock "rfoot" 0.5 0.1 12 | $ikautoplaylock "lfoot" 0.5 0.1 13 | 14 | //Rename reference_male to reference_female if you're using female pm/npc animation 15 | $sequence reference "anims/reference_male" fps 1 16 | 17 | $animation a_proportions "anims/proportions" subtract reference 0 18 | 19 | $sequence proportions a_proportions predelta autoplay 20 | 21 | $Sequence "ragdoll" { 22 | "anims/proportions" 23 | activity "ACT_DIERAGDOLL" 1 24 | fadein 0.2 25 | fadeout 0.2 26 | fps 30 27 | } 28 | 29 | //It is necessary to edit this file so the hitboxes fit your model. 30 | //Removing this command will make the compiler auto generate bad hitboxes. 31 | //Tutorial: https://www.youtube.com/watch?v=gK8bxcZgwEA 32 | $include "hitbox.qci" 33 | 34 | //Make your own collision model 35 | $collisionjoints "your_physics" 36 | 37 | //You can reuse this on other player models but if you don't like the $jointconstrain limit, just edit it in HLMV. 38 | $include "physics.qci" 39 | 40 | ////////////////////////////////////////-Playermodel Animation-//////////////////////////////////////////// 41 | 42 | //Male 43 | $includemodel "m_anm.mdl" 44 | 45 | //Female 46 | $includemodel "f_anm.mdl" 47 | 48 | //////////////////////////////////////////-NPC Animation-////////////////////////////////////////////////// 49 | 50 | //Hostile 51 | $includemodel "combine_soldier_anims.mdl" 52 | $includemodel "humans/male_shared.mdl" 53 | 54 | //Friendly Male 55 | $includemodel "humans/male_shared.mdl" 56 | $includemodel "humans/male_ss.mdl" 57 | $includemodel "humans/male_gestures.mdl" 58 | $includemodel "humans/male_postures.mdl" 59 | 60 | //Friendly Female 61 | $includemodel "humans/female_gestures.mdl" 62 | $includemodel "humans/female_postures.mdl" 63 | $includemodel "humans/female_shared.mdl" 64 | $includemodel "humans/female_ss.mdl" 65 | 66 | ////////////////////////////////////////-Viewmodel Hands-////////////////////////////////////////////////// 67 | 68 | $includemodel "weapons/c_arms_animations.mdl" -------------------------------------------------------------------------------- /Proportion_Trick/ValveBiped.txt: -------------------------------------------------------------------------------- 1 | ValveBiped.Bip01_Pelvis 2 | ValveBiped.Bip01_Spine 3 | ValveBiped.Bip01_Spine1 4 | ValveBiped.Bip01_Spine2 5 | ValveBiped.Bip01_Spine4 6 | ValveBiped.Bip01_Neck1 7 | ValveBiped.Bip01_Head1 8 | 9 | ValveBiped.Bip01_R_Clavicle 10 | ValveBiped.Bip01_R_UpperArm 11 | ValveBiped.Bip01_R_Forearm 12 | 13 | ValveBiped.Bip01_R_Hand 14 | ValveBiped.Bip01_R_Finger0 15 | ValveBiped.Bip01_R_Finger01 16 | ValveBiped.Bip01_R_Finger02 17 | ValveBiped.Bip01_R_Finger1 18 | ValveBiped.Bip01_R_Finger11 19 | ValveBiped.Bip01_R_Finger12 20 | ValveBiped.Bip01_R_Finger2 21 | ValveBiped.Bip01_R_Finger21 22 | ValveBiped.Bip01_R_Finger22 23 | ValveBiped.Bip01_R_Finger3 24 | ValveBiped.Bip01_R_Finger31 25 | ValveBiped.Bip01_R_Finger32 26 | ValveBiped.Bip01_R_Finger4 27 | ValveBiped.Bip01_R_Finger41 28 | ValveBiped.Bip01_R_Finger42 29 | 30 | ValveBiped.Bip01_L_Clavicle 31 | ValveBiped.Bip01_L_UpperArm 32 | ValveBiped.Bip01_L_Forearm 33 | 34 | ValveBiped.Bip01_L_Hand 35 | ValveBiped.Bip01_L_Finger0 36 | ValveBiped.Bip01_L_Finger01 37 | ValveBiped.Bip01_L_Finger02 38 | ValveBiped.Bip01_L_Finger1 39 | ValveBiped.Bip01_L_Finger11 40 | ValveBiped.Bip01_L_Finger12 41 | ValveBiped.Bip01_L_Finger2 42 | ValveBiped.Bip01_L_Finger21 43 | ValveBiped.Bip01_L_Finger22 44 | ValveBiped.Bip01_L_Finger3 45 | ValveBiped.Bip01_L_Finger31 46 | ValveBiped.Bip01_L_Finger32 47 | ValveBiped.Bip01_L_Finger4 48 | ValveBiped.Bip01_L_Finger41 49 | ValveBiped.Bip01_L_Finger42 50 | 51 | ValveBiped.Bip01_R_Thigh 52 | ValveBiped.Bip01_R_Calf 53 | ValveBiped.Bip01_R_Foot 54 | ValveBiped.Bip01_R_Toe0 55 | 56 | ValveBiped.Bip01_L_Thigh 57 | ValveBiped.Bip01_L_Calf 58 | ValveBiped.Bip01_L_Foot 59 | ValveBiped.Bip01_L_Toe0 -------------------------------------------------------------------------------- /Proportion_Trick/hitbox.qci: -------------------------------------------------------------------------------- 1 | // .qc block generated by HLMV begins. 2 | //Tutorial: https://www.youtube.com/watch?v=gK8bxcZgwEA 3 | 4 | $surfaceprop "flesh" 5 | 6 | $hboxset "default" 7 | 8 | $hbox 1 "ValveBiped.Bip01_Head1" -2.00 -6.20 -5.50 9.00 4.80 5.50 9 | $hbox 2 "ValveBiped.Bip01_Spine4" -2.50 -6.60 -7.00 9.50 5.40 7.00 10 | $hbox 3 "ValveBiped.Bip01_Pelvis" -7.50 -1.00 -4.50 7.50 6.00 4.50 11 | $hbox 3 "ValveBiped.Bip01_Spine" 0.00 -4.00 -6.25 6.00 5.00 6.25 12 | $hbox 3 "ValveBiped.Bip01_Spine1" -3.00 -4.50 -6.00 3.00 4.50 6.00 13 | $hbox 3 "ValveBiped.Bip01_Spine2" -1.50 -4.80 -6.00 4.50 4.20 6.00 14 | $hbox 4 "ValveBiped.Bip01_L_UpperArm" -3.25 -2.55 -2.50 10.25 2.95 2.50 15 | $hbox 4 "ValveBiped.Bip01_L_Forearm" -0.50 -1.75 -2.35 9.50 2.75 2.15 16 | $hbox 4 "ValveBiped.Bip01_L_Hand" -1.00 -3.00 -2.00 5.00 1.00 3.00 17 | $hbox 5 "ValveBiped.Bip01_R_UpperArm" -3.25 -2.55 -2.50 10.25 2.95 2.50 18 | $hbox 5 "ValveBiped.Bip01_R_Forearm" -0.50 -1.75 -2.35 9.50 2.75 2.15 19 | $hbox 5 "ValveBiped.Bip01_R_Hand" -1.00 -3.00 -3.00 5.00 1.00 2.00 20 | $hbox 6 "ValveBiped.Bip01_L_Thigh" -1.00 -4.70 -3.25 17.00 4.30 4.25 21 | $hbox 6 "ValveBiped.Bip01_L_Calf" -2.00 -3.50 -3.25 18.00 4.50 3.25 22 | $hbox 6 "ValveBiped.Bip01_L_Foot" -2.50 -2.50 -2.40 5.50 4.90 2.60 23 | $hbox 6 "ValveBiped.Bip01_L_Toe0" -0.80 -2.50 -2.40 4.20 0.50 2.70 24 | $hbox 7 "ValveBiped.Bip01_R_Thigh" -1.00 -4.70 -4.25 17.00 4.30 3.25 25 | $hbox 7 "ValveBiped.Bip01_R_Calf" -2.00 -3.50 -3.25 18.00 4.50 3.25 26 | $hbox 7 "ValveBiped.Bip01_R_Foot" -2.50 -2.50 -2.60 5.50 4.90 2.40 27 | $hbox 7 "ValveBiped.Bip01_R_Toe0" -0.80 -2.50 -2.40 4.20 0.50 2.70 28 | 29 | // .qc block generated by HLMV ends. -------------------------------------------------------------------------------- /Proportion_Trick/lua/autorun/test.lua: -------------------------------------------------------------------------------- 1 | --Add Playermodel 2 | player_manager.AddValidModel( "My PM", "models/my_pm.mdl" ) 3 | player_manager.AddValidHands( "My PM", "models/my_pm_arm.mdl", 0, "0000000" ) 4 | 5 | --Add NPC 6 | local Category = "My NPC" 7 | 8 | --Friendly NPC 9 | local NPC = 10 | { 11 | Name = "My NPC - Friendly", 12 | Class = "npc_citizen", 13 | Model = "models/my_npc_friendly.mdl", 14 | Health = "250", 15 | KeyValues = { citizentype = 4 }, 16 | Category = Category 17 | } 18 | list.Set( "NPC", "my_npc_friendly", NPC ) 19 | 20 | --Hostile NPC 21 | local NPC = 22 | { 23 | Name = "My NPC - Hostile", 24 | Class = "npc_combine_s", 25 | Model = "models/my_npc_hostile.mdl", 26 | Health = "250", 27 | Category = Category 28 | } 29 | list.Set( "NPC", "my_npc_hostile", NPC ) -------------------------------------------------------------------------------- /Proportion_Trick/physics.qci: -------------------------------------------------------------------------------- 1 | { 2 | $mass 65.0 3 | $inertia 10.00 4 | $damping 0.05 5 | $rotdamping 10 6 | $rootbone "valvebiped.bip01_pelvis" 7 | 8 | $jointrotdamping "ValveBiped.Bip01_Pelvis" 3 9 | $rootbone "valvebiped.bip01_pelvis" 10 | 11 | $jointconstrain "valvebiped.bip01_spine" x limit -20.00 20.00 0.00 12 | $jointconstrain "valvebiped.bip01_spine" y limit -10.00 10.00 0.00 13 | $jointconstrain "valvebiped.bip01_spine" z limit -20.00 10.00 0.00 14 | 15 | $jointconstrain "valvebiped.bip01_spine1" x limit -20.00 20.00 0.00 16 | $jointconstrain "valvebiped.bip01_spine1" y limit -10.00 10.00 0.00 17 | $jointconstrain "valvebiped.bip01_spine1" z limit -20.00 10.00 0.00 18 | 19 | $jointconstrain "valvebiped.bip01_spine2" x limit -20.00 20.00 0.00 20 | $jointconstrain "valvebiped.bip01_spine2" y limit -15.00 15.00 0.00 21 | $jointconstrain "valvebiped.bip01_spine2" z limit -30.00 45.00 0.00 22 | 23 | $jointconstrain "valvebiped.bip01_spine4" x limit -20.00 20.00 0.00 24 | $jointconstrain "valvebiped.bip01_spine4" y limit -10.00 10.00 0.00 25 | $jointconstrain "valvebiped.bip01_spine4" z limit -20.00 10.00 0.00 26 | 27 | $jointconstrain "valvebiped.bip01_r_clavicle" x limit -10.00 10.00 0.00 28 | $jointconstrain "valvebiped.bip01_r_clavicle" y limit -20.00 20.00 0.00 29 | $jointconstrain "valvebiped.bip01_r_clavicle" z limit -5.00 30.00 0.00 30 | 31 | $jointconstrain "valvebiped.bip01_l_clavicle" x limit -10.00 10.00 0.00 32 | $jointconstrain "valvebiped.bip01_l_clavicle" y limit -20.00 20.00 0.00 33 | $jointconstrain "valvebiped.bip01_l_clavicle" z limit -5.00 30.00 0.00 34 | 35 | $jointconstrain "valvebiped.bip01_l_upperarm" x limit -45.00 45.00 0.00 36 | $jointconstrain "valvebiped.bip01_l_upperarm" y limit -45.00 50.00 0.00 37 | $jointconstrain "valvebiped.bip01_l_upperarm" z limit -90.00 30.00 0.00 38 | 39 | $jointconstrain "valvebiped.bip01_l_forearm" x limit 0.00 0.00 0.00 40 | $jointconstrain "valvebiped.bip01_l_forearm" y limit 0.00 0.00 0.00 41 | $jointconstrain "valvebiped.bip01_l_forearm" z limit -130.00 0.00 0.00 42 | 43 | $jointconstrain "valvebiped.bip01_l_hand" x limit -45.00 45.00 0.00 44 | $jointconstrain "valvebiped.bip01_l_hand" y limit -30.00 30.00 0.00 45 | $jointconstrain "valvebiped.bip01_l_hand" z limit -30.00 30.00 0.00 46 | 47 | $jointconstrain "valvebiped.bip01_r_upperarm" x limit -45.00 45.00 0.00 48 | $jointconstrain "valvebiped.bip01_r_upperarm" y limit -50.00 45.00 0.00 49 | $jointconstrain "valvebiped.bip01_r_upperarm" z limit -90.00 30.00 0.00 50 | 51 | $jointconstrain "valvebiped.bip01_neck1" x limit -10.00 10.00 0.00 52 | $jointconstrain "valvebiped.bip01_neck1" y limit -15.00 15.00 0.00 53 | $jointconstrain "valvebiped.bip01_neck1" z limit -20.00 20.00 0.00 54 | 55 | $jointconstrain "valvebiped.bip01_r_forearm" x limit 0.00 0.00 0.00 56 | $jointconstrain "valvebiped.bip01_r_forearm" y limit 0.00 0.00 0.00 57 | $jointconstrain "valvebiped.bip01_r_forearm" z limit -130.00 0.00 0.00 58 | 59 | $jointconstrain "valvebiped.bip01_r_hand" x limit -45.00 45.00 0.00 60 | $jointconstrain "valvebiped.bip01_r_hand" y limit -30.00 30.00 0.00 61 | $jointconstrain "valvebiped.bip01_r_hand" z limit -30.00 30.00 0.00 62 | 63 | $jointconstrain "valvebiped.bip01_r_thigh" x limit -15.00 15.00 0.00 64 | $jointconstrain "valvebiped.bip01_r_thigh" y limit -30.00 30.00 0.00 65 | $jointconstrain "valvebiped.bip01_r_thigh" z limit -60.00 30.00 0.00 66 | 67 | $jointconstrain "valvebiped.bip01_r_calf" x limit 0.00 0.00 0.00 68 | $jointconstrain "valvebiped.bip01_r_calf" y limit 0.00 0.00 0.00 69 | $jointconstrain "valvebiped.bip01_r_calf" z limit 0.00 110.00 0.00 70 | 71 | $jointconstrain "valvebiped.bip01_head1" x limit -45.00 45.00 0.00 72 | $jointconstrain "valvebiped.bip01_head1" y limit -10.00 10.00 0.00 73 | $jointconstrain "valvebiped.bip01_head1" z limit -15.00 15.00 0.00 74 | 75 | $jointconstrain "valvebiped.bip01_l_thigh" x limit -15.00 15.00 0.00 76 | $jointconstrain "valvebiped.bip01_l_thigh" y limit -30.00 30.00 0.00 77 | $jointconstrain "valvebiped.bip01_l_thigh" z limit -60.00 30.00 0.00 78 | 79 | $jointconstrain "valvebiped.bip01_l_calf" x limit 0.00 0.00 0.00 80 | $jointconstrain "valvebiped.bip01_l_calf" y limit 0.00 0.00 0.00 81 | $jointconstrain "valvebiped.bip01_l_calf" z limit 0.00 110.00 0.00 82 | 83 | $jointconstrain "valvebiped.bip01_l_foot" x limit -30.00 30.00 0.00 84 | $jointconstrain "valvebiped.bip01_l_foot" y limit -30.00 30.00 0.00 85 | $jointconstrain "valvebiped.bip01_l_foot" z limit -30.00 30.00 0.00 86 | 87 | $jointconstrain "valvebiped.bip01_r_foot" x limit -30.00 30.00 0.00 88 | $jointconstrain "valvebiped.bip01_r_foot" y limit -30.00 30.00 0.00 89 | $jointconstrain "valvebiped.bip01_r_foot" z limit -30.00 30.00 0.00 90 | } -------------------------------------------------------------------------------- /Proportion_Trick/proportion_trick_2.7.blend: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sksh70/proportion_trick_script/4475fbafce71a8744858086f546b98871815f8a3/Proportion_Trick/proportion_trick_2.7.blend -------------------------------------------------------------------------------- /Proportion_Trick/proportion_trick_2.7_new.blend: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sksh70/proportion_trick_script/4475fbafce71a8744858086f546b98871815f8a3/Proportion_Trick/proportion_trick_2.7_new.blend -------------------------------------------------------------------------------- /Proportion_Trick/proportion_trick_2.9.blend: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sksh70/proportion_trick_script/4475fbafce71a8744858086f546b98871815f8a3/Proportion_Trick/proportion_trick_2.9.blend -------------------------------------------------------------------------------- /Proportion_Trick/scripts/2.7/proportion_trick1.py: -------------------------------------------------------------------------------- 1 | #Proportion Trick script by Β L Λ Ζ Ξ 2 | #Blender version: 2.79 3 | #Aligns proportion to imported skeleton. 4 | #Video (2.79): https://www.youtube.com/watch?v=MSWirIyobb4 5 | #Video (2.8+): https://www.youtube.com/watch?v=n9lmxpjSv0I 6 | 7 | import bpy 8 | 9 | obj = bpy.data.objects 10 | 11 | armature = obj['gg'] 12 | 13 | objbone = bpy.data.objects['proportions'].pose.bones['ValveBiped.Bip01_Pelvis'].constraints 14 | 15 | objbone2 = bpy.data.objects['proportions'].pose.bones['ValveBiped.Bip01_L_Thigh'].constraints 16 | objbone3 = bpy.data.objects['proportions'].pose.bones['ValveBiped.Bip01_L_Calf'].constraints 17 | objbone4 = bpy.data.objects['proportions'].pose.bones['ValveBiped.Bip01_L_Foot'].constraints 18 | objbone5 = bpy.data.objects['proportions'].pose.bones['ValveBiped.Bip01_L_Toe0'].constraints 19 | 20 | objbone6 = bpy.data.objects['proportions'].pose.bones['ValveBiped.Bip01_R_Thigh'].constraints 21 | objbone7 = bpy.data.objects['proportions'].pose.bones['ValveBiped.Bip01_R_Calf'].constraints 22 | objbone8 = bpy.data.objects['proportions'].pose.bones['ValveBiped.Bip01_R_Foot'].constraints 23 | objbone9 = bpy.data.objects['proportions'].pose.bones['ValveBiped.Bip01_R_Toe0'].constraints 24 | 25 | objbone10 = bpy.data.objects['proportions'].pose.bones['ValveBiped.Bip01_Spine'].constraints 26 | objbone11 = bpy.data.objects['proportions'].pose.bones['ValveBiped.Bip01_Spine1'].constraints 27 | objbone12 = bpy.data.objects['proportions'].pose.bones['ValveBiped.Bip01_Spine2'].constraints 28 | objbone13 = bpy.data.objects['proportions'].pose.bones['ValveBiped.Bip01_Spine4'].constraints 29 | objbone14 = bpy.data.objects['proportions'].pose.bones['ValveBiped.Bip01_Neck1'].constraints 30 | objbone15 = bpy.data.objects['proportions'].pose.bones['ValveBiped.Bip01_Head1'].constraints 31 | 32 | objbone16 = bpy.data.objects['proportions'].pose.bones['ValveBiped.Bip01_L_Clavicle'].constraints 33 | objbone17 = bpy.data.objects['proportions'].pose.bones['ValveBiped.Bip01_L_UpperArm'].constraints 34 | objbone18 = bpy.data.objects['proportions'].pose.bones['ValveBiped.Bip01_L_Forearm'].constraints 35 | 36 | objbone19 = bpy.data.objects['proportions'].pose.bones['ValveBiped.Bip01_R_Clavicle'].constraints 37 | objbone20 = bpy.data.objects['proportions'].pose.bones['ValveBiped.Bip01_R_UpperArm'].constraints 38 | objbone21 = bpy.data.objects['proportions'].pose.bones['ValveBiped.Bip01_R_Forearm'].constraints 39 | 40 | objbone22 = bpy.data.objects['proportions'].pose.bones['ValveBiped.Bip01_L_Hand'].constraints 41 | objbone23 = bpy.data.objects['proportions'].pose.bones['ValveBiped.Bip01_L_Finger0'].constraints 42 | objbone24 = bpy.data.objects['proportions'].pose.bones['ValveBiped.Bip01_L_Finger01'].constraints 43 | objbone25 = bpy.data.objects['proportions'].pose.bones['ValveBiped.Bip01_L_Finger02'].constraints 44 | objbone26 = bpy.data.objects['proportions'].pose.bones['ValveBiped.Bip01_L_Finger1'].constraints 45 | objbone27 = bpy.data.objects['proportions'].pose.bones['ValveBiped.Bip01_L_Finger11'].constraints 46 | objbone28 = bpy.data.objects['proportions'].pose.bones['ValveBiped.Bip01_L_Finger12'].constraints 47 | objbone29 = bpy.data.objects['proportions'].pose.bones['ValveBiped.Bip01_L_Finger2'].constraints 48 | objbone30 = bpy.data.objects['proportions'].pose.bones['ValveBiped.Bip01_L_Finger21'].constraints 49 | objbone31 = bpy.data.objects['proportions'].pose.bones['ValveBiped.Bip01_L_Finger22'].constraints 50 | objbone32 = bpy.data.objects['proportions'].pose.bones['ValveBiped.Bip01_L_Finger3'].constraints 51 | objbone33 = bpy.data.objects['proportions'].pose.bones['ValveBiped.Bip01_L_Finger31'].constraints 52 | objbone34 = bpy.data.objects['proportions'].pose.bones['ValveBiped.Bip01_L_Finger32'].constraints 53 | objbone35 = bpy.data.objects['proportions'].pose.bones['ValveBiped.Bip01_L_Finger4'].constraints 54 | objbone36 = bpy.data.objects['proportions'].pose.bones['ValveBiped.Bip01_L_Finger41'].constraints 55 | objbone37 = bpy.data.objects['proportions'].pose.bones['ValveBiped.Bip01_L_Finger42'].constraints 56 | 57 | objbone38 = bpy.data.objects['proportions'].pose.bones['ValveBiped.Bip01_R_Hand'].constraints 58 | objbone39 = bpy.data.objects['proportions'].pose.bones['ValveBiped.Bip01_R_Finger0'].constraints 59 | objbone40 = bpy.data.objects['proportions'].pose.bones['ValveBiped.Bip01_R_Finger01'].constraints 60 | objbone41 = bpy.data.objects['proportions'].pose.bones['ValveBiped.Bip01_R_Finger02'].constraints 61 | objbone42 = bpy.data.objects['proportions'].pose.bones['ValveBiped.Bip01_R_Finger1'].constraints 62 | objbone43 = bpy.data.objects['proportions'].pose.bones['ValveBiped.Bip01_R_Finger11'].constraints 63 | objbone44 = bpy.data.objects['proportions'].pose.bones['ValveBiped.Bip01_R_Finger12'].constraints 64 | objbone45 = bpy.data.objects['proportions'].pose.bones['ValveBiped.Bip01_R_Finger2'].constraints 65 | objbone46 = bpy.data.objects['proportions'].pose.bones['ValveBiped.Bip01_R_Finger21'].constraints 66 | objbone47 = bpy.data.objects['proportions'].pose.bones['ValveBiped.Bip01_R_Finger22'].constraints 67 | objbone48 = bpy.data.objects['proportions'].pose.bones['ValveBiped.Bip01_R_Finger3'].constraints 68 | objbone49 = bpy.data.objects['proportions'].pose.bones['ValveBiped.Bip01_R_Finger31'].constraints 69 | objbone50 = bpy.data.objects['proportions'].pose.bones['ValveBiped.Bip01_R_Finger32'].constraints 70 | objbone51 = bpy.data.objects['proportions'].pose.bones['ValveBiped.Bip01_R_Finger4'].constraints 71 | objbone52 = bpy.data.objects['proportions'].pose.bones['ValveBiped.Bip01_R_Finger41'].constraints 72 | objbone53 = bpy.data.objects['proportions'].pose.bones['ValveBiped.Bip01_R_Finger42'].constraints 73 | 74 | if armature.pose.bones.get('ValveBiped.Bip01_Pelvis') is not None: 75 | objbone.new('COPY_LOCATION') 76 | objbone['Copy Location'].target = armature 77 | objbone['Copy Location'].subtarget = 'ValveBiped.Bip01_Pelvis' 78 | 79 | if armature.pose.bones.get('ValveBiped.Bip01_L_Thigh') is not None: 80 | objbone2.new('COPY_LOCATION') 81 | objbone2['Copy Location'].target = armature 82 | objbone2['Copy Location'].subtarget = 'ValveBiped.Bip01_L_Thigh' 83 | if armature.pose.bones.get('ValveBiped.Bip01_L_Calf') is not None: 84 | objbone2.new('LOCKED_TRACK') 85 | objbone2['Locked Track'].target = armature 86 | objbone2['Locked Track'].subtarget = 'ValveBiped.Bip01_L_Calf' 87 | objbone2['Locked Track'].track_axis = 'TRACK_X' 88 | objbone2['Locked Track'].lock_axis = 'LOCK_Z' 89 | objbone2.new('LOCKED_TRACK') 90 | objbone2['Locked Track.001'].target = armature 91 | objbone2['Locked Track.001'].subtarget = 'ValveBiped.Bip01_L_Calf' 92 | objbone2['Locked Track.001'].track_axis = 'TRACK_X' 93 | objbone2['Locked Track.001'].lock_axis = 'LOCK_Y' 94 | 95 | if armature.pose.bones.get('ValveBiped.Bip01_L_Calf') is not None: 96 | objbone3.new('COPY_LOCATION') 97 | objbone3['Copy Location'].target = armature 98 | objbone3['Copy Location'].subtarget = 'ValveBiped.Bip01_L_Calf' 99 | if armature.pose.bones.get('ValveBiped.Bip01_L_Foot') is not None: 100 | objbone3.new('LOCKED_TRACK') 101 | objbone3['Locked Track'].target = armature 102 | objbone3['Locked Track'].subtarget = 'ValveBiped.Bip01_L_Foot' 103 | objbone3['Locked Track'].track_axis = 'TRACK_X' 104 | objbone3['Locked Track'].lock_axis = 'LOCK_Z' 105 | objbone3.new('LOCKED_TRACK') 106 | objbone3['Locked Track.001'].target = armature 107 | objbone3['Locked Track.001'].subtarget = 'ValveBiped.Bip01_L_Foot' 108 | objbone3['Locked Track.001'].track_axis = 'TRACK_X' 109 | objbone3['Locked Track.001'].lock_axis = 'LOCK_Y' 110 | 111 | if armature.pose.bones.get('ValveBiped.Bip01_L_Foot') is not None: 112 | objbone4.new('COPY_LOCATION') 113 | objbone4['Copy Location'].target = armature 114 | objbone4['Copy Location'].subtarget = 'ValveBiped.Bip01_L_Foot' 115 | 116 | if armature.pose.bones.get('ValveBiped.Bip01_L_Toe0') is not None: 117 | objbone5.new('COPY_LOCATION') 118 | objbone5['Copy Location'].target = armature 119 | objbone5['Copy Location'].subtarget = 'ValveBiped.Bip01_L_Toe0' 120 | 121 | if armature.pose.bones.get('ValveBiped.Bip01_R_Thigh') is not None: 122 | objbone6.new('COPY_LOCATION') 123 | objbone6['Copy Location'].target = armature 124 | objbone6['Copy Location'].subtarget = 'ValveBiped.Bip01_R_Thigh' 125 | if armature.pose.bones.get('ValveBiped.Bip01_R_Calf') is not None: 126 | objbone6.new('LOCKED_TRACK') 127 | objbone6['Locked Track'].target = armature 128 | objbone6['Locked Track'].subtarget = 'ValveBiped.Bip01_R_Calf' 129 | objbone6['Locked Track'].track_axis = 'TRACK_X' 130 | objbone6['Locked Track'].lock_axis = 'LOCK_Z' 131 | objbone6.new('LOCKED_TRACK') 132 | objbone6['Locked Track.001'].target = armature 133 | objbone6['Locked Track.001'].subtarget = 'ValveBiped.Bip01_R_Calf' 134 | objbone6['Locked Track.001'].track_axis = 'TRACK_X' 135 | objbone6['Locked Track.001'].lock_axis = 'LOCK_Y' 136 | 137 | if armature.pose.bones.get('ValveBiped.Bip01_R_Calf') is not None: 138 | objbone7.new('COPY_LOCATION') 139 | objbone7['Copy Location'].target = armature 140 | objbone7['Copy Location'].subtarget = 'ValveBiped.Bip01_R_Calf' 141 | if armature.pose.bones.get('ValveBiped.Bip01_R_Foot') is not None: 142 | objbone7.new('LOCKED_TRACK') 143 | objbone7['Locked Track'].target = armature 144 | objbone7['Locked Track'].subtarget = 'ValveBiped.Bip01_R_Foot' 145 | objbone7['Locked Track'].track_axis = 'TRACK_X' 146 | objbone7['Locked Track'].lock_axis = 'LOCK_Z' 147 | objbone7.new('LOCKED_TRACK') 148 | objbone7['Locked Track.001'].target = armature 149 | objbone7['Locked Track.001'].subtarget = 'ValveBiped.Bip01_R_Foot' 150 | objbone7['Locked Track.001'].track_axis = 'TRACK_X' 151 | objbone7['Locked Track.001'].lock_axis = 'LOCK_Y' 152 | 153 | if armature.pose.bones.get('ValveBiped.Bip01_R_Foot') is not None: 154 | objbone8.new('COPY_LOCATION') 155 | objbone8['Copy Location'].target = armature 156 | objbone8['Copy Location'].subtarget = 'ValveBiped.Bip01_R_Foot' 157 | 158 | if armature.pose.bones.get('ValveBiped.Bip01_R_Toe0') is not None: 159 | objbone9.new('COPY_LOCATION') 160 | objbone9['Copy Location'].target = armature 161 | objbone9['Copy Location'].subtarget = 'ValveBiped.Bip01_R_Toe0' 162 | 163 | if armature.pose.bones.get('ValveBiped.Bip01_Spine') is not None: 164 | objbone10.new('COPY_LOCATION') 165 | objbone10['Copy Location'].target = armature 166 | objbone10['Copy Location'].subtarget = 'ValveBiped.Bip01_Spine' 167 | 168 | if armature.pose.bones.get('ValveBiped.Bip01_Spine1') is not None: 169 | objbone11.new('COPY_LOCATION') 170 | objbone11['Copy Location'].target = armature 171 | objbone11['Copy Location'].subtarget = 'ValveBiped.Bip01_Spine1' 172 | 173 | if armature.pose.bones.get('ValveBiped.Bip01_Spine2') is not None: 174 | objbone12.new('COPY_LOCATION') 175 | objbone12['Copy Location'].target = armature 176 | objbone12['Copy Location'].subtarget = 'ValveBiped.Bip01_Spine2' 177 | 178 | if armature.pose.bones.get('ValveBiped.Bip01_Spine4') is not None: 179 | objbone13.new('COPY_LOCATION') 180 | objbone13['Copy Location'].target = armature 181 | objbone13['Copy Location'].subtarget = 'ValveBiped.Bip01_Spine4' 182 | 183 | if armature.pose.bones.get('ValveBiped.Bip01_Neck1') is not None: 184 | objbone14.new('COPY_LOCATION') 185 | objbone14['Copy Location'].target = armature 186 | objbone14['Copy Location'].subtarget = 'ValveBiped.Bip01_Neck1' 187 | 188 | if armature.pose.bones.get('ValveBiped.Bip01_Head1') is not None: 189 | objbone15.new('COPY_LOCATION') 190 | objbone15['Copy Location'].target = armature 191 | objbone15['Copy Location'].subtarget = 'ValveBiped.Bip01_Head1' 192 | 193 | if armature.pose.bones.get('ValveBiped.Bip01_L_Clavicle') is not None: 194 | objbone16.new('COPY_LOCATION') 195 | objbone16['Copy Location'].target = armature 196 | objbone16['Copy Location'].subtarget = 'ValveBiped.Bip01_L_Clavicle' 197 | 198 | if armature.pose.bones.get('ValveBiped.Bip01_L_UpperArm') is not None: 199 | objbone17.new('COPY_LOCATION') 200 | objbone17['Copy Location'].target = armature 201 | objbone17['Copy Location'].subtarget = 'ValveBiped.Bip01_L_UpperArm' 202 | if armature.pose.bones.get('ValveBiped.Bip01_L_Forearm') is not None: 203 | objbone17.new('LOCKED_TRACK') 204 | objbone17['Locked Track'].target = armature 205 | objbone17['Locked Track'].subtarget = 'ValveBiped.Bip01_L_Forearm' 206 | objbone17['Locked Track'].track_axis = 'TRACK_X' 207 | objbone17['Locked Track'].lock_axis = 'LOCK_Z' 208 | objbone17.new('LOCKED_TRACK') 209 | objbone17['Locked Track.001'].target = armature 210 | objbone17['Locked Track.001'].subtarget = 'ValveBiped.Bip01_L_Forearm' 211 | objbone17['Locked Track.001'].track_axis = 'TRACK_X' 212 | objbone17['Locked Track.001'].lock_axis = 'LOCK_Y' 213 | 214 | if armature.pose.bones.get('ValveBiped.Bip01_L_Forearm') is not None: 215 | objbone18.new('COPY_LOCATION') 216 | objbone18['Copy Location'].target = armature 217 | objbone18['Copy Location'].subtarget = 'ValveBiped.Bip01_L_Forearm' 218 | if armature.pose.bones.get('ValveBiped.Bip01_L_Hand') is not None: 219 | objbone18.new('LOCKED_TRACK') 220 | objbone18['Locked Track'].target = armature 221 | objbone18['Locked Track'].subtarget = 'ValveBiped.Bip01_L_Hand' 222 | objbone18['Locked Track'].track_axis = 'TRACK_X' 223 | objbone18['Locked Track'].lock_axis = 'LOCK_Z' 224 | objbone18.new('LOCKED_TRACK') 225 | objbone18['Locked Track.001'].target = armature 226 | objbone18['Locked Track.001'].subtarget = 'ValveBiped.Bip01_L_Hand' 227 | objbone18['Locked Track.001'].track_axis = 'TRACK_X' 228 | objbone18['Locked Track.001'].lock_axis = 'LOCK_Y' 229 | 230 | if armature.pose.bones.get('ValveBiped.Bip01_R_Clavicle') is not None: 231 | objbone19.new('COPY_LOCATION') 232 | objbone19['Copy Location'].target = armature 233 | objbone19['Copy Location'].subtarget = 'ValveBiped.Bip01_R_Clavicle' 234 | 235 | if armature.pose.bones.get('ValveBiped.Bip01_R_UpperArm') is not None: 236 | objbone20.new('COPY_LOCATION') 237 | objbone20['Copy Location'].target = armature 238 | objbone20['Copy Location'].subtarget = 'ValveBiped.Bip01_R_UpperArm' 239 | if armature.pose.bones.get('ValveBiped.Bip01_R_Forearm') is not None: 240 | objbone20.new('LOCKED_TRACK') 241 | objbone20['Locked Track'].target = armature 242 | objbone20['Locked Track'].subtarget = 'ValveBiped.Bip01_R_Forearm' 243 | objbone20['Locked Track'].track_axis = 'TRACK_X' 244 | objbone20['Locked Track'].lock_axis = 'LOCK_Z' 245 | objbone20.new('LOCKED_TRACK') 246 | objbone20['Locked Track.001'].target = armature 247 | objbone20['Locked Track.001'].subtarget = 'ValveBiped.Bip01_R_Forearm' 248 | objbone20['Locked Track.001'].track_axis = 'TRACK_X' 249 | objbone20['Locked Track.001'].lock_axis = 'LOCK_Y' 250 | 251 | if armature.pose.bones.get('ValveBiped.Bip01_R_Forearm') is not None: 252 | objbone21.new('COPY_LOCATION') 253 | objbone21['Copy Location'].target = armature 254 | objbone21['Copy Location'].subtarget = 'ValveBiped.Bip01_R_Forearm' 255 | if armature.pose.bones.get('ValveBiped.Bip01_R_Hand') is not None: 256 | objbone21.new('LOCKED_TRACK') 257 | objbone21['Locked Track'].target = armature 258 | objbone21['Locked Track'].subtarget = 'ValveBiped.Bip01_R_Hand' 259 | objbone21['Locked Track'].track_axis = 'TRACK_X' 260 | objbone21['Locked Track'].lock_axis = 'LOCK_Z' 261 | objbone21.new('LOCKED_TRACK') 262 | objbone21['Locked Track.001'].target = armature 263 | objbone21['Locked Track.001'].subtarget = 'ValveBiped.Bip01_R_Hand' 264 | objbone21['Locked Track.001'].track_axis = 'TRACK_X' 265 | objbone21['Locked Track.001'].lock_axis = 'LOCK_Y' 266 | 267 | if armature.pose.bones.get('ValveBiped.Bip01_L_Hand') is not None: 268 | objbone22.new('COPY_LOCATION') 269 | objbone22['Copy Location'].target = armature 270 | objbone22['Copy Location'].subtarget = 'ValveBiped.Bip01_L_Hand' 271 | 272 | if armature.pose.bones.get('ValveBiped.Bip01_L_Finger0') is not None: 273 | objbone23.new('COPY_LOCATION') 274 | objbone23['Copy Location'].target = armature 275 | objbone23['Copy Location'].subtarget = 'ValveBiped.Bip01_L_Finger0' 276 | if armature.pose.bones.get('ValveBiped.Bip01_L_Finger01') is not None: 277 | objbone23.new('LOCKED_TRACK') 278 | objbone23['Locked Track'].target = armature 279 | objbone23['Locked Track'].subtarget = 'ValveBiped.Bip01_L_Finger01' 280 | objbone23['Locked Track'].track_axis = 'TRACK_X' 281 | objbone23['Locked Track'].lock_axis = 'LOCK_Z' 282 | objbone23.new('LOCKED_TRACK') 283 | objbone23['Locked Track.001'].target = armature 284 | objbone23['Locked Track.001'].subtarget = 'ValveBiped.Bip01_L_Finger01' 285 | objbone23['Locked Track.001'].track_axis = 'TRACK_X' 286 | objbone23['Locked Track.001'].lock_axis = 'LOCK_Y' 287 | 288 | if armature.pose.bones.get('ValveBiped.Bip01_L_Finger01') is not None: 289 | objbone24.new('COPY_LOCATION') 290 | objbone24['Copy Location'].target = armature 291 | objbone24['Copy Location'].subtarget = 'ValveBiped.Bip01_L_Finger01' 292 | if armature.pose.bones.get('ValveBiped.Bip01_L_Finger02') is not None: 293 | objbone24.new('LOCKED_TRACK') 294 | objbone24['Locked Track'].target = armature 295 | objbone24['Locked Track'].subtarget = 'ValveBiped.Bip01_L_Finger02' 296 | objbone24['Locked Track'].track_axis = 'TRACK_X' 297 | objbone24['Locked Track'].lock_axis = 'LOCK_Z' 298 | objbone24.new('LOCKED_TRACK') 299 | objbone24['Locked Track.001'].target = armature 300 | objbone24['Locked Track.001'].subtarget = 'ValveBiped.Bip01_L_Finger02' 301 | objbone24['Locked Track.001'].track_axis = 'TRACK_X' 302 | objbone24['Locked Track.001'].lock_axis = 'LOCK_Y' 303 | 304 | if armature.pose.bones.get('ValveBiped.Bip01_L_Finger02') is not None: 305 | objbone25.new('COPY_LOCATION') 306 | objbone25['Copy Location'].target = armature 307 | objbone25['Copy Location'].subtarget = 'ValveBiped.Bip01_L_Finger02' 308 | 309 | if armature.pose.bones.get('ValveBiped.Bip01_L_Finger1') is not None: 310 | objbone26.new('COPY_LOCATION') 311 | objbone26['Copy Location'].target = armature 312 | objbone26['Copy Location'].subtarget = 'ValveBiped.Bip01_L_Finger1' 313 | if armature.pose.bones.get('ValveBiped.Bip01_L_Finger11') is not None: 314 | objbone26.new('LOCKED_TRACK') 315 | objbone26['Locked Track'].target = armature 316 | objbone26['Locked Track'].subtarget = 'ValveBiped.Bip01_L_Finger11' 317 | objbone26['Locked Track'].track_axis = 'TRACK_X' 318 | objbone26['Locked Track'].lock_axis = 'LOCK_Z' 319 | objbone26.new('LOCKED_TRACK') 320 | objbone26['Locked Track.001'].target = armature 321 | objbone26['Locked Track.001'].subtarget = 'ValveBiped.Bip01_L_Finger11' 322 | objbone26['Locked Track.001'].track_axis = 'TRACK_X' 323 | objbone26['Locked Track.001'].lock_axis = 'LOCK_Y' 324 | 325 | if armature.pose.bones.get('ValveBiped.Bip01_L_Finger11') is not None: 326 | objbone27.new('COPY_LOCATION') 327 | objbone27['Copy Location'].target = armature 328 | objbone27['Copy Location'].subtarget = 'ValveBiped.Bip01_L_Finger11' 329 | if armature.pose.bones.get('ValveBiped.Bip01_L_Finger12') is not None: 330 | objbone27.new('LOCKED_TRACK') 331 | objbone27['Locked Track'].target = armature 332 | objbone27['Locked Track'].subtarget = 'ValveBiped.Bip01_L_Finger12' 333 | objbone27['Locked Track'].track_axis = 'TRACK_X' 334 | objbone27['Locked Track'].lock_axis = 'LOCK_Z' 335 | objbone27.new('LOCKED_TRACK') 336 | objbone27['Locked Track.001'].target = armature 337 | objbone27['Locked Track.001'].subtarget = 'ValveBiped.Bip01_L_Finger12' 338 | objbone27['Locked Track.001'].track_axis = 'TRACK_X' 339 | objbone27['Locked Track.001'].lock_axis = 'LOCK_Y' 340 | 341 | if armature.pose.bones.get('ValveBiped.Bip01_L_Finger12') is not None: 342 | objbone28.new('COPY_LOCATION') 343 | objbone28['Copy Location'].target = armature 344 | objbone28['Copy Location'].subtarget = 'ValveBiped.Bip01_L_Finger12' 345 | 346 | if armature.pose.bones.get('ValveBiped.Bip01_L_Finger2') is not None: 347 | objbone29.new('COPY_LOCATION') 348 | objbone29['Copy Location'].target = armature 349 | objbone29['Copy Location'].subtarget = 'ValveBiped.Bip01_L_Finger2' 350 | if armature.pose.bones.get('ValveBiped.Bip01_L_Finger21') is not None: 351 | objbone29.new('LOCKED_TRACK') 352 | objbone29['Locked Track'].target = armature 353 | objbone29['Locked Track'].subtarget = 'ValveBiped.Bip01_L_Finger21' 354 | objbone29['Locked Track'].track_axis = 'TRACK_X' 355 | objbone29['Locked Track'].lock_axis = 'LOCK_Z' 356 | objbone29.new('LOCKED_TRACK') 357 | objbone29['Locked Track.001'].target = armature 358 | objbone29['Locked Track.001'].subtarget = 'ValveBiped.Bip01_L_Finger21' 359 | objbone29['Locked Track.001'].track_axis = 'TRACK_X' 360 | objbone29['Locked Track.001'].lock_axis = 'LOCK_Y' 361 | 362 | if armature.pose.bones.get('ValveBiped.Bip01_L_Finger21') is not None: 363 | objbone30.new('COPY_LOCATION') 364 | objbone30['Copy Location'].target = armature 365 | objbone30['Copy Location'].subtarget = 'ValveBiped.Bip01_L_Finger21' 366 | if armature.pose.bones.get('ValveBiped.Bip01_L_Finger22') is not None: 367 | objbone30.new('LOCKED_TRACK') 368 | objbone30['Locked Track'].target = armature 369 | objbone30['Locked Track'].subtarget = 'ValveBiped.Bip01_L_Finger22' 370 | objbone30['Locked Track'].track_axis = 'TRACK_X' 371 | objbone30['Locked Track'].lock_axis = 'LOCK_Z' 372 | objbone30.new('LOCKED_TRACK') 373 | objbone30['Locked Track.001'].target = armature 374 | objbone30['Locked Track.001'].subtarget = 'ValveBiped.Bip01_L_Finger22' 375 | objbone30['Locked Track.001'].track_axis = 'TRACK_X' 376 | objbone30['Locked Track.001'].lock_axis = 'LOCK_Y' 377 | 378 | if armature.pose.bones.get('ValveBiped.Bip01_L_Finger22') is not None: 379 | objbone31.new('COPY_LOCATION') 380 | objbone31['Copy Location'].target = armature 381 | objbone31['Copy Location'].subtarget = 'ValveBiped.Bip01_L_Finger22' 382 | 383 | if armature.pose.bones.get('ValveBiped.Bip01_L_Finger3') is not None: 384 | objbone32.new('COPY_LOCATION') 385 | objbone32['Copy Location'].target = armature 386 | objbone32['Copy Location'].subtarget = 'ValveBiped.Bip01_L_Finger3' 387 | if armature.pose.bones.get('ValveBiped.Bip01_L_Finger31') is not None: 388 | objbone32.new('LOCKED_TRACK') 389 | objbone32['Locked Track'].target = armature 390 | objbone32['Locked Track'].subtarget = 'ValveBiped.Bip01_L_Finger31' 391 | objbone32['Locked Track'].track_axis = 'TRACK_X' 392 | objbone32['Locked Track'].lock_axis = 'LOCK_Z' 393 | objbone32.new('LOCKED_TRACK') 394 | objbone32['Locked Track.001'].target = armature 395 | objbone32['Locked Track.001'].subtarget = 'ValveBiped.Bip01_L_Finger31' 396 | objbone32['Locked Track.001'].track_axis = 'TRACK_X' 397 | objbone32['Locked Track.001'].lock_axis = 'LOCK_Y' 398 | 399 | if armature.pose.bones.get('ValveBiped.Bip01_L_Finger31') is not None: 400 | objbone33.new('COPY_LOCATION') 401 | objbone33['Copy Location'].target = armature 402 | objbone33['Copy Location'].subtarget = 'ValveBiped.Bip01_L_Finger31' 403 | if armature.pose.bones.get('ValveBiped.Bip01_L_Finger32') is not None: 404 | objbone33.new('LOCKED_TRACK') 405 | objbone33['Locked Track'].target = armature 406 | objbone33['Locked Track'].subtarget = 'ValveBiped.Bip01_L_Finger32' 407 | objbone33['Locked Track'].track_axis = 'TRACK_X' 408 | objbone33['Locked Track'].lock_axis = 'LOCK_Z' 409 | objbone33.new('LOCKED_TRACK') 410 | objbone33['Locked Track.001'].target = armature 411 | objbone33['Locked Track.001'].subtarget = 'ValveBiped.Bip01_L_Finger32' 412 | objbone33['Locked Track.001'].track_axis = 'TRACK_X' 413 | objbone33['Locked Track.001'].lock_axis = 'LOCK_Y' 414 | 415 | if armature.pose.bones.get('ValveBiped.Bip01_L_Finger32') is not None: 416 | objbone34.new('COPY_LOCATION') 417 | objbone34['Copy Location'].target = armature 418 | objbone34['Copy Location'].subtarget = 'ValveBiped.Bip01_L_Finger32' 419 | 420 | if armature.pose.bones.get('ValveBiped.Bip01_L_Finger4') is not None: 421 | objbone35.new('COPY_LOCATION') 422 | objbone35['Copy Location'].target = armature 423 | objbone35['Copy Location'].subtarget = 'ValveBiped.Bip01_L_Finger4' 424 | if armature.pose.bones.get('ValveBiped.Bip01_L_Finger41') is not None: 425 | objbone35.new('LOCKED_TRACK') 426 | objbone35['Locked Track'].target = armature 427 | objbone35['Locked Track'].subtarget = 'ValveBiped.Bip01_L_Finger41' 428 | objbone35['Locked Track'].track_axis = 'TRACK_X' 429 | objbone35['Locked Track'].lock_axis = 'LOCK_Z' 430 | objbone35.new('LOCKED_TRACK') 431 | objbone35['Locked Track.001'].target = armature 432 | objbone35['Locked Track.001'].subtarget = 'ValveBiped.Bip01_L_Finger41' 433 | objbone35['Locked Track.001'].track_axis = 'TRACK_X' 434 | objbone35['Locked Track.001'].lock_axis = 'LOCK_Y' 435 | 436 | if armature.pose.bones.get('ValveBiped.Bip01_L_Finger41') is not None: 437 | objbone36.new('COPY_LOCATION') 438 | objbone36['Copy Location'].target = armature 439 | objbone36['Copy Location'].subtarget = 'ValveBiped.Bip01_L_Finger41' 440 | if armature.pose.bones.get('ValveBiped.Bip01_L_Finger42') is not None: 441 | objbone36.new('LOCKED_TRACK') 442 | objbone36['Locked Track'].target = armature 443 | objbone36['Locked Track'].subtarget = 'ValveBiped.Bip01_L_Finger42' 444 | objbone36['Locked Track'].track_axis = 'TRACK_X' 445 | objbone36['Locked Track'].lock_axis = 'LOCK_Z' 446 | objbone36.new('LOCKED_TRACK') 447 | objbone36['Locked Track.001'].target = armature 448 | objbone36['Locked Track.001'].subtarget = 'ValveBiped.Bip01_L_Finger42' 449 | objbone36['Locked Track.001'].track_axis = 'TRACK_X' 450 | objbone36['Locked Track.001'].lock_axis = 'LOCK_Y' 451 | 452 | if armature.pose.bones.get('ValveBiped.Bip01_L_Finger42') is not None: 453 | objbone37.new('COPY_LOCATION') 454 | objbone37['Copy Location'].target = armature 455 | objbone37['Copy Location'].subtarget = 'ValveBiped.Bip01_L_Finger42' 456 | 457 | if armature.pose.bones.get('ValveBiped.Bip01_R_Hand') is not None: 458 | objbone38.new('COPY_LOCATION') 459 | objbone38['Copy Location'].target = armature 460 | objbone38['Copy Location'].subtarget = 'ValveBiped.Bip01_R_Hand' 461 | 462 | if armature.pose.bones.get('ValveBiped.Bip01_R_Finger0') is not None: 463 | objbone39.new('COPY_LOCATION') 464 | objbone39['Copy Location'].target = armature 465 | objbone39['Copy Location'].subtarget = 'ValveBiped.Bip01_R_Finger0' 466 | if armature.pose.bones.get('ValveBiped.Bip01_R_Finger01') is not None: 467 | objbone39.new('LOCKED_TRACK') 468 | objbone39['Locked Track'].target = armature 469 | objbone39['Locked Track'].subtarget = 'ValveBiped.Bip01_R_Finger01' 470 | objbone39['Locked Track'].track_axis = 'TRACK_X' 471 | objbone39['Locked Track'].lock_axis = 'LOCK_Z' 472 | objbone39.new('LOCKED_TRACK') 473 | objbone39['Locked Track.001'].target = armature 474 | objbone39['Locked Track.001'].subtarget = 'ValveBiped.Bip01_R_Finger01' 475 | objbone39['Locked Track.001'].track_axis = 'TRACK_X' 476 | objbone39['Locked Track.001'].lock_axis = 'LOCK_Y' 477 | 478 | if armature.pose.bones.get('ValveBiped.Bip01_R_Finger01') is not None: 479 | objbone40.new('COPY_LOCATION') 480 | objbone40['Copy Location'].target = armature 481 | objbone40['Copy Location'].subtarget = 'ValveBiped.Bip01_R_Finger01' 482 | if armature.pose.bones.get('ValveBiped.Bip01_R_Finger02') is not None: 483 | objbone40.new('LOCKED_TRACK') 484 | objbone40['Locked Track'].target = armature 485 | objbone40['Locked Track'].subtarget = 'ValveBiped.Bip01_R_Finger02' 486 | objbone40['Locked Track'].track_axis = 'TRACK_X' 487 | objbone40['Locked Track'].lock_axis = 'LOCK_Z' 488 | objbone40.new('LOCKED_TRACK') 489 | objbone40['Locked Track.001'].target = armature 490 | objbone40['Locked Track.001'].subtarget = 'ValveBiped.Bip01_R_Finger02' 491 | objbone40['Locked Track.001'].track_axis = 'TRACK_X' 492 | objbone40['Locked Track.001'].lock_axis = 'LOCK_Y' 493 | 494 | if armature.pose.bones.get('ValveBiped.Bip01_R_Finger02') is not None: 495 | objbone41.new('COPY_LOCATION') 496 | objbone41['Copy Location'].target = armature 497 | objbone41['Copy Location'].subtarget = 'ValveBiped.Bip01_R_Finger02' 498 | 499 | if armature.pose.bones.get('ValveBiped.Bip01_R_Finger1') is not None: 500 | objbone42.new('COPY_LOCATION') 501 | objbone42['Copy Location'].target = armature 502 | objbone42['Copy Location'].subtarget = 'ValveBiped.Bip01_R_Finger1' 503 | if armature.pose.bones.get('ValveBiped.Bip01_R_Finger11') is not None: 504 | objbone42.new('LOCKED_TRACK') 505 | objbone42['Locked Track'].target = armature 506 | objbone42['Locked Track'].subtarget = 'ValveBiped.Bip01_R_Finger11' 507 | objbone42['Locked Track'].track_axis = 'TRACK_X' 508 | objbone42['Locked Track'].lock_axis = 'LOCK_Z' 509 | objbone42.new('LOCKED_TRACK') 510 | objbone42['Locked Track.001'].target = armature 511 | objbone42['Locked Track.001'].subtarget = 'ValveBiped.Bip01_R_Finger11' 512 | objbone42['Locked Track.001'].track_axis = 'TRACK_X' 513 | objbone42['Locked Track.001'].lock_axis = 'LOCK_Y' 514 | 515 | if armature.pose.bones.get('ValveBiped.Bip01_R_Finger11') is not None: 516 | objbone43.new('COPY_LOCATION') 517 | objbone43['Copy Location'].target = armature 518 | objbone43['Copy Location'].subtarget = 'ValveBiped.Bip01_R_Finger11' 519 | if armature.pose.bones.get('ValveBiped.Bip01_R_Finger12') is not None: 520 | objbone43.new('LOCKED_TRACK') 521 | objbone43['Locked Track'].target = armature 522 | objbone43['Locked Track'].subtarget = 'ValveBiped.Bip01_R_Finger12' 523 | objbone43['Locked Track'].track_axis = 'TRACK_X' 524 | objbone43['Locked Track'].lock_axis = 'LOCK_Z' 525 | objbone43.new('LOCKED_TRACK') 526 | objbone43['Locked Track.001'].target = armature 527 | objbone43['Locked Track.001'].subtarget = 'ValveBiped.Bip01_R_Finger12' 528 | objbone43['Locked Track.001'].track_axis = 'TRACK_X' 529 | objbone43['Locked Track.001'].lock_axis = 'LOCK_Y' 530 | 531 | if armature.pose.bones.get('ValveBiped.Bip01_R_Finger12') is not None: 532 | objbone44.new('COPY_LOCATION') 533 | objbone44['Copy Location'].target = armature 534 | objbone44['Copy Location'].subtarget = 'ValveBiped.Bip01_R_Finger12' 535 | 536 | if armature.pose.bones.get('ValveBiped.Bip01_R_Finger2') is not None: 537 | objbone45.new('COPY_LOCATION') 538 | objbone45['Copy Location'].target = armature 539 | objbone45['Copy Location'].subtarget = 'ValveBiped.Bip01_R_Finger2' 540 | if armature.pose.bones.get('ValveBiped.Bip01_R_Finger21') is not None: 541 | objbone45.new('LOCKED_TRACK') 542 | objbone45['Locked Track'].target = armature 543 | objbone45['Locked Track'].subtarget = 'ValveBiped.Bip01_R_Finger21' 544 | objbone45['Locked Track'].track_axis = 'TRACK_X' 545 | objbone45['Locked Track'].lock_axis = 'LOCK_Z' 546 | objbone45.new('LOCKED_TRACK') 547 | objbone45['Locked Track.001'].target = armature 548 | objbone45['Locked Track.001'].subtarget = 'ValveBiped.Bip01_R_Finger21' 549 | objbone45['Locked Track.001'].track_axis = 'TRACK_X' 550 | objbone45['Locked Track.001'].lock_axis = 'LOCK_Y' 551 | 552 | if armature.pose.bones.get('ValveBiped.Bip01_R_Finger21') is not None: 553 | objbone46.new('COPY_LOCATION') 554 | objbone46['Copy Location'].target = armature 555 | objbone46['Copy Location'].subtarget = 'ValveBiped.Bip01_R_Finger21' 556 | if armature.pose.bones.get('ValveBiped.Bip01_R_Finger22') is not None: 557 | objbone46.new('LOCKED_TRACK') 558 | objbone46['Locked Track'].target = armature 559 | objbone46['Locked Track'].subtarget = 'ValveBiped.Bip01_R_Finger22' 560 | objbone46['Locked Track'].track_axis = 'TRACK_X' 561 | objbone46['Locked Track'].lock_axis = 'LOCK_Z' 562 | objbone46.new('LOCKED_TRACK') 563 | objbone46['Locked Track.001'].target = armature 564 | objbone46['Locked Track.001'].subtarget = 'ValveBiped.Bip01_R_Finger22' 565 | objbone46['Locked Track.001'].track_axis = 'TRACK_X' 566 | objbone46['Locked Track.001'].lock_axis = 'LOCK_Y' 567 | 568 | if armature.pose.bones.get('ValveBiped.Bip01_R_Finger22') is not None: 569 | objbone47.new('COPY_LOCATION') 570 | objbone47['Copy Location'].target = armature 571 | objbone47['Copy Location'].subtarget = 'ValveBiped.Bip01_R_Finger22' 572 | 573 | if armature.pose.bones.get('ValveBiped.Bip01_R_Finger3') is not None: 574 | objbone48.new('COPY_LOCATION') 575 | objbone48['Copy Location'].target = armature 576 | objbone48['Copy Location'].subtarget = 'ValveBiped.Bip01_R_Finger3' 577 | if armature.pose.bones.get('ValveBiped.Bip01_R_Finger31') is not None: 578 | objbone48.new('LOCKED_TRACK') 579 | objbone48['Locked Track'].target = armature 580 | objbone48['Locked Track'].subtarget = 'ValveBiped.Bip01_R_Finger31' 581 | objbone48['Locked Track'].track_axis = 'TRACK_X' 582 | objbone48['Locked Track'].lock_axis = 'LOCK_Z' 583 | objbone48.new('LOCKED_TRACK') 584 | objbone48['Locked Track.001'].target = armature 585 | objbone48['Locked Track.001'].subtarget = 'ValveBiped.Bip01_R_Finger31' 586 | objbone48['Locked Track.001'].track_axis = 'TRACK_X' 587 | objbone48['Locked Track.001'].lock_axis = 'LOCK_Y' 588 | 589 | if armature.pose.bones.get('ValveBiped.Bip01_R_Finger31') is not None: 590 | objbone49.new('COPY_LOCATION') 591 | objbone49['Copy Location'].target = armature 592 | objbone49['Copy Location'].subtarget = 'ValveBiped.Bip01_R_Finger31' 593 | if armature.pose.bones.get('ValveBiped.Bip01_R_Finger32') is not None: 594 | objbone49.new('LOCKED_TRACK') 595 | objbone49['Locked Track'].target = armature 596 | objbone49['Locked Track'].subtarget = 'ValveBiped.Bip01_R_Finger32' 597 | objbone49['Locked Track'].track_axis = 'TRACK_X' 598 | objbone49['Locked Track'].lock_axis = 'LOCK_Z' 599 | objbone49.new('LOCKED_TRACK') 600 | objbone49['Locked Track.001'].target = armature 601 | objbone49['Locked Track.001'].subtarget = 'ValveBiped.Bip01_R_Finger32' 602 | objbone49['Locked Track.001'].track_axis = 'TRACK_X' 603 | objbone49['Locked Track.001'].lock_axis = 'LOCK_Y' 604 | 605 | if armature.pose.bones.get('ValveBiped.Bip01_R_Finger32') is not None: 606 | objbone50.new('COPY_LOCATION') 607 | objbone50['Copy Location'].target = armature 608 | objbone50['Copy Location'].subtarget = 'ValveBiped.Bip01_R_Finger32' 609 | 610 | if armature.pose.bones.get('ValveBiped.Bip01_R_Finger4') is not None: 611 | objbone51.new('COPY_LOCATION') 612 | objbone51['Copy Location'].target = armature 613 | objbone51['Copy Location'].subtarget = 'ValveBiped.Bip01_R_Finger4' 614 | if armature.pose.bones.get('ValveBiped.Bip01_R_Finger41') is not None: 615 | objbone51.new('LOCKED_TRACK') 616 | objbone51['Locked Track'].target = armature 617 | objbone51['Locked Track'].subtarget = 'ValveBiped.Bip01_R_Finger41' 618 | objbone51['Locked Track'].track_axis = 'TRACK_X' 619 | objbone51['Locked Track'].lock_axis = 'LOCK_Z' 620 | objbone51.new('LOCKED_TRACK') 621 | objbone51['Locked Track.001'].target = armature 622 | objbone51['Locked Track.001'].subtarget = 'ValveBiped.Bip01_R_Finger41' 623 | objbone51['Locked Track.001'].track_axis = 'TRACK_X' 624 | objbone51['Locked Track.001'].lock_axis = 'LOCK_Y' 625 | 626 | if armature.pose.bones.get('ValveBiped.Bip01_R_Finger41') is not None: 627 | objbone52.new('COPY_LOCATION') 628 | objbone52['Copy Location'].target = armature 629 | objbone52['Copy Location'].subtarget = 'ValveBiped.Bip01_R_Finger41' 630 | if armature.pose.bones.get('ValveBiped.Bip01_R_Finger42') is not None: 631 | objbone52.new('LOCKED_TRACK') 632 | objbone52['Locked Track'].target = armature 633 | objbone52['Locked Track'].subtarget = 'ValveBiped.Bip01_R_Finger42' 634 | objbone52['Locked Track'].track_axis = 'TRACK_X' 635 | objbone52['Locked Track'].lock_axis = 'LOCK_Z' 636 | objbone52.new('LOCKED_TRACK') 637 | objbone52['Locked Track.001'].target = armature 638 | objbone52['Locked Track.001'].subtarget = 'ValveBiped.Bip01_R_Finger42' 639 | objbone52['Locked Track.001'].track_axis = 'TRACK_X' 640 | objbone52['Locked Track.001'].lock_axis = 'LOCK_Y' 641 | 642 | if armature.pose.bones.get('ValveBiped.Bip01_R_Finger42') is not None: 643 | objbone53.new('COPY_LOCATION') 644 | objbone53['Copy Location'].target = armature 645 | objbone53['Copy Location'].subtarget = 'ValveBiped.Bip01_R_Finger42' -------------------------------------------------------------------------------- /Proportion_Trick/scripts/2.7/proportion_trick2.py: -------------------------------------------------------------------------------- 1 | #Proportion Trick script by Β L Λ Ζ Ξ 2 | #Blender version: 2.79 3 | #Merge non-ValveBiped bones from imported skeleton to proportion. 4 | #Video (2.79): https://www.youtube.com/watch?v=MSWirIyobb4 5 | #Video (2.8+): https://www.youtube.com/watch?v=n9lmxpjSv0I 6 | 7 | import bpy 8 | 9 | arm = bpy.data.objects['gg'] 10 | arm2 = bpy.data.objects['proportions'] 11 | 12 | bpy.ops.object.mode_set(mode='OBJECT') 13 | bpy.ops.object.duplicate() 14 | bpy.ops.object.mode_set(mode='EDIT') 15 | bpy.ops.armature.select_all(action='DESELECT') 16 | 17 | valvebipeds = [ 18 | 'ValveBiped.Bip01_Pelvis', 19 | 'ValveBiped.Bip01_Spine', 20 | 'ValveBiped.Bip01_Spine1', 21 | 'ValveBiped.Bip01_Spine2', 22 | 'ValveBiped.Bip01_Spine4', 23 | 'ValveBiped.Bip01_Neck1', 24 | 'ValveBiped.Bip01_Head1', 25 | 'ValveBiped.Bip01_R_Clavicle', 26 | 'ValveBiped.Bip01_R_UpperArm', 27 | 'ValveBiped.Bip01_R_Forearm', 28 | 'ValveBiped.Bip01_R_Hand', 29 | 'ValveBiped.Bip01_R_Finger0', 30 | 'ValveBiped.Bip01_R_Finger01', 31 | 'ValveBiped.Bip01_R_Finger02', 32 | 'ValveBiped.Bip01_R_Finger1', 33 | 'ValveBiped.Bip01_R_Finger11', 34 | 'ValveBiped.Bip01_R_Finger12', 35 | 'ValveBiped.Bip01_R_Finger2', 36 | 'ValveBiped.Bip01_R_Finger21', 37 | 'ValveBiped.Bip01_R_Finger22', 38 | 'ValveBiped.Bip01_R_Finger3', 39 | 'ValveBiped.Bip01_R_Finger31', 40 | 'ValveBiped.Bip01_R_Finger32', 41 | 'ValveBiped.Bip01_R_Finger4', 42 | 'ValveBiped.Bip01_R_Finger41', 43 | 'ValveBiped.Bip01_R_Finger42', 44 | 'ValveBiped.Bip01_L_Clavicle', 45 | 'ValveBiped.Bip01_L_UpperArm', 46 | 'ValveBiped.Bip01_L_Forearm', 47 | 'ValveBiped.Bip01_L_Hand', 48 | 'ValveBiped.Bip01_L_Finger0', 49 | 'ValveBiped.Bip01_L_Finger01', 50 | 'ValveBiped.Bip01_L_Finger02', 51 | 'ValveBiped.Bip01_L_Finger1', 52 | 'ValveBiped.Bip01_L_Finger11', 53 | 'ValveBiped.Bip01_L_Finger12', 54 | 'ValveBiped.Bip01_L_Finger2', 55 | 'ValveBiped.Bip01_L_Finger21', 56 | 'ValveBiped.Bip01_L_Finger22', 57 | 'ValveBiped.Bip01_L_Finger3', 58 | 'ValveBiped.Bip01_L_Finger31', 59 | 'ValveBiped.Bip01_L_Finger32', 60 | 'ValveBiped.Bip01_L_Finger4', 61 | 'ValveBiped.Bip01_L_Finger41', 62 | 'ValveBiped.Bip01_L_Finger42', 63 | 'ValveBiped.Bip01_R_Thigh', 64 | 'ValveBiped.Bip01_R_Calf', 65 | 'ValveBiped.Bip01_R_Foot', 66 | 'ValveBiped.Bip01_R_Toe0', 67 | 'ValveBiped.Bip01_L_Thigh', 68 | 'ValveBiped.Bip01_L_Calf', 69 | 'ValveBiped.Bip01_L_Foot', 70 | 'ValveBiped.Bip01_L_Toe0', 71 | ] 72 | 73 | bn = [] 74 | pr = [] 75 | 76 | for bone in bpy.context.object.data.edit_bones: 77 | if bone.name in valvebipeds: 78 | bone.select = True 79 | bone.select_head = True 80 | bone.select_tail = True 81 | 82 | bpy.ops.armature.delete() 83 | bpy.ops.object.mode_set(mode='OBJECT') 84 | bpy.ops.object.move_to_layer(layers=(False, True, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False)) 85 | bpy.context.scene.layers[1] = True 86 | bpy.context.scene.layers[0] = False 87 | bpy.context.scene.objects.active = bpy.data.objects["proportions"] 88 | bpy.ops.object.mode_set(mode='OBJECT') 89 | bpy.ops.object.select_all(action='SELECT') 90 | bpy.ops.object.join() 91 | bpy.ops.object.mode_set(mode='EDIT') 92 | 93 | for bone in arm.data.bones: 94 | if bone.name not in valvebipeds: 95 | bn.append(bone.name) 96 | 97 | for bone in arm.data.bones: 98 | if bone.name not in valvebipeds: 99 | pr.append(getattr(bone.parent, "name", "ValveBiped.Bip01_Pelvis")) 100 | 101 | for bone in bpy.context.object.data.edit_bones: 102 | j = 0 103 | i = 0 104 | while j < len(bn) and i < len(pr): 105 | arm2.data.edit_bones[bn[i]].parent = arm2.data.edit_bones[pr[j]] 106 | j += 1 107 | i += 1 108 | 109 | bpy.ops.object.mode_set(mode='OBJECT') -------------------------------------------------------------------------------- /Proportion_Trick/scripts/2.7_new/proportion_trick1.py: -------------------------------------------------------------------------------- 1 | #Proportion Trick script by Β L Λ Ζ Ξ 2 | #Blender version: 2.79 3 | #Aligns proportion to imported skeleton. 4 | #Video (2.79): https://www.youtube.com/watch?v=MSWirIyobb4 5 | #Video (2.8+): https://www.youtube.com/watch?v=n9lmxpjSv0I 6 | 7 | import bpy 8 | from collections import OrderedDict 9 | 10 | obj = bpy.data.objects 11 | 12 | try: 13 | armature = obj['gg'] 14 | except: 15 | raise Exception('gg skeleton not found. You must rename imported skeleton to gg. Watch the video again carefully.') 16 | 17 | if armature.type != 'ARMATURE': raise Exception('gg must be an ARMATURE not '+armature.type) 18 | 19 | valvebipeds = [ 20 | 'ValveBiped.Bip01_Pelvis', 21 | 'ValveBiped.Bip01_Spine', 22 | 'ValveBiped.Bip01_Spine1', 23 | 'ValveBiped.Bip01_Spine2', 24 | 'ValveBiped.Bip01_Spine4', 25 | 'ValveBiped.Bip01_Neck1', 26 | 'ValveBiped.Bip01_Head1', 27 | 'ValveBiped.Bip01_R_Clavicle', 28 | 'ValveBiped.Bip01_R_UpperArm', 29 | 'ValveBiped.Bip01_R_Forearm', 30 | 'ValveBiped.Bip01_R_Hand', 31 | 'ValveBiped.Bip01_R_Finger0', 32 | 'ValveBiped.Bip01_R_Finger01', 33 | 'ValveBiped.Bip01_R_Finger02', 34 | 'ValveBiped.Bip01_R_Finger1', 35 | 'ValveBiped.Bip01_R_Finger11', 36 | 'ValveBiped.Bip01_R_Finger12', 37 | 'ValveBiped.Bip01_R_Finger2', 38 | 'ValveBiped.Bip01_R_Finger21', 39 | 'ValveBiped.Bip01_R_Finger22', 40 | 'ValveBiped.Bip01_R_Finger3', 41 | 'ValveBiped.Bip01_R_Finger31', 42 | 'ValveBiped.Bip01_R_Finger32', 43 | 'ValveBiped.Bip01_R_Finger4', 44 | 'ValveBiped.Bip01_R_Finger41', 45 | 'ValveBiped.Bip01_R_Finger42', 46 | 'ValveBiped.Bip01_L_Clavicle', 47 | 'ValveBiped.Bip01_L_UpperArm', 48 | 'ValveBiped.Bip01_L_Forearm', 49 | 'ValveBiped.Bip01_L_Hand', 50 | 'ValveBiped.Bip01_L_Finger0', 51 | 'ValveBiped.Bip01_L_Finger01', 52 | 'ValveBiped.Bip01_L_Finger02', 53 | 'ValveBiped.Bip01_L_Finger1', 54 | 'ValveBiped.Bip01_L_Finger11', 55 | 'ValveBiped.Bip01_L_Finger12', 56 | 'ValveBiped.Bip01_L_Finger2', 57 | 'ValveBiped.Bip01_L_Finger21', 58 | 'ValveBiped.Bip01_L_Finger22', 59 | 'ValveBiped.Bip01_L_Finger3', 60 | 'ValveBiped.Bip01_L_Finger31', 61 | 'ValveBiped.Bip01_L_Finger32', 62 | 'ValveBiped.Bip01_L_Finger4', 63 | 'ValveBiped.Bip01_L_Finger41', 64 | 'ValveBiped.Bip01_L_Finger42', 65 | 'ValveBiped.Bip01_R_Thigh', 66 | 'ValveBiped.Bip01_R_Calf', 67 | 'ValveBiped.Bip01_R_Foot', 68 | 'ValveBiped.Bip01_R_Toe0', 69 | 'ValveBiped.Bip01_L_Thigh', 70 | 'ValveBiped.Bip01_L_Calf', 71 | 'ValveBiped.Bip01_L_Foot', 72 | 'ValveBiped.Bip01_L_Toe0', 73 | ] 74 | 75 | valvebipeds2 = [ 76 | 'ValveBiped.Bip01_L_Thigh', 77 | 'ValveBiped.Bip01_L_Calf', 78 | 'ValveBiped.Bip01_L_Calf', 79 | 'ValveBiped.Bip01_L_Foot', 80 | 'ValveBiped.Bip01_R_Thigh', 81 | 'ValveBiped.Bip01_R_Calf', 82 | 'ValveBiped.Bip01_R_Calf', 83 | 'ValveBiped.Bip01_R_Foot', 84 | 'ValveBiped.Bip01_L_UpperArm', 85 | 'ValveBiped.Bip01_L_Forearm', 86 | 'ValveBiped.Bip01_L_Forearm', 87 | 'ValveBiped.Bip01_L_Hand', 88 | 'ValveBiped.Bip01_R_UpperArm', 89 | 'ValveBiped.Bip01_R_Forearm', 90 | 'ValveBiped.Bip01_R_Forearm', 91 | 'ValveBiped.Bip01_R_Hand', 92 | 'ValveBiped.Bip01_L_Finger0', 93 | 'ValveBiped.Bip01_L_Finger01', 94 | 'ValveBiped.Bip01_L_Finger01', 95 | 'ValveBiped.Bip01_L_Finger02', 96 | 'ValveBiped.Bip01_L_Finger1', 97 | 'ValveBiped.Bip01_L_Finger11', 98 | 'ValveBiped.Bip01_L_Finger11', 99 | 'ValveBiped.Bip01_L_Finger12', 100 | 'ValveBiped.Bip01_L_Finger2', 101 | 'ValveBiped.Bip01_L_Finger21', 102 | 'ValveBiped.Bip01_L_Finger21', 103 | 'ValveBiped.Bip01_L_Finger22', 104 | 'ValveBiped.Bip01_L_Finger3', 105 | 'ValveBiped.Bip01_L_Finger31', 106 | 'ValveBiped.Bip01_L_Finger31', 107 | 'ValveBiped.Bip01_L_Finger32', 108 | 'ValveBiped.Bip01_L_Finger4', 109 | 'ValveBiped.Bip01_L_Finger41', 110 | 'ValveBiped.Bip01_L_Finger41', 111 | 'ValveBiped.Bip01_L_Finger42', 112 | 'ValveBiped.Bip01_R_Finger0', 113 | 'ValveBiped.Bip01_R_Finger01', 114 | 'ValveBiped.Bip01_R_Finger01', 115 | 'ValveBiped.Bip01_R_Finger02', 116 | 'ValveBiped.Bip01_R_Finger1', 117 | 'ValveBiped.Bip01_R_Finger11', 118 | 'ValveBiped.Bip01_R_Finger11', 119 | 'ValveBiped.Bip01_R_Finger12', 120 | 'ValveBiped.Bip01_R_Finger2', 121 | 'ValveBiped.Bip01_R_Finger21', 122 | 'ValveBiped.Bip01_R_Finger21', 123 | 'ValveBiped.Bip01_R_Finger22', 124 | 'ValveBiped.Bip01_R_Finger3', 125 | 'ValveBiped.Bip01_R_Finger31', 126 | 'ValveBiped.Bip01_R_Finger31', 127 | 'ValveBiped.Bip01_R_Finger32', 128 | 'ValveBiped.Bip01_R_Finger4', 129 | 'ValveBiped.Bip01_R_Finger41', 130 | 'ValveBiped.Bip01_R_Finger41', 131 | 'ValveBiped.Bip01_R_Finger42', 132 | ] 133 | 134 | target = valvebipeds2[::2] 135 | sub = valvebipeds2[1::2] 136 | 137 | d = OrderedDict() 138 | for idx, value in enumerate(sub): 139 | key = 'var' + str(idx) 140 | d[key] = value 141 | 142 | for i in valvebipeds: 143 | objbone = bpy.data.objects['proportions'].pose.bones[i].constraints 144 | 145 | if armature.pose.bones.get(i) is not None: 146 | objbone.new('COPY_LOCATION') 147 | objbone['Copy Location'].target = armature 148 | objbone['Copy Location'].subtarget = i 149 | 150 | for j, k in enumerate(target): 151 | objbone2 = bpy.data.objects['proportions'].pose.bones[k].constraints 152 | 153 | if armature.pose.bones.get(k) is not None: 154 | objbone2.new('LOCKED_TRACK') 155 | objbone2['Locked Track'].target = armature 156 | objbone2['Locked Track'].subtarget = d["var"+str(j)] 157 | objbone2['Locked Track'].track_axis = 'TRACK_X' 158 | objbone2['Locked Track'].lock_axis = 'LOCK_Z' 159 | objbone2.new('LOCKED_TRACK') 160 | objbone2['Locked Track.001'].target = armature 161 | objbone2['Locked Track.001'].subtarget = d["var"+str(j)] 162 | objbone2['Locked Track.001'].track_axis = 'TRACK_X' 163 | objbone2['Locked Track.001'].lock_axis = 'LOCK_Y' 164 | 165 | #added on Feb 2021 166 | #this part removes LOCKED_TRACK on parent if child constraint is empty 167 | for l in valvebipeds: 168 | objbone3 = bpy.data.objects['proportions'].pose.bones[l] 169 | 170 | for child in objbone3.children: 171 | objbone4 = bpy.data.objects['proportions'].pose.bones[child.name].constraints 172 | 173 | if not objbone4.keys(): 174 | if objbone3.parent is not None: 175 | objbone5 = bpy.data.objects['proportions'].pose.bones[l].constraints 176 | 177 | for constraint in objbone5: 178 | if constraint.name != 'Copy Location': 179 | objbone5.remove(constraint) 180 | 181 | print(l+' is a parent of '+child.name+' with constraint: ',objbone3.constraints.keys()) 182 | 183 | bpy.context.scene.layers[1] = True 184 | bpy.context.scene.layers[0] = False 185 | bpy.context.scene.objects.active = bpy.data.objects["proportions"] 186 | bpy.data.objects['proportions'].select = True 187 | bpy.ops.object.mode_set(mode='POSE') -------------------------------------------------------------------------------- /Proportion_Trick/scripts/2.7_new/proportion_trick2.py: -------------------------------------------------------------------------------- 1 | #Proportion Trick script by Β L Λ Ζ Ξ 2 | #Blender version: 2.79 3 | #Merge non-ValveBiped bones from imported skeleton to proportion. 4 | #Video (2.79): https://www.youtube.com/watch?v=MSWirIyobb4 5 | #Video (2.8+): https://www.youtube.com/watch?v=n9lmxpjSv0I 6 | 7 | import bpy 8 | 9 | arm = bpy.data.objects['gg'] 10 | arm2 = bpy.data.objects['proportions'] 11 | objects = bpy.context.scene.objects 12 | 13 | bpy.ops.object.mode_set(mode='OBJECT') 14 | bpy.ops.object.duplicate() 15 | bpy.ops.object.mode_set(mode='EDIT') 16 | bpy.ops.armature.select_all(action='DESELECT') 17 | 18 | valvebipeds = [ 19 | 'ValveBiped.Bip01_Pelvis', 20 | 'ValveBiped.Bip01_Spine', 21 | 'ValveBiped.Bip01_Spine1', 22 | 'ValveBiped.Bip01_Spine2', 23 | 'ValveBiped.Bip01_Spine4', 24 | 'ValveBiped.Bip01_Neck1', 25 | 'ValveBiped.Bip01_Head1', 26 | 'ValveBiped.Bip01_R_Clavicle', 27 | 'ValveBiped.Bip01_R_UpperArm', 28 | 'ValveBiped.Bip01_R_Forearm', 29 | 'ValveBiped.Bip01_R_Hand', 30 | 'ValveBiped.Bip01_R_Finger0', 31 | 'ValveBiped.Bip01_R_Finger01', 32 | 'ValveBiped.Bip01_R_Finger02', 33 | 'ValveBiped.Bip01_R_Finger1', 34 | 'ValveBiped.Bip01_R_Finger11', 35 | 'ValveBiped.Bip01_R_Finger12', 36 | 'ValveBiped.Bip01_R_Finger2', 37 | 'ValveBiped.Bip01_R_Finger21', 38 | 'ValveBiped.Bip01_R_Finger22', 39 | 'ValveBiped.Bip01_R_Finger3', 40 | 'ValveBiped.Bip01_R_Finger31', 41 | 'ValveBiped.Bip01_R_Finger32', 42 | 'ValveBiped.Bip01_R_Finger4', 43 | 'ValveBiped.Bip01_R_Finger41', 44 | 'ValveBiped.Bip01_R_Finger42', 45 | 'ValveBiped.Bip01_L_Clavicle', 46 | 'ValveBiped.Bip01_L_UpperArm', 47 | 'ValveBiped.Bip01_L_Forearm', 48 | 'ValveBiped.Bip01_L_Hand', 49 | 'ValveBiped.Bip01_L_Finger0', 50 | 'ValveBiped.Bip01_L_Finger01', 51 | 'ValveBiped.Bip01_L_Finger02', 52 | 'ValveBiped.Bip01_L_Finger1', 53 | 'ValveBiped.Bip01_L_Finger11', 54 | 'ValveBiped.Bip01_L_Finger12', 55 | 'ValveBiped.Bip01_L_Finger2', 56 | 'ValveBiped.Bip01_L_Finger21', 57 | 'ValveBiped.Bip01_L_Finger22', 58 | 'ValveBiped.Bip01_L_Finger3', 59 | 'ValveBiped.Bip01_L_Finger31', 60 | 'ValveBiped.Bip01_L_Finger32', 61 | 'ValveBiped.Bip01_L_Finger4', 62 | 'ValveBiped.Bip01_L_Finger41', 63 | 'ValveBiped.Bip01_L_Finger42', 64 | 'ValveBiped.Bip01_R_Thigh', 65 | 'ValveBiped.Bip01_R_Calf', 66 | 'ValveBiped.Bip01_R_Foot', 67 | 'ValveBiped.Bip01_R_Toe0', 68 | 'ValveBiped.Bip01_L_Thigh', 69 | 'ValveBiped.Bip01_L_Calf', 70 | 'ValveBiped.Bip01_L_Foot', 71 | 'ValveBiped.Bip01_L_Toe0', 72 | ] 73 | 74 | bn = [] 75 | pr = [] 76 | 77 | for bone in bpy.context.object.data.edit_bones: 78 | if bone.name in valvebipeds: 79 | bone.select = True 80 | bone.select_head = True 81 | bone.select_tail = True 82 | 83 | bpy.ops.armature.delete() 84 | bpy.ops.object.mode_set(mode='OBJECT') 85 | bpy.ops.object.move_to_layer(layers=(False, True, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False)) 86 | bpy.context.scene.layers[1] = True 87 | bpy.context.scene.layers[0] = False 88 | bpy.context.scene.objects.active = bpy.data.objects["proportions"] 89 | bpy.ops.object.mode_set(mode='OBJECT') 90 | bpy.ops.object.select_all(action='SELECT') 91 | bpy.ops.object.join() 92 | bpy.ops.object.mode_set(mode='EDIT') 93 | 94 | for bone in arm.data.bones: 95 | if bone.name not in valvebipeds: 96 | bn.append(bone.name) 97 | 98 | for bone in arm.data.bones: 99 | if bone.name not in valvebipeds: 100 | pr.append(getattr(bone.parent, "name", "ValveBiped.Bip01_Pelvis")) 101 | 102 | for bone in bpy.context.object.data.edit_bones: 103 | j = 0 104 | i = 0 105 | while j < len(bn) and i < len(pr): 106 | arm2.data.edit_bones[bn[i]].parent = arm2.data.edit_bones[pr[j]] 107 | j += 1 108 | i += 1 109 | 110 | bpy.ops.object.mode_set(mode='OBJECT') 111 | bpy.context.scene.layers[0] = True 112 | bpy.context.scene.layers[1] = False 113 | 114 | #add armature modifier 115 | for ob in objects: 116 | if ob.type == 'MESH': 117 | if ob.modifiers.values() == []: 118 | ob.modifiers.new('Armature', 'ARMATURE') 119 | ob.modifiers['Armature'].object = bpy.data.objects['proportions'] 120 | else: 121 | for mods in ob.modifiers.values(): 122 | if mods.name == 'Armature': 123 | ob.modifiers['Armature'].object = bpy.data.objects['proportions'] 124 | else: 125 | ob.modifiers.new('Armature', 'ARMATURE') 126 | ob.modifiers['Armature'].object = bpy.data.objects['proportions'] -------------------------------------------------------------------------------- /Proportion_Trick/scripts/2.9/proportion_trick1.py: -------------------------------------------------------------------------------- 1 | #Proportion Trick script by Β L Λ Ζ Ξ 2 | #Blender version: 2.8+ 3 | #Aligns proportion to imported skeleton. 4 | #Video (2.79): https://www.youtube.com/watch?v=MSWirIyobb4 5 | #Video (2.8+): https://www.youtube.com/watch?v=n9lmxpjSv0I 6 | 7 | import bpy 8 | from collections import OrderedDict 9 | 10 | obj = bpy.data.objects 11 | 12 | try: 13 | armature = obj['gg'] 14 | except: 15 | raise Exception('gg skeleton not found. You must rename imported skeleton to gg. Watch the video again carefully.') 16 | 17 | if armature.type != 'ARMATURE': raise Exception('gg must be an ARMATURE not '+armature.type) 18 | 19 | valvebipeds = [ 20 | 'ValveBiped.Bip01_Pelvis', 21 | 'ValveBiped.Bip01_Spine', 22 | 'ValveBiped.Bip01_Spine1', 23 | 'ValveBiped.Bip01_Spine2', 24 | 'ValveBiped.Bip01_Spine4', 25 | 'ValveBiped.Bip01_Neck1', 26 | 'ValveBiped.Bip01_Head1', 27 | 'ValveBiped.Bip01_R_Clavicle', 28 | 'ValveBiped.Bip01_R_UpperArm', 29 | 'ValveBiped.Bip01_R_Forearm', 30 | 'ValveBiped.Bip01_R_Hand', 31 | 'ValveBiped.Bip01_R_Finger0', 32 | 'ValveBiped.Bip01_R_Finger01', 33 | 'ValveBiped.Bip01_R_Finger02', 34 | 'ValveBiped.Bip01_R_Finger1', 35 | 'ValveBiped.Bip01_R_Finger11', 36 | 'ValveBiped.Bip01_R_Finger12', 37 | 'ValveBiped.Bip01_R_Finger2', 38 | 'ValveBiped.Bip01_R_Finger21', 39 | 'ValveBiped.Bip01_R_Finger22', 40 | 'ValveBiped.Bip01_R_Finger3', 41 | 'ValveBiped.Bip01_R_Finger31', 42 | 'ValveBiped.Bip01_R_Finger32', 43 | 'ValveBiped.Bip01_R_Finger4', 44 | 'ValveBiped.Bip01_R_Finger41', 45 | 'ValveBiped.Bip01_R_Finger42', 46 | 'ValveBiped.Bip01_L_Clavicle', 47 | 'ValveBiped.Bip01_L_UpperArm', 48 | 'ValveBiped.Bip01_L_Forearm', 49 | 'ValveBiped.Bip01_L_Hand', 50 | 'ValveBiped.Bip01_L_Finger0', 51 | 'ValveBiped.Bip01_L_Finger01', 52 | 'ValveBiped.Bip01_L_Finger02', 53 | 'ValveBiped.Bip01_L_Finger1', 54 | 'ValveBiped.Bip01_L_Finger11', 55 | 'ValveBiped.Bip01_L_Finger12', 56 | 'ValveBiped.Bip01_L_Finger2', 57 | 'ValveBiped.Bip01_L_Finger21', 58 | 'ValveBiped.Bip01_L_Finger22', 59 | 'ValveBiped.Bip01_L_Finger3', 60 | 'ValveBiped.Bip01_L_Finger31', 61 | 'ValveBiped.Bip01_L_Finger32', 62 | 'ValveBiped.Bip01_L_Finger4', 63 | 'ValveBiped.Bip01_L_Finger41', 64 | 'ValveBiped.Bip01_L_Finger42', 65 | 'ValveBiped.Bip01_R_Thigh', 66 | 'ValveBiped.Bip01_R_Calf', 67 | 'ValveBiped.Bip01_R_Foot', 68 | 'ValveBiped.Bip01_R_Toe0', 69 | 'ValveBiped.Bip01_L_Thigh', 70 | 'ValveBiped.Bip01_L_Calf', 71 | 'ValveBiped.Bip01_L_Foot', 72 | 'ValveBiped.Bip01_L_Toe0', 73 | ] 74 | 75 | valvebipeds2 = [ 76 | 'ValveBiped.Bip01_L_Thigh', 77 | 'ValveBiped.Bip01_L_Calf', 78 | 'ValveBiped.Bip01_L_Calf', 79 | 'ValveBiped.Bip01_L_Foot', 80 | 'ValveBiped.Bip01_R_Thigh', 81 | 'ValveBiped.Bip01_R_Calf', 82 | 'ValveBiped.Bip01_R_Calf', 83 | 'ValveBiped.Bip01_R_Foot', 84 | 'ValveBiped.Bip01_L_UpperArm', 85 | 'ValveBiped.Bip01_L_Forearm', 86 | 'ValveBiped.Bip01_L_Forearm', 87 | 'ValveBiped.Bip01_L_Hand', 88 | 'ValveBiped.Bip01_R_UpperArm', 89 | 'ValveBiped.Bip01_R_Forearm', 90 | 'ValveBiped.Bip01_R_Forearm', 91 | 'ValveBiped.Bip01_R_Hand', 92 | 'ValveBiped.Bip01_L_Finger0', 93 | 'ValveBiped.Bip01_L_Finger01', 94 | 'ValveBiped.Bip01_L_Finger01', 95 | 'ValveBiped.Bip01_L_Finger02', 96 | 'ValveBiped.Bip01_L_Finger1', 97 | 'ValveBiped.Bip01_L_Finger11', 98 | 'ValveBiped.Bip01_L_Finger11', 99 | 'ValveBiped.Bip01_L_Finger12', 100 | 'ValveBiped.Bip01_L_Finger2', 101 | 'ValveBiped.Bip01_L_Finger21', 102 | 'ValveBiped.Bip01_L_Finger21', 103 | 'ValveBiped.Bip01_L_Finger22', 104 | 'ValveBiped.Bip01_L_Finger3', 105 | 'ValveBiped.Bip01_L_Finger31', 106 | 'ValveBiped.Bip01_L_Finger31', 107 | 'ValveBiped.Bip01_L_Finger32', 108 | 'ValveBiped.Bip01_L_Finger4', 109 | 'ValveBiped.Bip01_L_Finger41', 110 | 'ValveBiped.Bip01_L_Finger41', 111 | 'ValveBiped.Bip01_L_Finger42', 112 | 'ValveBiped.Bip01_R_Finger0', 113 | 'ValveBiped.Bip01_R_Finger01', 114 | 'ValveBiped.Bip01_R_Finger01', 115 | 'ValveBiped.Bip01_R_Finger02', 116 | 'ValveBiped.Bip01_R_Finger1', 117 | 'ValveBiped.Bip01_R_Finger11', 118 | 'ValveBiped.Bip01_R_Finger11', 119 | 'ValveBiped.Bip01_R_Finger12', 120 | 'ValveBiped.Bip01_R_Finger2', 121 | 'ValveBiped.Bip01_R_Finger21', 122 | 'ValveBiped.Bip01_R_Finger21', 123 | 'ValveBiped.Bip01_R_Finger22', 124 | 'ValveBiped.Bip01_R_Finger3', 125 | 'ValveBiped.Bip01_R_Finger31', 126 | 'ValveBiped.Bip01_R_Finger31', 127 | 'ValveBiped.Bip01_R_Finger32', 128 | 'ValveBiped.Bip01_R_Finger4', 129 | 'ValveBiped.Bip01_R_Finger41', 130 | 'ValveBiped.Bip01_R_Finger41', 131 | 'ValveBiped.Bip01_R_Finger42', 132 | ] 133 | 134 | target = valvebipeds2[::2] 135 | sub = valvebipeds2[1::2] 136 | 137 | d = OrderedDict() 138 | for idx, value in enumerate(sub): 139 | key = 'var' + str(idx) 140 | d[key] = value 141 | 142 | for i in valvebipeds: 143 | objbone = bpy.data.objects['proportions'].pose.bones[i].constraints 144 | 145 | if armature.pose.bones.get(i) is not None: 146 | objbone.new('COPY_LOCATION') 147 | objbone['Copy Location'].target = armature 148 | objbone['Copy Location'].subtarget = i 149 | 150 | for j, k in enumerate(target): 151 | objbone2 = bpy.data.objects['proportions'].pose.bones[k].constraints 152 | 153 | if armature.pose.bones.get(k) is not None: 154 | objbone2.new('LOCKED_TRACK') 155 | objbone2['Locked Track'].target = armature 156 | objbone2['Locked Track'].subtarget = d["var"+str(j)] 157 | objbone2['Locked Track'].track_axis = 'TRACK_X' 158 | objbone2['Locked Track'].lock_axis = 'LOCK_Z' 159 | objbone2.new('LOCKED_TRACK') 160 | objbone2['Locked Track.001'].target = armature 161 | objbone2['Locked Track.001'].subtarget = d["var"+str(j)] 162 | objbone2['Locked Track.001'].track_axis = 'TRACK_X' 163 | objbone2['Locked Track.001'].lock_axis = 'LOCK_Y' 164 | 165 | #removes LOCKED_TRACK on parent if child constraint is empty 166 | for l in valvebipeds: 167 | objbone3 = bpy.data.objects['proportions'].pose.bones[l] 168 | 169 | for child in objbone3.children: 170 | objbone4 = bpy.data.objects['proportions'].pose.bones[child.name].constraints 171 | 172 | if not objbone4.keys(): 173 | if objbone3.parent is not None: 174 | objbone5 = bpy.data.objects['proportions'].pose.bones[l].constraints 175 | 176 | for constraint in objbone5: 177 | if constraint.name != 'Copy Location': 178 | objbone5.remove(constraint) 179 | 180 | print(l+' is a parent of '+child.name+' with constraint: ',objbone3.constraints.keys()) 181 | 182 | bpy.data.objects['proportions'].hide_set(False) 183 | bpy.data.objects['gg'].hide_set(True) 184 | bpy.context.view_layer.objects.active = bpy.data.objects['proportions'] 185 | bpy.data.objects['proportions'].select_set(True) 186 | bpy.ops.object.mode_set(mode='POSE') -------------------------------------------------------------------------------- /Proportion_Trick/scripts/2.9/proportion_trick2.py: -------------------------------------------------------------------------------- 1 | #Proportion Trick script by Β L Λ Ζ Ξ 2 | #Blender version: 2.8+ 3 | #Merge non-ValveBiped bones from imported skeleton to proportion. 4 | #Video (2.79): https://www.youtube.com/watch?v=MSWirIyobb4 5 | #Video (2.8+): https://www.youtube.com/watch?v=n9lmxpjSv0I 6 | 7 | import bpy 8 | 9 | arm = bpy.data.objects['gg'] 10 | arm2 = bpy.data.objects['proportions'] 11 | objects = bpy.context.scene.objects 12 | 13 | valvebipeds = [ 14 | 'ValveBiped.Bip01_Pelvis', 15 | 'ValveBiped.Bip01_Spine', 16 | 'ValveBiped.Bip01_Spine1', 17 | 'ValveBiped.Bip01_Spine2', 18 | 'ValveBiped.Bip01_Spine4', 19 | 'ValveBiped.Bip01_Neck1', 20 | 'ValveBiped.Bip01_Head1', 21 | 'ValveBiped.Bip01_R_Clavicle', 22 | 'ValveBiped.Bip01_R_UpperArm', 23 | 'ValveBiped.Bip01_R_Forearm', 24 | 'ValveBiped.Bip01_R_Hand', 25 | 'ValveBiped.Bip01_R_Finger0', 26 | 'ValveBiped.Bip01_R_Finger01', 27 | 'ValveBiped.Bip01_R_Finger02', 28 | 'ValveBiped.Bip01_R_Finger1', 29 | 'ValveBiped.Bip01_R_Finger11', 30 | 'ValveBiped.Bip01_R_Finger12', 31 | 'ValveBiped.Bip01_R_Finger2', 32 | 'ValveBiped.Bip01_R_Finger21', 33 | 'ValveBiped.Bip01_R_Finger22', 34 | 'ValveBiped.Bip01_R_Finger3', 35 | 'ValveBiped.Bip01_R_Finger31', 36 | 'ValveBiped.Bip01_R_Finger32', 37 | 'ValveBiped.Bip01_R_Finger4', 38 | 'ValveBiped.Bip01_R_Finger41', 39 | 'ValveBiped.Bip01_R_Finger42', 40 | 'ValveBiped.Bip01_L_Clavicle', 41 | 'ValveBiped.Bip01_L_UpperArm', 42 | 'ValveBiped.Bip01_L_Forearm', 43 | 'ValveBiped.Bip01_L_Hand', 44 | 'ValveBiped.Bip01_L_Finger0', 45 | 'ValveBiped.Bip01_L_Finger01', 46 | 'ValveBiped.Bip01_L_Finger02', 47 | 'ValveBiped.Bip01_L_Finger1', 48 | 'ValveBiped.Bip01_L_Finger11', 49 | 'ValveBiped.Bip01_L_Finger12', 50 | 'ValveBiped.Bip01_L_Finger2', 51 | 'ValveBiped.Bip01_L_Finger21', 52 | 'ValveBiped.Bip01_L_Finger22', 53 | 'ValveBiped.Bip01_L_Finger3', 54 | 'ValveBiped.Bip01_L_Finger31', 55 | 'ValveBiped.Bip01_L_Finger32', 56 | 'ValveBiped.Bip01_L_Finger4', 57 | 'ValveBiped.Bip01_L_Finger41', 58 | 'ValveBiped.Bip01_L_Finger42', 59 | 'ValveBiped.Bip01_R_Thigh', 60 | 'ValveBiped.Bip01_R_Calf', 61 | 'ValveBiped.Bip01_R_Foot', 62 | 'ValveBiped.Bip01_R_Toe0', 63 | 'ValveBiped.Bip01_L_Thigh', 64 | 'ValveBiped.Bip01_L_Calf', 65 | 'ValveBiped.Bip01_L_Foot', 66 | 'ValveBiped.Bip01_L_Toe0', 67 | ] 68 | 69 | bn = [] 70 | pr = [] 71 | 72 | bpy.data.objects['proportions'].hide_set(True) 73 | bpy.data.objects['gg'].hide_set(False) 74 | bpy.context.view_layer.objects.active = bpy.data.objects['gg'] 75 | bpy.data.objects['gg'].select_set(True) 76 | bpy.ops.object.mode_set(mode='OBJECT') 77 | bpy.ops.object.duplicate() 78 | bpy.ops.object.mode_set(mode='EDIT') 79 | bpy.ops.armature.select_all(action='DESELECT') 80 | 81 | for bone in bpy.context.object.data.edit_bones: 82 | if bone.name in valvebipeds: 83 | bone.select = True 84 | bone.select_head = True 85 | bone.select_tail = True 86 | 87 | bpy.ops.armature.delete() 88 | bpy.ops.object.mode_set(mode='OBJECT') 89 | bpy.data.objects['proportions'].hide_set(False) 90 | bpy.data.objects['gg'].hide_set(True) 91 | bpy.context.view_layer.objects.active = bpy.data.objects['proportions'] 92 | bpy.ops.object.mode_set(mode='OBJECT') 93 | bpy.ops.object.select_all(action='SELECT') 94 | bpy.ops.object.join() 95 | bpy.ops.object.mode_set(mode='EDIT') 96 | 97 | for bone in arm.data.bones: 98 | if bone.name not in valvebipeds: 99 | bn.append(bone.name) 100 | 101 | for bone in arm.data.bones: 102 | if bone.name not in valvebipeds: 103 | pr.append(getattr(bone.parent, 'name', 'ValveBiped.Bip01_Pelvis')) 104 | 105 | for bone in bpy.context.object.data.edit_bones: 106 | j = 0 107 | i = 0 108 | while j < len(bn) and i < len(pr): 109 | arm2.data.edit_bones[bn[i]].parent = arm2.data.edit_bones[pr[j]] 110 | j += 1 111 | i += 1 112 | 113 | bpy.ops.object.mode_set(mode='OBJECT') 114 | 115 | #add armature modifier 116 | for ob in objects: 117 | if ob.type == 'MESH': 118 | if ob.modifiers.values() == []: 119 | ob.modifiers.new('Armature', 'ARMATURE') 120 | ob.modifiers['Armature'].object = bpy.data.objects['proportions'] 121 | else: 122 | for mods in ob.modifiers.values(): 123 | if mods.name == 'Armature': 124 | ob.modifiers['Armature'].object = bpy.data.objects['proportions'] 125 | else: 126 | ob.modifiers.new('Armature', 'ARMATURE') 127 | ob.modifiers['Armature'].object = bpy.data.objects['proportions'] -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | ## Update (16 March 2023) 2 |
3 |
4 |