Math Types & Utilities (mathutils)

This module provides access to math operations.

Note

Classes, methods and attributes that accept vectors also accept other numeric sequences, such as tuples, lists.

Submodules:

The mathutils module provides the following classes:

import mathutils
from math import radians

vec = mathutils.Vector((1.0, 2.0, 3.0))

mat_rot = mathutils.Matrix.Rotation(radians(90.0), 4, 'X')
mat_trans = mathutils.Matrix.Translation(vec)

mat = mat_trans @ mat_rot
mat.invert()

mat3 = mat.to_3x3()
quat1 = mat.to_quaternion()
quat2 = mat3.to_quaternion()

quat_diff = quat1.rotation_difference(quat2)

print(quat_diff.angle)
class mathutils.Color(rgb)

This object gives access to Colors in Blender.

Parameters:rgb (3d vector) – (r, g, b) color values
import mathutils

# color values are represented as RGB values from 0 - 1, this is blue
col = mathutils.Color((0.0, 0.0, 1.0))

# as well as r/g/b attribute access you can adjust them by h/s/v
col.s *= 0.5

# you can access its components by attribute or index
print("Color R:", col.r)
print("Color G:", col[1])
print("Color B:", col[-1])
print("Color HSV: %.2f, %.2f, %.2f", col[:])


# components of an existing color can be set
col[:] = 0.0, 0.5, 1.0

# components of an existing color can use slice notation to get a tuple
print("Values: %f, %f, %f" % col[:])

# colors can be added and subtracted
col += mathutils.Color((0.25, 0.0, 0.0))

# Color can be multiplied, in this example color is scaled to 0-255
# can printed as integers
print("Color: %d, %d, %d" % (col * 255.0)[:])

# This example prints the color as hexadecimal
print("Hexadecimal: %.2x%.2x%.2x" % (int(col.r * 255), int(col.g * 255), int(col.b * 255)))
copy()

Returns a copy of this color.

Returns:A copy of the color.
Return type:Color

Note

use this to get a copy of a wrapped color with no reference to the original data.

freeze()

Make this object immutable.

After this the object can be hashed, used in dictionaries & sets.

Returns:An instance of this object.
b

Blue color channel.

Type:float
g

Green color channel.

Type:float
h

HSV Hue component in [0, 1].

Type:float
hsv

HSV Values in [0, 1].

Type:float triplet
is_frozen

True when this object has been frozen (read-only).

Type:boolean
is_wrapped

True when this object wraps external data (read-only).

Type:boolean
owner

The item this is wrapping or None (read-only).

r

Red color channel.

Type:float
s

HSV Saturation component in [0, 1].

Type:float
v

HSV Value component in [0, 1].

Type:float
class mathutils.Euler(angles, order='XYZ')

This object gives access to Eulers in Blender.

See also

Euler angles on Wikipedia.

Parameters:
  • angles (3d vector) – Three angles, in radians.
  • order (str) – Optional order of the angles, a permutation of XYZ.
import mathutils
import math

# create a new euler with default axis rotation order
eul = mathutils.Euler((0.0, math.radians(45.0), 0.0), 'XYZ')

# rotate the euler
eul.rotate_axis('Z', math.radians(10.0))

# you can access its components by attribute or index
print("Euler X", eul.x)
print("Euler Y", eul[1])
print("Euler Z", eul[-1])

# components of an existing euler can be set
eul[:] = 1.0, 2.0, 3.0

# components of an existing euler can use slice notation to get a tuple
print("Values: %f, %f, %f" % eul[:])

# the order can be set at any time too
eul.order = 'ZYX'

# eulers can be used to rotate vectors
vec = mathutils.Vector((0.0, 0.0, 1.0))
vec.rotate(eul)

# often its useful to convert the euler into a matrix so it can be used as
# transformations with more flexibility
mat_rot = eul.to_matrix()
mat_loc = mathutils.Matrix.Translation((2.0, 3.0, 4.0))
mat = mat_loc @ mat_rot.to_4x4()
copy()

Returns a copy of this euler.

Returns:A copy of the euler.
Return type:Euler

Note

use this to get a copy of a wrapped euler with no reference to the original data.

freeze()

Make this object immutable.

After this the object can be hashed, used in dictionaries & sets.

Returns:An instance of this object.
make_compatible(other)

Make this euler compatible with another, so interpolating between them works as intended.

Note

the rotation order is not taken into account for this function.

rotate(other)

Rotates the euler by another mathutils value.

Parameters:other (Euler, Quaternion or Matrix) – rotation component of mathutils value
rotate_axis(axis, angle)

Rotates the euler a certain amount and returning a unique euler rotation (no 720 degree pitches).

Parameters:
  • axis (string) – single character in [‘X, ‘Y’, ‘Z’].
  • angle (float) – angle in radians.
to_matrix()

Return a matrix representation of the euler.

Returns:A 3x3 rotation matrix representation of the euler.
Return type:Matrix
to_quaternion()

Return a quaternion representation of the euler.

Returns:Quaternion representation of the euler.
Return type:Quaternion
zero()

Set all values to zero.

is_frozen

True when this object has been frozen (read-only).

Type:boolean
is_wrapped

True when this object wraps external data (read-only).

Type:boolean
order

Euler rotation order.

Type:string in [‘XYZ’, ‘XZY’, ‘YXZ’, ‘YZX’, ‘ZXY’, ‘ZYX’]
owner

The item this is wrapping or None (read-only).

x

Euler axis angle in radians.

Type:float
y

Euler axis angle in radians.

Type:float
z

Euler axis angle in radians.

Type:float
class mathutils.Matrix([rows])

This object gives access to Matrices in Blender, supporting square and rectangular matrices from 2x2 up to 4x4.

Parameters:rows (2d number sequence) – Sequence of rows. When omitted, a 4x4 identity matrix is constructed.
import mathutils
import math

# create a location matrix
mat_loc = mathutils.Matrix.Translation((2.0, 3.0, 4.0))

# create an identitiy matrix
mat_sca = mathutils.Matrix.Scale(0.5, 4, (0.0, 0.0, 1.0))

# create a rotation matrix
mat_rot = mathutils.Matrix.Rotation(math.radians(45.0), 4, 'X')

# combine transformations
mat_out = mat_loc @ mat_rot @ mat_sca
print(mat_out)

# extract components back out of the matrix
loc, rot, sca = mat_out.decompose()
print(loc, rot, sca)

