[python] Import FBX to Blender

Viewer

copyrawdownloadembedprintName: Import FBX to Blender
  1. import bpy
  2. import sys
  3.  
  4. from mathutils import Vector
  5.  
  6. # Grab command line arguments
  7. argv = sys.argv
  8.  
  9. fbx = argv[argv.index("--") + 1] 
  10. tgt = argv[argv.index("--") + 2]
  11.  
  12. print("Importing from ", fbx, " and Exporting to ", tgt)
  13.  
  14. # Deletes the whole object hierarchy
  15. def delete_hierarchy(obj):
  16.     names = set([obj.name])
  17.  
  18.     # Recursively grab object names
  19.     def get_child_names(obj):
  20.         for child in obj.children:
  21.             names.add(child.name)
  22.             if child.children:
  23.                 get_child_names(child)
  24.  
  25.     # Call the recursive function
  26.     get_child_names(obj)
  27.     
  28.     # Delete the objects
  29.     for n in names :
  30.         bpy.data.objects.remove(bpy.data.objects[n], True)
  31.  
  32. # Import FBX
  33. bpy.ops.import_scene.fbx( filepath = fbx )
  34.  
  35. # Grab the new armature and scale it.
  36. new_armature = bpy.data.objects['Armature.001']
  37. new_armature.scale = Vector( (0.013, 0.013, 0.013) )
  38.  
  39. # Make sure the armature has animation data
  40. if new_armature.animation_data == None :
  41.     new_armature.animation_data_create() 
  42.  
  43. # Grab the new animation    
  44. new_armature_animation = new_armature.animation_data
  45.  
  46. # Grab the old armature
  47. old_armature = bpy.data.objects['Armature']
  48. old_armature_animation = old_armature.animation_data
  49.  
  50. # Get the properties of the old animation
  51. properties = [p.identifier for p in old_armature_animation.bl_rna.properties if not p.is_readonly]
  52.  
  53. # Copy all animation properties
  54. for prop in properties:
  55.     setattr(new_armature_animation, prop, getattr(old_armature_animation, prop))
  56.     
  57. # Delete the old object
  58. delete_hierarchy(old_armature)
  59.  
  60. # Rename the new object
  61. new_armature.name = 'Armature'
  62.  
  63. # Save the new file
  64. bpy.ops.wm.save_as_mainfile( filepath = tgt )

Editor

You can edit this paste and save as new: