My question touches the mathematical side of Blender more than the modelling one.
I am having a problem understanding how the 'local with parent' space in bone constraints works. I have looked through all the forums I have found, read all the manuals, and unfortunately I have not found a full answer. Also, the tooltip in Blender does not help.
I will try to explain the problem with some images that I hope will be helpful. Do not be afraid of the length of the post: it mostly consists of pictures. ;)
Let's assume we have a bone:
As you can see, this bone is in edit mode, and we see its local coordinate system. Below is the same bone in pose mode:
(By the way, you can see that the coordinate systems are different. They are both right-handed, but the pose mode is rotated so that it has Y axis as up, which is different from the rest of Blender's modes which use Z axis as up. If someone can explain why, I would be grateful :-) )
Now, let us apply the 'Limit location constraint' to the bone with default settings and 'Local with Parent' space. The bone did not move. Now in pose mode set the Z coordinate of the bone to 1.0.
The bone changed its position not toward its Z axis but toward its Y axis.
This is so far understandable as the bone moved toward its armature Z axis.
But now we add another bone to it and unselect its 'Connected' option in edit mode so that the child bone is not attached to its parent.
In edit mode it will look like this:
And in pose mode we have something like this:
And now apply exactly the same constraint to the second bone: 'Limit location' with default settings and 'Local with parent' pose space.
What we see is something like this:
And here finally is the core of my question. Why does it behave like this? Why did the second bone move? Its translations are (0, 0, 0) in pose mode and the same in edit mode. If I set its Z = 1 in pose mode it will move UP like the first bone, so that is quite logical.
If someone could help me with understanding the problem I would be very grateful. The pictures are taken from Blender 2.68a, but I also checked with 2.70a and ancient 2.49b, and it works exactly the same with all three.
If I have been at all unclear or have posted too little data, just let me know.