I don't know. Maybe it is easier to write code for the positioning of the bones in edit-mode and it wastes less space while storing. The real issue behind this is the steady conversion between this two types of structs. Everytime it will compute the boneroll, head and tail again as you enter edit-mode. A first more simple fix would be store this three properties along with Bone struct. (It has the same variable names, but they store different values) If i would add this three additional variables (float e_roll, float e_head[3], float e_tail[3]) then they could simply be copied back. This would at least result in no loss of precession.
The more general approach would be to make no difference and use one struct for both of them. This will store a bunch of extra information, but seriously, how many bones do you use? May it 1000 bones, then its still less then any normal sized texture. But it still does not answer my main question. Is any "Bone Object" allocated somewhere before it's corresponding "EditBone Object"? If not, then it would be easy to implement the three additional variables. The recomputation of roll, head and tail could be omitted while switching from pose- to edit-mode. The next step then could be to get rid of the EditBone-struct and the needles conversations, copying of properties. Am 01.02.2011 16:00, schrieb Tom Edwards: > Why are heads and tails stored anyway? This would be a great opportunity > to make editbones loc, rot, length. The difference between edit and pose > is bizarre from both a user's and developer's perspective, and a huge > HUGE headache when importing/exporting. > > On 01/02/2011 2:13, Tobias Oelgarte wrote: >> Im currently reviewing the armature code to fix the loss of precession >> while switching between edit mode and pose mode. Basically the locations >> and roll angles are computed back and forth every time. Since it is done >> with floating point precession the rig tends to fall apart. To correct >> that i will have to know how the "Bone struct" is allocated. Does it >> even get allocated? Meaning that it will always be the result from a >> conversion from "struct EditBone" to "struct Bone"? >> >> The question is basically about the fact which kind of struct is created >> first. From using blender i would assume that Editbones get created >> first and will then be converted to Bones, when you leave editmode. On >> the other hand: How it is handled while loading an existing file? Are >> the Editbones (for editmode) stored or the Bones (for Posemode and >> anything else)? >> >> What i basically want to do is to store the untransformed head and tail >> locations together with the boneroll as separate variables inside the >> "Bone struct". That seams to me the only way to get rid of the steady >> conversions, which will end up destroying the bone locations in editmode. >> >> Tobias Oelgarte >> >> >> _______________________________________________ >> Bf-committers mailing list >> Bf-committers@blender.org >> http://lists.blender.org/mailman/listinfo/bf-committers >> > _______________________________________________ > Bf-committers mailing list > Bf-committers@blender.org > http://lists.blender.org/mailman/listinfo/bf-committers > _______________________________________________ Bf-committers mailing list Bf-committers@blender.org http://lists.blender.org/mailman/listinfo/bf-committers