# it can also be useful to access components of a matrix directly
mat = mathutils.Matrix()
mat[0][0], mat[1][0], mat[2][0] = 0.0, 1.0, 2.0

mat[0][0:3] = 0.0, 1.0, 2.0

# each item in a matrix is a vector so vector utility functions can be used
mat[0].xyz = 0.0, 1.0, 2.0
classmethod Diagonal(vector)

Create a diagonal (scaling) matrix using the values from the vector.

Parameters:vector (Vector) – The vector of values for the diagonal.
Returns:A diagonal matrix.
Return type:Matrix
classmethod Identity(size)

Create an identity matrix.

Parameters:size (int) – The size of the identity matrix to construct [2, 4].
Returns:A new identity matrix.
Return type:Matrix
classmethod OrthoProjection(axis, size)

Create a matrix to represent an orthographic projection.

Parameters:
  • axis (string or Vector) – Can be any of the following: [‘X’, ‘Y’, ‘XY’, ‘XZ’, ‘YZ’], where a single axis is for a 2D matrix. Or a vector for an arbitrary axis
  • size (int) – The size of the projection matrix to construct [2, 4].
Returns:

A new projection matrix.

Return type:

Matrix

classmethod Rotation(angle, size, axis)

Create a matrix representing a rotation.

Parameters:
  • angle (float) – The angle of rotation desired, in radians.
  • size (int) – The size of the rotation matrix to construct [2, 4].
  • axis (string or Vector) – a string in [‘X’, ‘Y’, ‘Z’] or a 3D Vector Object (optional when size is 2).
Returns:

A new rotation matrix.

Return type:

Matrix

classmethod Scale(factor, size, axis)

Create a matrix representing a scaling.

Parameters:
  • factor (float) – The factor of scaling to apply.
  • size (int) – The size of the scale matrix to construct [2, 4].
  • axis (Vector) – Direction to influence scale. (optional).
Returns:

A new scale matrix.

Return type:

Matrix

classmethod Shear(plane, size, factor)

Create a matrix to represent an shear transformation.

Parameters:
  • plane (string) – Can be any of the following: [‘X’, ‘Y’, ‘XY’, ‘XZ’, ‘YZ’], where a single axis is for a 2D matrix only.
  • size (int) – The size of the shear matrix to construct [2, 4].
  • factor (float or float pair) – The factor of shear to apply. For a 3 or 4 size matrix pass a pair of floats corresponding with the plane axis.
Returns:

A new shear matrix.

Return type:

Matrix

classmethod Translation(vector)

Create a matrix representing a translation.

Parameters:vector (Vector) – The translation vector.
Returns:An identity matrix with a translation.
Return type:Matrix
adjugate()

Set the matrix to its adjugate.

Note

When the matrix cannot be adjugated a ValueError exception is raised.

See also

Adjugate matrix <https://en.wikipedia.org/wiki/Adjugate_matrix> on Wikipedia.

adjugated()

Return an adjugated copy of the matrix.

Returns:the adjugated matrix.
Return type:Matrix

Note

When the matrix cant be adjugated a ValueError exception is raised.

copy()

Returns a copy of this matrix.

Returns:an instance of itself
Return type:Matrix
decompose()

Return the translation, rotation, and scale components of this matrix.

Returns:tuple of translation, rotation, and scale
Return type:(Vector, Quaternion, Vector)
determinant()

Return the determinant of a matrix.

Returns:Return the determinant of a matrix.
Return type:float

See also

Determinant <https://en.wikipedia.org/wiki/Determinant> on Wikipedia.

freeze()

Make this object immutable.

After this the object can be hashed, used in dictionaries & sets.

Returns:An instance of this object.
identity()

Set the matrix to the identity matrix.

Note

An object with a location and rotation of zero, and a scale of one will have an identity matrix.

See also

Identity matrix <https://en.wikipedia.org/wiki/Identity_matrix> on Wikipedia.

invert(fallback=None)

Set the matrix to its inverse.

Parameters:fallback (Matrix) – Set the matrix to this value when the inverse cannot be calculated (instead of raising a ValueError exception).

See also

Inverse matrix <https://en.wikipedia.org/wiki/Inverse_matrix> on Wikipedia.

invert_safe()

Set the matrix to its inverse, will never error. If degenerated (e.g. zero scale on an axis), add some epsilon to its diagonal, to get an invertible one. If tweaked matrix is still degenerated, set to the identity matrix instead.

See also

Inverse Matrix <https://en.wikipedia.org/wiki/Inverse_matrix> on Wikipedia.

inverted(fallback=None)

Return an inverted copy of the matrix.

Parameters:fallback (any) – return this when the inverse can’t be calculated (instead of raising a ValueError).
Returns:the inverted matrix or fallback when given.
Return type:Matrix
inverted_safe()

Return an inverted copy of the matrix, will never error. If degenerated (e.g. zero scale on an axis), add some epsilon to its diagonal, to get an invertible one. If tweaked matrix is still degenerated, return the identity matrix instead.

Returns:the inverted matrix.
Return type:Matrix
lerp(other, factor)

Returns the interpolation of two matrices. Uses polar decomposition, see “Matrix Animation and Polar Decomposition”, Shoemake and Duff, 1992.

Parameters:
  • other (Matrix) – value to interpolate with.
  • factor (float) – The interpolation value in [0.0, 1.0].
Returns:

The interpolated matrix.

Return type:

Matrix

normalize()

Normalize each of the matrix columns.

normalized()

Return a column normalized matrix

Returns:a column normalized matrix
Return type:Matrix
resize_4x4()

Resize the matrix to 4x4.

rotate(other)

Rotates the matrix by another mathutils value.

Parameters:other (Euler, Quaternion or Matrix) – rotation component of mathutils value

Note

If any of the columns are not unit length this may not have desired results.

to_3x3()

Return a 3x3 copy of this matrix.

Returns:a new matrix.
Return type:Matrix
to_4x4()

Return a 4x4 copy of this matrix.

Returns:a new matrix.
Return type:Matrix
to_euler(order, euler_compat)

Return an Euler representation of the rotation matrix (3x3 or 4x4 matrix only).

Parameters:
  • order (string) – Optional rotation order argument in [‘XYZ’, ‘XZY’, ‘YXZ’, ‘YZX’, ‘ZXY’, ‘ZYX’].
  • euler_compat (Euler) – Optional euler argument the new euler will be made compatible with (no axis flipping between them). Useful for converting a series of matrices to animation curves.
Returns:

Euler representation of the matrix.

Return type:

Euler

to_quaternion()

Return a quaternion representation of the rotation matrix.

Returns:Quaternion representation of the rotation matrix.
Return type:Quaternion
to_scale()

Return the scale part of a 3x3 or 4x4 matrix.

Returns:Return the scale of a matrix.
Return type:Vector

Note

This method does not return a negative scale on any axis because it is not possible to obtain this data from the matrix alone.

to_translation()

Return the translation part of a 4 row matrix.

Returns:Return the translation of a matrix.
Return type:Vector
transpose()

Set the matrix to its transpose.

See also

Transpose <https://en.wikipedia.org/wiki/Transpose> on Wikipedia.

transposed()

Return a new, transposed matrix.

Returns:a transposed matrix
Return type:Matrix
zero()

Set all the matrix values to zero.

Return type:Matrix
col

Access the matrix by columns, 3x3 and 4x4 only, (read-only).

Type:Matrix Access
is_frozen

True when this object has been frozen (read-only).

Type:boolean
is_negative

True if this matrix results in a negative scale, 3x3 and 4x4 only, (read-only).

Type:bool
is_orthogonal

True if this matrix is orthogonal, 3x3 and 4x4 only, (read-only).

Type:bool
is_orthogonal_axis_vectors

True if this matrix has got orthogonal axis vectors, 3x3 and 4x4 only, (read-only).

Type:bool
is_wrapped

True when this object wraps external data (read-only).

Type:boolean
median_scale

The average scale applied to each axis (read-only).

Type:float
owner

The item this is wrapping or None (read-only).

row

Access the matrix by rows (default), (read-only).

Type:Matrix Access
translation

The translation component of the matrix.

Type:Vector
class mathutils.Quaternion([seq[, angle]])

This object gives access to Quaternions in Blender.

Parameters:
  • seq (Vector) – size 3 or 4
  • angle (float) – rotation angle, in radians

The constructor takes arguments in various forms:

(), no args
Create an identity quaternion
(wxyz)
Create a quaternion from a (w, x, y, z) vector.
(exponential_map)

Create a quaternion from a 3d exponential map vector.

(axis, angle)

Create a quaternion representing a rotation of angle radians over axis.

See also

to_axis_angle()

import mathutils
import math

# a new rotation 90 degrees about the Y axis
quat_a = mathutils.Quaternion((0.7071068, 0.0, 0.7071068, 0.0))

# passing values to Quaternion's directly can be confusing so axis, angle
# is supported for initializing too
quat_b = mathutils.Quaternion((0.0, 1.0, 0.0), math.radians(90.0))

print("Check quaternions match", quat_a == quat_b)

# like matrices, quaternions can be multiplied to accumulate rotational values
quat_a = mathutils.Quaternion((0.0, 1.0, 0.0), math.radians(90.0))
quat_b = mathutils.Quaternion((0.0, 0.0, 1.0), math.radians(45.0))
quat_out = quat_a @ quat_b

# print the quat, euler degrees for mere mortals and (axis, angle)
print("Final Rotation:")
print(quat_out)
print("%.2f, %.2f, %.2f" % tuple(math.degrees(a) for a in quat_out.to_euler()))
print("(%.2f, %.2f, %.2f), %.2f" % (quat_out.axis[:] +
                                    (math.degrees(quat_out.angle), )))

# multiple rotations can be interpolated using the exponential map
quat_c = mathutils.Quaternion((1.0, 0.0, 0.0), math.radians(15.0))
exp_avg = (quat_a.to_exponential_map() +
           quat_b.to_exponential_map() +
           quat_c.to_exponential_map()) / 3.0
quat_avg = mathutils.Quaternion(exp_avg)
print("Average rotation:")
print(quat_avg)
conjugate()

Set the quaternion to its conjugate (negate x, y, z).

conjugated()

Return a new conjugated quaternion.

Returns:a new quaternion.
Return type:Quaternion
copy()

Returns a copy of this quaternion.

Returns:A copy of the quaternion.
Return type:Quaternion

Note

use this to get a copy of a wrapped quaternion with no reference to the original data.

cross(other)

Return the cross product of this quaternion and another.

Parameters:other (Quaternion) – The other quaternion to perform the cross product with.
Returns:The cross product.
Return type:Quaternion
dot(other)

Return the dot product of this quaternion and another.

Parameters:other (Quaternion) – The other quaternion to perform the dot product with.
Returns:The dot product.
Return type:float
freeze()

Make this object immutable.

After this the object can be hashed, used in dictionaries & sets.

Returns:An instance of this object.
identity()

Set the quaternion to an identity quaternion.

Return type:Quaternion
invert()

Set the quaternion to its inverse.

inverted()

Return a new, inverted quaternion.

Returns:the inverted value.
Return type:Quaternion
negate()

Set the quaternion to its negative.

Return type:Quaternion
normalize()

Normalize the quaternion.

normalized()

Return a new normalized quaternion.

Returns:a normalized copy.
Return type:Quaternion
rotate(other)

Rotates the quaternion by another mathutils value.

Parameters:other (Euler, Quaternion or Matrix) – rotation component of mathutils value
rotation_difference(other)

Returns a quaternion representing the rotational difference.

Parameters:other (Quaternion) – second quaternion.
Returns:the rotational difference between the two quat rotations.
Return type:Quaternion
slerp(other, factor)

Returns the interpolation of two quaternions.

Parameters:
  • other (Quaternion) – value to interpolate with.
  • factor (float) – The interpolation value in [0.0, 1.0].
Returns:

The interpolated rotation.

Return type:

Quaternion

to_axis_angle()

Return the axis, angle representation of the quaternion.

Returns:axis, angle.
Return type:(Vector, float) pair
to_euler(order, euler_compat)

Return Euler representation of the quaternion.

Parameters:
  • order (string) – Optional rotation order argument in [‘XYZ’, ‘XZY’, ‘YXZ’, ‘YZX’, ‘ZXY’, ‘ZYX’].
  • euler_compat (Euler) – Optional euler argument the new euler will be made compatible with (no axis flipping between them). Useful for converting a series of matrices to animation curves.
Returns:

Euler representation of the quaternion.

Return type:

Euler

to_exponential_map()

Return the exponential map representation of the quaternion.

This representation consist of the rotation axis multiplied by the rotation angle. Such a representation is useful for interpolation between multiple orientations.

Returns:exponential map.
Return type:Vector of size 3

To convert back to a quaternion, pass it to the Quaternion constructor.

to_matrix()

Return a matrix representation of the quaternion.

Returns:A 3x3 rotation matrix representation of the quaternion.
Return type:Matrix
angle

Angle of the quaternion.

Type:float
axis

Quaternion axis as a vector.

Type:Vector
is_frozen

True when this object has been frozen (read-only).

Type:boolean
is_wrapped

True when this object wraps external data (read-only).

Type:boolean
magnitude

Size of the quaternion (read-only).

Type:float
owner

The item this is wrapping or None (read-only).

w

Quaternion axis value.

Type:float
x

Quaternion axis value.

Type:float
y

Quaternion axis value.

Type:float
z

Quaternion axis value.

Type:float
class mathutils.Vector(seq)

This object gives access to Vectors in Blender.

Parameters:seq (sequence of numbers) – Components of the vector, must be a sequence of at least two
import mathutils

# zero length vector
vec = mathutils.Vector((0.0, 0.0, 1.0))

# unit length vector
vec_a = vec.normalized()

vec_b = mathutils.Vector((0.0, 1.0, 2.0))

vec2d = mathutils.Vector((1.0, 2.0))
vec3d = mathutils.Vector((1.0, 0.0, 0.0))
vec4d = vec_a.to_4d()

# other mathutuls types
quat = mathutils.Quaternion()
matrix = mathutils.Matrix()

# Comparison operators can be done on Vector classes:

# (In)equality operators == and != test component values, e.g. 1,2,3 != 3,2,1
vec_a == vec_b
vec_a != vec_b

# Ordering operators >, >=, > and <= test vector length.
vec_a > vec_b
vec_a >= vec_b
vec_a < vec_b
vec_a <= vec_b


# Math can be performed on Vector classes
vec_a + vec_b
vec_a - vec_b
vec_a @ vec_b
vec_a * 10.0
matrix @ vec_a
quat @ vec_a
-vec_a


# You can access a vector object like a sequence
x = vec_a[0]
len(vec)
vec_a[:] = vec_b
vec_a[:] = 1.0, 2.0, 3.0
vec2d[:] = vec3d[:2]


# Vectors support 'swizzle' operations
# See https://en.wikipedia.org/wiki/Swizzling_(computer_graphics)
vec.xyz = vec.zyx
vec.xy = vec4d.zw
vec.xyz = vec4d.wzz
vec4d.wxyz = vec.yxyx
classmethod Fill(size, fill=0.0)

Create a vector of length size with all values set to fill.

Parameters:
  • size (int) – The length of the vector to be created.
  • fill (float) – The value used to fill the vector.
classmethod Linspace(start, stop, size)

Create a vector of the specified size which is filled with linearly spaced values between start and stop values.

Parameters:
  • start (int) – The start of the range used to fill the vector.
  • stop (int) – The end of the range used to fill the vector.
  • size (int) – The size of the vector to be created.
classmethod Range(start=0, stop, step=1)

Create a filled with a range of values.

Parameters:
  • start (int) – The start of the range used to fill the vector.
  • stop (int) – The end of the range used to fill the vector.
  • step (int) – The step between successive values in the vector.
classmethod Repeat(vector, size)

Create a vector by repeating the values in vector until the required size is reached.

Parameters:
  • tuple (mathutils.Vector) – The vector to draw values from.
  • size (int) – The size of the vector to be created.
angle(other, fallback=None)

Return the angle between two vectors.

Parameters:
  • other (Vector) – another vector to compare the angle with
  • fallback (any) – return this when the angle can’t be calculated (zero length vector), (instead of raising a ValueError).
Returns:

angle in radians or fallback when given

Return type:

float

angle_signed(other, fallback)

Return the signed angle between two 2D vectors (clockwise is positive).

Parameters:
  • other (Vector) – another vector to compare the angle with
  • fallback (any) – return this when the angle can’t be calculated (zero length vector), (instead of raising a ValueError).
Returns:

angle in radians or fallback when given

Return type:

float

copy()

Returns a copy of this vector.

Returns:A copy of the vector.
Return type:Vector

Note

use this to get a copy of a wrapped vector with no reference to the original data.

cross(other)

Return the cross product of this vector and another.

Parameters:other (Vector) – The other vector to perform the cross product with.
Returns:The cross product.
Return type:Vector or float when 2D vectors are used

Note

both vectors must be 2D or 3D

dot(other)

Return the dot product of this vector and another.

Parameters:other (Vector) – The other vector to perform the dot product with.
Returns:The dot product.
Return type:Vector
freeze()

Make this object immutable.

After this the object can be hashed, used in dictionaries & sets.

Returns:An instance of this object.
lerp(other, factor)

Returns the interpolation of two vectors.

Parameters:
  • other (Vector) – value to interpolate with.
  • factor (float) – The interpolation value in [0.0, 1.0].
Returns:

The interpolated vector.

Return type:

Vector

negate()

Set all values to their negative.

normalize()

Normalize the vector, making the length of the vector always 1.0.

Warning

Normalizing a vector where all values are zero has no effect.

Note

Normalize works for vectors of all sizes, however 4D Vectors w axis is left untouched.

normalized()

Return a new, normalized vector.

Returns:a normalized copy of the vector
Return type:Vector
orthogonal()

Return a perpendicular vector.

Returns:a new vector 90 degrees from this vector.
Return type:Vector

Note

the axis is undefined, only use when any orthogonal vector is acceptable.

project(other)

Return the projection of this vector onto the other.

Parameters:other (Vector) – second vector.
Returns:the parallel projection vector
Return type:Vector
reflect(mirror)

Return the reflection vector from the mirror argument.

Parameters:mirror (Vector) – This vector could be a normal from the reflecting surface.
Returns:The reflected vector matching the size of this vector.
Return type:Vector
resize(size=3)

Resize the vector to have size number of elements.

resize_2d()

Resize the vector to 2D (x, y).

resize_3d()

Resize the vector to 3D (x, y, z).

resize_4d()

Resize the vector to 4D (x, y, z, w).

resized(size=3)

Return a resized copy of the vector with size number of elements.

Returns:a new vector
Return type:Vector
rotate(other)

Rotate the vector by a rotation value.

Parameters:other (Euler, Quaternion or Matrix) – rotation component of mathutils value
rotation_difference(other)

Returns a quaternion representing the rotational difference between this vector and another.

Parameters:other (Vector) – second vector.
Returns:the rotational difference between the two vectors.
Return type:Quaternion

Note

2D vectors raise an AttributeError.

slerp(other, factor, fallback=None)

Returns the interpolation of two non-zero vectors (spherical coordinates).

Parameters:
  • other (Vector) – value to interpolate with.
  • factor (float) – The interpolation value typically in [0.0, 1.0].
  • fallback (any) – return this when the vector can’t be calculated (zero length vector or direct opposites), (instead of raising a ValueError).
Returns:

The interpolated vector.

Return type:

Vector

to_2d()

Return a 2d copy of the vector.

Returns:a new vector
Return type:Vector
to_3d()

Return a 3d copy of the vector.

Returns:a new vector
Return type:Vector
to_4d()

Return a 4d copy of the vector.

Returns:a new vector
Return type:Vector
to_track_quat(track, up)

Return a quaternion rotation from the vector and the track and up axis.

Parameters:
  • track (string) – Track axis in [‘X’, ‘Y’, ‘Z’, ‘-X’, ‘-Y’, ‘-Z’].
  • up (string) – Up axis in [‘X’, ‘Y’, ‘Z’].
Returns:

rotation from the vector and the track and up axis.

Return type:

Quaternion

to_tuple(precision=-1)

Return this vector as a tuple with.

Parameters:precision (int) – The number to round the value to in [-1, 21].
Returns:the values of the vector rounded by precision
Return type:tuple
zero()

Set all values to zero.

is_frozen

True when this object has been frozen (read-only).

Type:boolean
is_wrapped

True when this object wraps external data (read-only).

Type:boolean
length

Vector Length.

Type:float
length_squared

Vector length squared (v.dot(v)).

Type:float
magnitude

Vector Length.

Type:float
owner

The item this is wrapping or None (read-only).

w

Vector W axis (4D Vectors only).

Type:float
ww

Undocumented contribute <https://developer.blender.org/T51061>

www

Undocumented contribute <https://developer.blender.org/T51061>

wwww

Undocumented contribute <https://developer.blender.org/T51061>

wwwx

Undocumented contribute <https://developer.blender.org/T51061>

wwwy

Undocumented contribute <https://developer.blender.org/T51061>

wwwz

Undocumented contribute <https://developer.blender.org/T51061>

wwx

Undocumented contribute <https://developer.blender.org/T51061>

wwxw

Undocumented contribute <https://developer.blender.org/T51061>

wwxx

Undocumented contribute <https://developer.blender.org/T51061>

wwxy

Undocumented contribute <https://developer.blender.org/T51061>

wwxz

Undocumented contribute <https://developer.blender.org/T51061>

wwy

Undocumented contribute <https://developer.blender.org/T51061>

wwyw

Undocumented contribute <https://developer.blender.org/T51061>

wwyx

Undocumented contribute <https://developer.blender.org/T51061>

wwyy

Undocumented contribute <https://developer.blender.org/T51061>

wwyz

Undocumented contribute <https://developer.blender.org/T51061>

wwz

Undocumented contribute <https://developer.blender.org/T51061>

wwzw

Undocumented contribute <https://developer.blender.org/T51061>

wwzx

Undocumented contribute <https://developer.blender.org/T51061>

wwzy

Undocumented contribute <https://developer.blender.org/T51061>

wwzz

Undocumented contribute <https://developer.blender.org/T51061>

wx

Undocumented contribute <https://developer.blender.org/T51061>

wxw

Undocumented contribute <https://developer.blender.org/T51061>

wxww

Undocumented contribute <https://developer.blender.org/T51061>

wxwx

Undocumented contribute <https://developer.blender.org/T51061>

wxwy

Undocumented contribute <https://developer.blender.org/T51061>

wxwz

Undocumented contribute <https://developer.blender.org/T51061>

wxx

Undocumented contribute <https://developer.blender.org/T51061>

wxxw

Undocumented contribute <https://developer.blender.org/T51061>

wxxx

Undocumented contribute <https://developer.blender.org/T51061>

wxxy

Undocumented contribute <https://developer.blender.org/T51061>

wxxz

Undocumented contribute <https://developer.blender.org/T51061>

wxy

Undocumented contribute <https://developer.blender.org/T51061>

wxyw

Undocumented contribute <https://developer.blender.org/T51061>

wxyx

Undocumented contribute <https://developer.blender.org/T51061>

wxyy

Undocumented contribute <https://developer.blender.org/T51061>

wxyz

Undocumented contribute <https://developer.blender.org/T51061>

wxz

Undocumented contribute <https://developer.blender.org/T51061>

wxzw

Undocumented contribute <https://developer.blender.org/T51061>

wxzx

Undocumented contribute <https://developer.blender.org/T51061>

wxzy

Undocumented contribute <https://developer.blender.org/T51061>

wxzz

Undocumented contribute <https://developer.blender.org/T51061>

wy

Undocumented contribute <https://developer.blender.org/T51061>

wyw

Undocumented contribute <https://developer.blender.org/T51061>

wyww

Undocumented contribute <https://developer.blender.org/T51061>

wywx

Undocumented contribute <https://developer.blender.org/T51061>

wywy

Undocumented contribute <https://developer.blender.org/T51061>

wywz

Undocumented contribute <https://developer.blender.org/T51061>

wyx

Undocumented contribute <https://developer.blender.org/T51061>

wyxw

Undocumented contribute <https://developer.blender.org/T51061>

wyxx

Undocumented contribute <https://developer.blender.org/T51061>

wyxy

Undocumented contribute <https://developer.blender.org/T51061>

wyxz

Undocumented contribute <https://developer.blender.org/T51061>

wyy

Undocumented contribute <https://developer.blender.org/T51061>

wyyw

Undocumented contribute <https://developer.blender.org/T51061>

wyyx

Undocumented contribute <https://developer.blender.org/T51061>

wyyy

Undocumented contribute <https://developer.blender.org/T51061>

wyyz

Undocumented contribute <https://developer.blender.org/T51061>

wyz

Undocumented contribute <https://developer.blender.org/T51061>

wyzw

Undocumented contribute <https://developer.blender.org/T51061>

wyzx

Undocumented contribute <https://developer.blender.org/T51061>

wyzy

Undocumented contribute <https://developer.blender.org/T51061>

wyzz

Undocumented contribute <https://developer.blender.org/T51061>

wz

Undocumented contribute <https://developer.blender.org/T51061>

wzw

Undocumented contribute <https://developer.blender.org/T51061>

wzww

Undocumented contribute <https://developer.blender.org/T51061>

wzwx

Undocumented contribute <https://developer.blender.org/T51061>

wzwy

Undocumented contribute <https://developer.blender.org/T51061>

wzwz

Undocumented contribute <https://developer.blender.org/T51061>

wzx

Undocumented contribute <https://developer.blender.org/T51061>

wzxw

Undocumented contribute <https://developer.blender.org/T51061>

wzxx

Undocumented contribute <https://developer.blender.org/T51061>

wzxy

Undocumented contribute <https://developer.blender.org/T51061>

wzxz

Undocumented contribute <https://developer.blender.org/T51061>

wzy

Undocumented contribute <https://developer.blender.org/T51061>

wzyw

Undocumented contribute <https://developer.blender.org/T51061>

wzyx

Undocumented contribute <https://developer.blender.org/T51061>

wzyy

Undocumented contribute <https://developer.blender.org/T51061>

wzyz

Undocumented contribute <https://developer.blender.org/T51061>

wzz

Undocumented contribute <https://developer.blender.org/T51061>

wzzw

Undocumented contribute <https://developer.blender.org/T51061>

wzzx

Undocumented contribute <https://developer.blender.org/T51061>

wzzy

Undocumented contribute <https://developer.blender.org/T51061>

wzzz

Undocumented contribute <https://developer.blender.org/T51061>

x

Vector X axis.

Type:float
xw

Undocumented contribute <https://developer.blender.org/T51061>

xww

Undocumented contribute <https://developer.blender.org/T51061>

xwww

Undocumented contribute <https://developer.blender.org/T51061>

xwwx

Undocumented contribute <https://developer.blender.org/T51061>

xwwy

Undocumented contribute <https://developer.blender.org/T51061>

xwwz

Undocumented contribute <https://developer.blender.org/T51061>

xwx

Undocumented contribute <https://developer.blender.org/T51061>

xwxw

Undocumented contribute <https://developer.blender.org/T51061>

xwxx

Undocumented contribute <https://developer.blender.org/T51061>

xwxy

Undocumented contribute <https://developer.blender.org/T51061>

xwxz

Undocumented contribute <https://developer.blender.org/T51061>

xwy

Undocumented contribute <https://developer.blender.org/T51061>

xwyw

Undocumented contribute <https://developer.blender.org/T51061>

xwyx

Undocumented contribute <https://developer.blender.org/T51061>

xwyy

Undocumented contribute <https://developer.blender.org/T51061>

xwyz

Undocumented contribute <https://developer.blender.org/T51061>

xwz

Undocumented contribute <https://developer.blender.org/T51061>

xwzw

Undocumented contribute <https://developer.blender.org/T51061>

xwzx

Undocumented contribute <https://developer.blender.org/T51061>

xwzy

Undocumented contribute <https://developer.blender.org/T51061>

xwzz

Undocumented contribute <https://developer.blender.org/T51061>

xx

Undocumented contribute <https://developer.blender.org/T51061>

xxw

Undocumented contribute <https://developer.blender.org/T51061>

xxww

Undocumented contribute <https://developer.blender.org/T51061>

xxwx

Undocumented contribute <https://developer.blender.org/T51061>

xxwy

Undocumented contribute <https://developer.blender.org/T51061>

xxwz

Undocumented contribute <https://developer.blender.org/T51061>

xxx

Undocumented contribute <https://developer.blender.org/T51061>

xxxw

Undocumented contribute <https://developer.blender.org/T51061>

xxxx

Undocumented contribute <https://developer.blender.org/T51061>

xxxy

Undocumented contribute <https://developer.blender.org/T51061>

xxxz

Undocumented contribute <https://developer.blender.org/T51061>

xxy

Undocumented contribute <https://developer.blender.org/T51061>

xxyw

Undocumented contribute <https://developer.blender.org/T51061>

xxyx

Undocumented contribute <https://developer.blender.org/T51061>

xxyy

Undocumented contribute <https://developer.blender.org/T51061>

xxyz

Undocumented contribute <https://developer.blender.org/T51061>

xxz

Undocumented contribute <https://developer.blender.org/T51061>

xxzw

Undocumented contribute <https://developer.blender.org/T51061>

xxzx

Undocumented contribute <https://developer.blender.org/T51061>

xxzy

Undocumented contribute <https://developer.blender.org/T51061>

xxzz

Undocumented contribute <https://developer.blender.org/T51061>

xy

Undocumented contribute <https://developer.blender.org/T51061>

xyw

Undocumented contribute <https://developer.blender.org/T51061>

xyww

Undocumented contribute <https://developer.blender.org/T51061>

xywx

Undocumented contribute <https://developer.blender.org/T51061>

xywy

Undocumented contribute <https://developer.blender.org/T51061>

xywz

Undocumented contribute <https://developer.blender.org/T51061>

xyx

Undocumented contribute <https://developer.blender.org/T51061>

xyxw

Undocumented contribute <https://developer.blender.org/T51061>

xyxx

Undocumented contribute <https://developer.blender.org/T51061>

xyxy

Undocumented contribute <https://developer.blender.org/T51061>

xyxz

Undocumented contribute <https://developer.blender.org/T51061>

xyy

Undocumented contribute <https://developer.blender.org/T51061>

xyyw

Undocumented contribute <https://developer.blender.org/T51061>

xyyx

Undocumented contribute <https://developer.blender.org/T51061>

xyyy

Undocumented contribute <https://developer.blender.org/T51061>

xyyz

Undocumented contribute <https://developer.blender.org/T51061>

xyz

Undocumented contribute <https://developer.blender.org/T51061>

xyzw

Undocumented contribute <https://developer.blender.org/T51061>

xyzx

Undocumented contribute <https://developer.blender.org/T51061>

xyzy

Undocumented contribute <https://developer.blender.org/T51061>

xyzz

Undocumented contribute <https://developer.blender.org/T51061>

xz

Undocumented contribute <https://developer.blender.org/T51061>

xzw

Undocumented contribute <https://developer.blender.org/T51061>

xzww

Undocumented contribute <https://developer.blender.org/T51061>

xzwx

Undocumented contribute <https://developer.blender.org/T51061>

xzwy

Undocumented contribute <https://developer.blender.org/T51061>

xzwz

Undocumented contribute <https://developer.blender.org/T51061>

xzx

Undocumented contribute <https://developer.blender.org/T51061>

xzxw

Undocumented contribute <https://developer.blender.org/T51061>

xzxx

Undocumented contribute <https://developer.blender.org/T51061>

xzxy

Undocumented contribute <https://developer.blender.org/T51061>

