# How to rotate an EditBone? is it possible

I have a dict of 2d data and I want to generate bones (skeleton), assuming z = 0 for translation and rotation is across z axis in given dict.

data = {"bones":[{"name":"root"},
{"name":"COM","parent":"root","length":35.18,"x":-128.09,"y":160.22},
{"name":"torso","parent":"COM","length":102.78,"x":127.78,"y":-116.67,"rotation":90},
{"name":"armL","parent":"torso","length":76.14,"x":62.96,"y":-39.81,"rotation":-103.29},
{"name":"armR","parent":"torso","length":92.75,"x":68.52,"y":32.4,"rotation":104.14}]}


here is my blender script to iterate on the dict. I can create bones. currently placing new bone on top of each other(almost). what I can handle is, initial head position directly , on x and y coords placing tail position directly via length but

HOW to apply rotation? any ideas

Sample code for current progress..

import json,os,sys
from mathutils import Matrix
from mathutils import Vector
import bpy

def createBaseArmature():
bpy.ops.object.add(type='ARMATURE',enter_editmode=True,location=(0,0,0))
ob = bpy.context.object
return ob
def createBones(amt,bonesData):
print (str(len(bonesData)) + " bones found")
for each in bonesData:
bone = amt.edit_bones.new(each['name'])
if 'parent' in each:
bone.parent = amt.edit_bones[each['parent']]
bone.head = bone.parent.tail
rot = Matrix.Translation((0,0,0))
bone.tail = rot * Vector ((0,0,each['length'])) + bone.head
else:
bone.head = (0,0,0)
bone.tail = (0,0,1)

obj = createBaseArmature()
amt = obj.data
createBones(amt,data['bones'])


## 1 Answer

While you can adjust the head/tail/roll directly, EditBone's have a helper function for this: EditBone.transform, which I think is the most direct answer to your question, just pass a rotation matrix to it.

This is simply a python helper function, see the code.