Setting TRS on an edit bone? Can an edit bone have a non-unit scale?

My understanding is that the local-to-parent TRS for a bone in the rest pose is determined by the head/tail/roll of its edit bone

• T is determined by the difference between its head and its parent's head.
• R is determined by the direction of the bone (giving the direction of the local Y-axis) and the roll (giving the direction of, say, the Z-axis). The length of the bone does not appear to have any effect.
• S is always the unit scaling.

Then when the bone is posed, its final local-to-parent transform is calculated as

(edit bone TRS) (pose bone TRS)


where the pose bone has normal translation/rotation/scaling properties. (Please correct me if any of this is wrong.)

I have data that has a tree of joints with their local-to-parent transforms in TRS format that I want to import into Blender. I have the following questions about converting this to head/tail/roll

1. How can I set the scale property? Since the local-to-parent for an edit bone has AFAICT always a unit scale.
2. Can I choose the way a bone points? Because the direction a bone points appears to be determined by the local-to-parent I want it to have (only the length can be chosen freely), and I might want the make eg. a shoulder bone point to an elbow, regardless of whether this is the direction of its +Y-axis.

How, for example, does the COLLADA importer do it? I know COLLADA joints can have scalings, and the importer lets you choose which way bones point.

Should I be setting properties on the Bone instead of the head/tail/roll on the EditBone? Also any clarification on the Bone/EditBone/PoseBone distinction would be appreciated.

Thank you.