xzxz

Undocumented contribute <https://developer.blender.org/T51061>

xzy

Undocumented contribute <https://developer.blender.org/T51061>

xzyw

Undocumented contribute <https://developer.blender.org/T51061>

xzyx

Undocumented contribute <https://developer.blender.org/T51061>

xzyy

Undocumented contribute <https://developer.blender.org/T51061>

xzyz

Undocumented contribute <https://developer.blender.org/T51061>

xzz

Undocumented contribute <https://developer.blender.org/T51061>

xzzw

Undocumented contribute <https://developer.blender.org/T51061>

xzzx

Undocumented contribute <https://developer.blender.org/T51061>

xzzy

Undocumented contribute <https://developer.blender.org/T51061>

xzzz

Undocumented contribute <https://developer.blender.org/T51061>

y

Vector Y axis.

Type:float
yw

Undocumented contribute <https://developer.blender.org/T51061>

yww

Undocumented contribute <https://developer.blender.org/T51061>

ywww

Undocumented contribute <https://developer.blender.org/T51061>

ywwx

Undocumented contribute <https://developer.blender.org/T51061>

ywwy

Undocumented contribute <https://developer.blender.org/T51061>

ywwz

Undocumented contribute <https://developer.blender.org/T51061>

ywx

Undocumented contribute <https://developer.blender.org/T51061>

ywxw

Undocumented contribute <https://developer.blender.org/T51061>

ywxx

Undocumented contribute <https://developer.blender.org/T51061>

ywxy

Undocumented contribute <https://developer.blender.org/T51061>

ywxz

Undocumented contribute <https://developer.blender.org/T51061>

ywy

Undocumented contribute <https://developer.blender.org/T51061>

ywyw

Undocumented contribute <https://developer.blender.org/T51061>

ywyx

Undocumented contribute <https://developer.blender.org/T51061>

ywyy

Undocumented contribute <https://developer.blender.org/T51061>

ywyz

Undocumented contribute <https://developer.blender.org/T51061>

ywz

Undocumented contribute <https://developer.blender.org/T51061>

ywzw

Undocumented contribute <https://developer.blender.org/T51061>

ywzx

Undocumented contribute <https://developer.blender.org/T51061>

ywzy

Undocumented contribute <https://developer.blender.org/T51061>

ywzz

Undocumented contribute <https://developer.blender.org/T51061>

yx

Undocumented contribute <https://developer.blender.org/T51061>

yxw

Undocumented contribute <https://developer.blender.org/T51061>

yxww

Undocumented contribute <https://developer.blender.org/T51061>

yxwx

Undocumented contribute <https://developer.blender.org/T51061>

yxwy

Undocumented contribute <https://developer.blender.org/T51061>

yxwz

Undocumented contribute <https://developer.blender.org/T51061>

yxx

Undocumented contribute <https://developer.blender.org/T51061>

yxxw

Undocumented contribute <https://developer.blender.org/T51061>

yxxx

Undocumented contribute <https://developer.blender.org/T51061>

yxxy

Undocumented contribute <https://developer.blender.org/T51061>

yxxz

Undocumented contribute <https://developer.blender.org/T51061>

yxy

Undocumented contribute <https://developer.blender.org/T51061>

yxyw

Undocumented contribute <https://developer.blender.org/T51061>

yxyx

Undocumented contribute <https://developer.blender.org/T51061>

yxyy

Undocumented contribute <https://developer.blender.org/T51061>

yxyz

Undocumented contribute <https://developer.blender.org/T51061>

yxz

Undocumented contribute <https://developer.blender.org/T51061>

yxzw

Undocumented contribute <https://developer.blender.org/T51061>

yxzx

Undocumented contribute <https://developer.blender.org/T51061>

yxzy

Undocumented contribute <https://developer.blender.org/T51061>

yxzz

Undocumented contribute <https://developer.blender.org/T51061>

yy

Undocumented contribute <https://developer.blender.org/T51061>

yyw

Undocumented contribute <https://developer.blender.org/T51061>

yyww

Undocumented contribute <https://developer.blender.org/T51061>

yywx

Undocumented contribute <https://developer.blender.org/T51061>

yywy

Undocumented contribute <https://developer.blender.org/T51061>

yywz

Undocumented contribute <https://developer.blender.org/T51061>

yyx

Undocumented contribute <https://developer.blender.org/T51061>

yyxw

Undocumented contribute <https://developer.blender.org/T51061>

yyxx

Undocumented contribute <https://developer.blender.org/T51061>

yyxy

Undocumented contribute <https://developer.blender.org/T51061>

yyxz

Undocumented contribute <https://developer.blender.org/T51061>

yyy

Undocumented contribute <https://developer.blender.org/T51061>

yyyw

Undocumented contribute <https://developer.blender.org/T51061>

yyyx

Undocumented contribute <https://developer.blender.org/T51061>

yyyy

Undocumented contribute <https://developer.blender.org/T51061>

yyyz

Undocumented contribute <https://developer.blender.org/T51061>

yyz

Undocumented contribute <https://developer.blender.org/T51061>

yyzw

Undocumented contribute <https://developer.blender.org/T51061>

yyzx

Undocumented contribute <https://developer.blender.org/T51061>

yyzy

Undocumented contribute <https://developer.blender.org/T51061>

yyzz

Undocumented contribute <https://developer.blender.org/T51061>

yz

Undocumented contribute <https://developer.blender.org/T51061>

yzw

Undocumented contribute <https://developer.blender.org/T51061>

yzww

Undocumented contribute <https://developer.blender.org/T51061>

yzwx

Undocumented contribute <https://developer.blender.org/T51061>

yzwy

Undocumented contribute <https://developer.blender.org/T51061>

yzwz

Undocumented contribute <https://developer.blender.org/T51061>

yzx

Undocumented contribute <https://developer.blender.org/T51061>

yzxw

Undocumented contribute <https://developer.blender.org/T51061>

yzxx

Undocumented contribute <https://developer.blender.org/T51061>

yzxy

Undocumented contribute <https://developer.blender.org/T51061>

yzxz

Undocumented contribute <https://developer.blender.org/T51061>

yzy

Undocumented contribute <https://developer.blender.org/T51061>

yzyw

Undocumented contribute <https://developer.blender.org/T51061>

yzyx

Undocumented contribute <https://developer.blender.org/T51061>

yzyy

Undocumented contribute <https://developer.blender.org/T51061>

yzyz

