Advertisement
Guest User

AutoRig

a guest
May 8th, 2020
125
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 13.64 KB | None | 0 0
  1. # This program is free software; you can redistribute it and/or modify
  2. # it under the terms of the GNU General Public License as published by
  3. # the Free Software Foundation; either version 3 of the License, or
  4. # (at your option) any later version.
  5. #
  6. # This program is distributed in the hope that it will be useful, but
  7. # WITHOUT ANY WARRANTY; without even the implied warranty of
  8. # MERCHANTIBILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
  9. # General Public License for more details.
  10. #
  11. # You should have received a copy of the GNU General Public License
  12. # along with this program. If not, see <http://www.gnu.org/licenses/>.
  13.  
  14. bl_info = {
  15.     "name" : "Auto Rig",
  16.     "author" : "Jambo",
  17.     "description" : "",
  18.     "blender" : (2, 80, 0),
  19.     "version" : (0, 0, 1),
  20.     "location" : "",
  21.     "warning" : "",
  22.     "category" : "Generic"
  23. }
  24.  
  25. import bpy
  26. import os
  27. from bpy.props import BoolProperty
  28. from bpy.types import PropertyGroup, Panel, Scene
  29.  
  30. addon_dirc =os .path .dirname (os .path .realpath (__file__ ))
  31.  
  32. class AutoRigPanel(bpy.types.Panel):
  33.    
  34.     bl_label = "AutoRig"
  35.     bl_idname = "AutoRig"
  36.     bl_space_type = 'VIEW_3D'
  37.     bl_region_type = 'UI'
  38.     bl_category = 'AutoRig'
  39.  
  40.     def draw(self, context):
  41.         layout = self.layout
  42.  
  43.         row = layout.row()
  44.         row.operator('epic.rig', text = "Rig Selected Minifigure")
  45.  
  46. class AutoRig(bpy.types.Operator):
  47.     bl_idname = "epic.rig"
  48.     bl_label = "Rig Selected Minifigure"
  49.    
  50.     def execute(self, context):
  51.  
  52.         selected_objects = bpy.context.selected_objects
  53.         loct = bpy.context.selected_objects[0]
  54.  
  55.         for mat in selected_objects:
  56.             if "3815" in mat.data.name:
  57.                 loct = mat
  58.  
  59.         path = addon_dirc + "/Append.blend/Collection/"
  60.         object_name = "Collection"
  61.         bpy.ops.wm.append(filename = object_name, directory = path)
  62.  
  63.         hey = bpy.data.objects
  64.         b = hey['Rig']
  65.         #b.location = loct.location
  66.         collections = bpy.data.collections
  67.         h = collections['BoneShapes']
  68.         h.hide_viewport = True
  69.  
  70.         for fig in selected_objects:
  71.             mbe = False
  72.             if "3817" in fig.data.name:
  73.                 mbe = True
  74.                 bpy.context.view_layer.objects.active = b
  75.                 bpy.ops.object.posemode_toggle()
  76.                 bpy.ops.pose.select_all(action='DESELECT')
  77.                 bpy.ops.object.posemode_toggle()
  78.                 bpy.ops.object.select_all(action='DESELECT')
  79.                 fig.select_set(True)
  80.                 b.select_set(True)
  81.                 bpy.context.view_layer.objects.active = b
  82.                 bpy.ops.object.posemode_toggle()
  83.                 b.data.bones.active = b.data.bones['LeftLeg']
  84.                 bpy.ops.object.parent_set(type='BONE', keep_transform=True)
  85.                 bpy.ops.object.posemode_toggle()
  86.             if "20926" in fig.data.name:
  87.                 mbe = True
  88.                 bpy.context.view_layer.objects.active = b
  89.                 bpy.ops.object.posemode_toggle()
  90.                 bpy.ops.pose.select_all(action='DESELECT')
  91.                 bpy.ops.object.posemode_toggle()
  92.                 bpy.ops.object.select_all(action='DESELECT')
  93.                 fig.select_set(True)
  94.                 b.select_set(True)
  95.                 bpy.context.view_layer.objects.active = b
  96.                 bpy.ops.object.posemode_toggle()
  97.                 b.data.bones.active = b.data.bones['LeftLeg']
  98.                 bpy.ops.object.parent_set(type='BONE', keep_transform=True)
  99.                 bpy.ops.object.posemode_toggle()
  100.             if "3816" in fig.data.name:
  101.                 mbe = True
  102.                 bpy.context.view_layer.objects.active = b
  103.                 bpy.ops.object.posemode_toggle()
  104.                 bpy.ops.pose.select_all(action='DESELECT')
  105.                 bpy.ops.object.posemode_toggle()
  106.                 bpy.ops.object.select_all(action='DESELECT')
  107.                 fig.select_set(True)
  108.                 b.select_set(True)
  109.                 bpy.context.view_layer.objects.active = b
  110.                 bpy.ops.object.posemode_toggle()
  111.                 b.data.bones.active = b.data.bones['RightLeg']
  112.                 bpy.ops.object.parent_set(type='BONE', keep_transform=True)
  113.                 bpy.ops.object.posemode_toggle()
  114.             if "20932" in fig.data.name:
  115.                 mbe = True
  116.                 bpy.context.view_layer.objects.active = b
  117.                 bpy.ops.object.posemode_toggle()
  118.                 bpy.ops.pose.select_all(action='DESELECT')
  119.                 bpy.ops.object.posemode_toggle()
  120.                 bpy.ops.object.select_all(action='DESELECT')
  121.                 fig.select_set(True)
  122.                 b.select_set(True)
  123.                 bpy.context.view_layer.objects.active = b
  124.                 bpy.ops.object.posemode_toggle()
  125.                 b.data.bones.active = b.data.bones['RightLeg']
  126.                 bpy.ops.object.parent_set(type='BONE', keep_transform=True)
  127.                 bpy.ops.object.posemode_toggle()
  128.             if "3815" in fig.data.name:
  129.                 mbe = True
  130.                 bpy.context.view_layer.objects.active = b
  131.                 bpy.ops.object.posemode_toggle()
  132.                 bpy.ops.pose.select_all(action='DESELECT')
  133.                 bpy.ops.object.posemode_toggle()
  134.                 bpy.ops.object.select_all(action='DESELECT')
  135.                 fig.select_set(True)
  136.                 b.select_set(True)
  137.                 bpy.context.view_layer.objects.active = b
  138.                 bpy.ops.object.posemode_toggle()
  139.                 b.data.bones.active = b.data.bones['Torso']
  140.                 bpy.ops.object.parent_set(type='BONE', keep_transform=True)
  141.                 bpy.ops.object.posemode_toggle()
  142.             if "3814" in fig.data.name:
  143.                 mbe = True
  144.                 bpy.context.view_layer.objects.active = b
  145.                 bpy.ops.object.posemode_toggle()
  146.                 bpy.context.object.data.layers[17] = True
  147.                 bpy.context.object.data.layers[18] = True
  148.                 bpy.ops.pose.select_all(action='DESELECT')
  149.                 bpy.ops.object.posemode_toggle()
  150.                 bpy.ops.object.select_all(action='DESELECT')
  151.                 fig.select_set(True)
  152.                 b.select_set(True)
  153.                 bpy.context.view_layer.objects.active = b
  154.                 bpy.ops.object.posemode_toggle()
  155.                 b.data.bones.active = b.data.bones['torso pivot R']
  156.                 bpy.ops.object.parent_set(type='BONE', keep_transform=True)
  157.                 bpy.ops.object.posemode_toggle()
  158.                 mbe = True
  159.                 bpy.context.view_layer.objects.active = b
  160.                 bpy.ops.object.posemode_toggle()
  161.                 bpy.ops.pose.select_all(action='DESELECT')
  162.                 bpy.ops.object.posemode_toggle()
  163.                 bpy.ops.object.select_all(action='DESELECT')
  164.                 fig.select_set(True)
  165.                 b.select_set(True)
  166.                 bpy.context.view_layer.objects.active = b
  167.                 bpy.ops.object.posemode_toggle()
  168.                 b.data.bones.active = b.data.bones['Torso pivot L']
  169.                 bpy.ops.object.parent_set(type='BONE', keep_transform=True)
  170.                 bpy.ops.object.posemode_toggle()
  171.                 mbe = True
  172.                 bpy.context.view_layer.objects.active = b
  173.                 bpy.ops.object.posemode_toggle()
  174.                 bpy.ops.pose.select_all(action='DESELECT')
  175.                 bpy.ops.object.posemode_toggle()
  176.                 bpy.ops.object.select_all(action='DESELECT')
  177.                 fig.select_set(True)
  178.                 b.select_set(True)
  179.                 bpy.context.view_layer.objects.active = b
  180.                 bpy.ops.object.posemode_toggle()
  181.                 b.data.bones.active = b.data.bones['torso pivot R']
  182.                 bpy.ops.object.parent_set(type='BONE', keep_transform=True)
  183.                 bpy.context.object.data.layers[17] = False
  184.                 bpy.context.object.data.layers[18] = False
  185.                 bpy.ops.object.posemode_toggle()
  186.             if "3820" in fig.data.name:
  187.                
  188.                 M = 100000
  189.                 shortestDist = M
  190.                 bpy.context.view_layer.objects.active = b
  191.                 bpy.ops.object.posemode_toggle()
  192.                 bpy.ops.pose.select_all(action='DESELECT')
  193.                 bpy.ops.object.posemode_toggle()
  194.                 bpy.ops.object.select_all(action='DESELECT')
  195.                 bpy.context.view_layer.objects.active = b
  196.                 bpy.ops.object.posemode_toggle()
  197.                 b.data.bones.active = b.data.bones['Left Hand']
  198.                 b.data.bones.active = b.data.bones['Right Hand']
  199.                 here = bpy.context.selected_pose_bones
  200.                 bpy.ops.object.posemode_toggle()
  201.                
  202.                 for iicap in here:
  203.                     obj = iicap.id_data
  204.                     matrix_final = obj.matrix_world @ iicap.matrix
  205.                     loc = matrix_final.translation.xyz
  206.                    
  207.                     sohere = (loc - fig.location).length
  208.                     if sohere < shortestDist:
  209.                         shortestDist = sohere
  210.                         omg = iicap.name
  211.                
  212.                 bpy.context.view_layer.objects.active = b
  213.                 bpy.ops.object.posemode_toggle()
  214.                 bpy.ops.pose.select_all(action='DESELECT')
  215.                 bpy.ops.object.posemode_toggle()
  216.                 bpy.ops.object.select_all(action='DESELECT')
  217.                 fig.select_set(True)
  218.                 b.select_set(True)
  219.                 bpy.context.view_layer.objects.active = b
  220.                 bpy.ops.object.posemode_toggle()
  221.                 b.data.bones.active = b.data.bones[omg]
  222.                 bpy.ops.object.parent_set(type='BONE', keep_transform=True)
  223.                 bpy.ops.object.posemode_toggle()
  224.                 mbe = True
  225.             if "3819" in fig.data.name:
  226.                 mbe = True
  227.                 bpy.context.view_layer.objects.active = b
  228.                 bpy.ops.object.posemode_toggle()
  229.                 bpy.ops.pose.select_all(action='DESELECT')
  230.                 bpy.ops.object.posemode_toggle()
  231.                 bpy.ops.object.select_all(action='DESELECT')
  232.                 fig.select_set(True)
  233.                 b.select_set(True)
  234.                 bpy.context.view_layer.objects.active = b
  235.                 bpy.ops.object.posemode_toggle()
  236.                 b.data.bones.active = b.data.bones['Left Arm']
  237.                 bpy.ops.object.parent_set(type='BONE', keep_transform=True)
  238.                 bpy.ops.object.posemode_toggle()
  239.             if "16001" in fig.data.name:
  240.                 mbe = True
  241.                 bpy.context.view_layer.objects.active = b
  242.                 bpy.ops.object.posemode_toggle()
  243.                 bpy.ops.pose.select_all(action='DESELECT')
  244.                 bpy.ops.object.posemode_toggle()
  245.                 bpy.ops.object.select_all(action='DESELECT')
  246.                 fig.select_set(True)
  247.                 b.select_set(True)
  248.                 bpy.context.view_layer.objects.active = b
  249.                 bpy.ops.object.posemode_toggle()
  250.                 b.data.bones.active = b.data.bones['Left Arm']
  251.                 bpy.ops.object.parent_set(type='BONE', keep_transform=True)
  252.                 bpy.ops.object.posemode_toggle()
  253.             if "3818" in fig.data.name:
  254.                 mbe = True
  255.                 bpy.context.view_layer.objects.active = b
  256.                 bpy.ops.object.posemode_toggle()
  257.                 bpy.ops.pose.select_all(action='DESELECT')
  258.                 bpy.ops.object.posemode_toggle()
  259.                 bpy.ops.object.select_all(action='DESELECT')
  260.                 fig.select_set(True)
  261.                 b.select_set(True)
  262.                 bpy.context.view_layer.objects.active = b
  263.                 bpy.ops.object.posemode_toggle()
  264.                 b.data.bones.active = b.data.bones['Right Arm']
  265.                 bpy.ops.object.parent_set(type='BONE', keep_transform=True)
  266.                 bpy.ops.object.posemode_toggle()
  267.             if "16000" in fig.data.name:
  268.                 mbe = True
  269.                 bpy.context.view_layer.objects.active = b
  270.                 bpy.ops.object.posemode_toggle()
  271.                 bpy.ops.pose.select_all(action='DESELECT')
  272.                 bpy.ops.object.posemode_toggle()
  273.                 bpy.ops.object.select_all(action='DESELECT')
  274.                 fig.select_set(True)
  275.                 b.select_set(True)
  276.                 bpy.context.view_layer.objects.active = b
  277.                 bpy.ops.object.posemode_toggle()
  278.                 b.data.bones.active = b.data.bones['Right Arm']
  279.                 bpy.ops.object.parent_set(type='BONE', keep_transform=True)
  280.                 bpy.ops.object.posemode_toggle()
  281.             if "3626" in fig.data.name:
  282.                 mbe = True
  283.                 bpy.context.view_layer.objects.active = b
  284.                 bpy.ops.object.posemode_toggle()
  285.                 bpy.ops.pose.select_all(action='DESELECT')
  286.                 bpy.ops.object.posemode_toggle()
  287.                 bpy.ops.object.select_all(action='DESELECT')
  288.                 fig.select_set(True)
  289.                 b.select_set(True)
  290.                 bpy.context.view_layer.objects.active = b
  291.                 bpy.ops.object.posemode_toggle()
  292.                 b.data.bones.active = b.data.bones['Head']
  293.                 bpy.ops.object.parent_set(type='BONE', keep_transform=True)
  294.                
  295.  
  296.  
  297.  
  298.  
  299.        
  300.        
  301.        
  302.        
  303.         return {'FINISHED'}
  304.  
  305.  
  306.  
  307. #REGISTRATION
  308. classes = [AutoRigPanel, AutoRig]
  309.  
  310. def register():
  311.     for cls in classes:
  312.         bpy.utils.register_class(cls)
  313.  
  314. def unregister():
  315.     for cls in classes:
  316.         bpy.utils.unregister_class(cls)
  317.  
  318. if __name__ == "__main__":
  319.     register()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement