Revision: 35008 http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=35008 Author: campbellbarton Date: 2011-02-21 01:29:35 +0000 (Mon, 21 Feb 2011) Log Message: ----------- bug [#26089] editbone.transfrom() seems to mess up bone roll (by more than float precision error) This is intentional behavior but add options not to transform the bones scale & roll.
Modified Paths: -------------- trunk/blender/release/scripts/modules/bpy_types.py Modified: trunk/blender/release/scripts/modules/bpy_types.py =================================================================== --- trunk/blender/release/scripts/modules/bpy_types.py 2011-02-21 01:02:30 UTC (rev 35007) +++ trunk/blender/release/scripts/modules/bpy_types.py 2011-02-21 01:29:35 UTC (rev 35008) @@ -278,21 +278,31 @@ self.tail = self.head + vec self.roll = other.roll - def transform(self, matrix): + def transform(self, matrix, scale=True, roll=True): """ Transform the the bones head, tail, roll and envalope (when the matrix has a scale component). - Expects a 4x4 or 3x3 matrix. + + :arg matrix: 3x3 or 4x4 transformation matrix. + :type matrix: :class:`Matrix` + :arg scale: Scale the bone envalope by the matrix. + :type scale: bool + :arg roll: Correct the roll to point in the same relative direction to the head and tail. + :type roll: bool """ from mathutils import Vector z_vec = Vector((0.0, 0.0, 1.0)) * self.matrix.to_3x3() self.tail = self.tail * matrix self.head = self.head * matrix - scalar = matrix.median_scale - self.head_radius *= scalar - self.tail_radius *= scalar - self.align_roll(z_vec * matrix) + if scale: + scalar = matrix.median_scale + self.head_radius *= scalar + self.tail_radius *= scalar + if roll: + self.align_roll(z_vec * matrix) + + def ord_ind(i1, i2): if i1 < i2: return i1, i2 _______________________________________________ Bf-blender-cvs mailing list Bf-blender-cvs@blender.org http://lists.blender.org/mailman/listinfo/bf-blender-cvs