Undocumented contribute <https://developer.blender.org/T51061>

yzz

Undocumented contribute <https://developer.blender.org/T51061>

yzzw

Undocumented contribute <https://developer.blender.org/T51061>

yzzx

Undocumented contribute <https://developer.blender.org/T51061>

yzzy

Undocumented contribute <https://developer.blender.org/T51061>

yzzz

Undocumented contribute <https://developer.blender.org/T51061>

z

Vector Z axis (3D Vectors only).

Type:float
zw

Undocumented contribute <https://developer.blender.org/T51061>

zww

Undocumented contribute <https://developer.blender.org/T51061>

zwww

Undocumented contribute <https://developer.blender.org/T51061>

zwwx

Undocumented contribute <https://developer.blender.org/T51061>

zwwy

Undocumented contribute <https://developer.blender.org/T51061>

zwwz

Undocumented contribute <https://developer.blender.org/T51061>

zwx

Undocumented contribute <https://developer.blender.org/T51061>

zwxw

Undocumented contribute <https://developer.blender.org/T51061>

zwxx

Undocumented contribute <https://developer.blender.org/T51061>

zwxy

Undocumented contribute <https://developer.blender.org/T51061>

zwxz

Undocumented contribute <https://developer.blender.org/T51061>

zwy

Undocumented contribute <https://developer.blender.org/T51061>

zwyw

Undocumented contribute <https://developer.blender.org/T51061>

zwyx

Undocumented contribute <https://developer.blender.org/T51061>

zwyy

Undocumented contribute <https://developer.blender.org/T51061>

zwyz

Undocumented contribute <https://developer.blender.org/T51061>

zwz

Undocumented contribute <https://developer.blender.org/T51061>

zwzw

Undocumented contribute <https://developer.blender.org/T51061>

zwzx

Undocumented contribute <https://developer.blender.org/T51061>

zwzy

Undocumented contribute <https://developer.blender.org/T51061>

zwzz

Undocumented contribute <https://developer.blender.org/T51061>

zx

Undocumented contribute <https://developer.blender.org/T51061>

zxw

Undocumented contribute <https://developer.blender.org/T51061>

zxww

Undocumented contribute <https://developer.blender.org/T51061>

zxwx

Undocumented contribute <https://developer.blender.org/T51061>

zxwy

Undocumented contribute <https://developer.blender.org/T51061>

zxwz

Undocumented contribute <https://developer.blender.org/T51061>

zxx

Undocumented contribute <https://developer.blender.org/T51061>

zxxw

Undocumented contribute <https://developer.blender.org/T51061>

zxxx

Undocumented contribute <https://developer.blender.org/T51061>

zxxy

Undocumented contribute <https://developer.blender.org/T51061>

zxxz

Undocumented contribute <https://developer.blender.org/T51061>

zxy

Undocumented contribute <https://developer.blender.org/T51061>

zxyw

Undocumented contribute <https://developer.blender.org/T51061>

zxyx

Undocumented contribute <https://developer.blender.org/T51061>

zxyy

Undocumented contribute <https://developer.blender.org/T51061>

zxyz

Undocumented contribute <https://developer.blender.org/T51061>

zxz

Undocumented contribute <https://developer.blender.org/T51061>

zxzw

Undocumented contribute <https://developer.blender.org/T51061>

zxzx

Undocumented contribute <https://developer.blender.org/T51061>

zxzy

Undocumented contribute <https://developer.blender.org/T51061>

zxzz

Undocumented contribute <https://developer.blender.org/T51061>

zy

Undocumented contribute <https://developer.blender.org/T51061>

zyw

Undocumented contribute <https://developer.blender.org/T51061>

zyww

Undocumented contribute <https://developer.blender.org/T51061>

zywx

Undocumented contribute <https://developer.blender.org/T51061>

zywy

Undocumented contribute <https://developer.blender.org/T51061>

zywz

Undocumented contribute <https://developer.blender.org/T51061>

zyx

Undocumented contribute <https://developer.blender.org/T51061>

zyxw

Undocumented contribute <https://developer.blender.org/T51061>

zyxx

Undocumented contribute <https://developer.blender.org/T51061>

zyxy

Undocumented contribute <https://developer.blender.org/T51061>

zyxz

Undocumented contribute <https://developer.blender.org/T51061>

zyy

Undocumented contribute <https://developer.blender.org/T51061>

zyyw

Undocumented contribute <https://developer.blender.org/T51061>

zyyx

Undocumented contribute <https://developer.blender.org/T51061>

zyyy

Undocumented contribute <https://developer.blender.org/T51061>

zyyz

Undocumented contribute <https://developer.blender.org/T51061>

zyz

Undocumented contribute <https://developer.blender.org/T51061>

zyzw

Undocumented contribute <https://developer.blender.org/T51061>

zyzx

Undocumented contribute <https://developer.blender.org/T51061>

zyzy

Undocumented contribute <https://developer.blender.org/T51061>

zyzz

Undocumented contribute <https://developer.blender.org/T51061>

zz

Undocumented contribute <https://developer.blender.org/T51061>

zzw

Undocumented contribute <https://developer.blender.org/T51061>

zzww

Undocumented contribute <https://developer.blender.org/T51061>

zzwx

Undocumented contribute <https://developer.blender.org/T51061>

zzwy

Undocumented contribute <https://developer.blender.org/T51061>

zzwz

Undocumented contribute <https://developer.blender.org/T51061>

zzx

Undocumented contribute <https://developer.blender.org/T51061>

zzxw

Undocumented contribute <https://developer.blender.org/T51061>

zzxx

Undocumented contribute <https://developer.blender.org/T51061>

zzxy

Undocumented contribute <https://developer.blender.org/T51061>

zzxz

Undocumented contribute <https://developer.blender.org/T51061>

zzy

Undocumented contribute <https://developer.blender.org/T51061>

zzyw

Undocumented contribute <https://developer.blender.org/T51061>

zzyx

Undocumented contribute <https://developer.blender.org/T51061>

zzyy

Undocumented contribute <https://developer.blender.org/T51061>

zzyz

Undocumented contribute <https://developer.blender.org/T51061>

zzz

Undocumented contribute <https://developer.blender.org/T51061>

zzzw

Undocumented contribute <https://developer.blender.org/T51061>

zzzx

Undocumented contribute <https://developer.blender.org/T51061>

zzzy

Undocumented contribute <https://developer.blender.org/T51061>

zzzz

Undocumented contribute <https://developer.blender.org/T51061>