c4d.Matrix¶
- 
class c4d.Matrix¶
- A type to represent a transform. - See also - Warning - The Matrix type does not support the function copy.copy(), please use the - Matrixcopy constructor instead.- >>> import c4d >>> import copy >>> # An identity matrix and its Python object id. >>> m = c4d.Matrix() >>> id(m), m (2671923600768, Matrix(v1: (1, 0, 0); v2: (0, 1, 0); v3: (0, 0, 1); off: (0, 0, 0))) >>> # We are only creating a reference to the same object. >>> ref = m >>> id(ref), ref (2671923600768, Matrix(v1: (1, 0, 0); v2: (0, 1, 0); v3: (0, 0, 1); off: (0, 0, 0))) >>> # Cinema's types usually do not work with Python's copy module. >>> copy.deepcopy(m) ... TypeError: can't pickle c4d.Matrix objects. >>> # But we can copy objects via copy constructors. >>> copy = c4d.Matrix(m) >>> id(copy), copy (2671923600512, Matrix(v1: (1, 0, 0); v2: (0, 1, 0); v3: (0, 0, 1); off: (0, 0, 0))) 
Attributes
Methods Signatures
| Initializes a new  Matrix. | |
| Returns a string representation of the Matrix object. | |
| Adds two matrices. | |
| Subtracts two matrices. | |
| Computes the product of the  Matrixand another type. | |
| Computes the product of another type and the  Matrix. | |
| Divides each element in the matrix by a scalar. | |
| Not implemented. | |
| Inverts the matrix. | |
| Checks if two matrices are equal. | |
| Checks if two matrices are not equal. | |
| raise NotImplemented. | |
| raise NotImplemented. | |
| raise NotImplemented. | |
| raise NotImplemented. | 
| Normalizes the frame of the instance. | |
| Returns the normalized matrix for the instance. | |
| Multiply the vector by the matrix, this includes any translation in the matrix. | |
| Multiply the vector by the matrix, this does not include any translation. | |
| Returns the matrix’ tensor. | |
| Performs uniform matrix scaling (float) or non-uniform matrix scaling (vector). | |
| Returns the scale stored by the matrix. | 
Methods Documentation
- 
Matrix.__init__(self, off=Vector(0), v1=Vector(1, 0, 0), v2=Vector(0, 1, 0), v3=Vector(0, 0, 1))¶
- Initializes a newMatrix.A Matrix is the type to represent linear transforms in Cinema 4D. A Matrix has four components:- v1 is the x-axis or the basis vector i of the frame of the linear transform defined by an Matrix instance. 
- v2 is the y-axis or the basis vector j of the frame of the linear transform defined by an Matrix instance. 
- v3 is the z-axis or the basis vector k of the frame of the linear transform defined by an Matrix instance. 
- off is the additional translation component for an - c4d.Matrixinstance.
 A matrix can be instantiated in multiple ways, since all its constructor arguments are optional: >>> # The Matrix constructor with no arguments will give us the identity >>> # matrix with the zero vector as the offset. >>> c4d.Matrix() Matrix(v1: (1, 0, 0); v2: (0, 1, 0); v3: (0, 0, 1); off: (0, 0, 0) >>> # Here we define only the frame of the Matrix in its arguments, it >>> # will rotate by 90° ccw on the z-axis. >>> m = c4d.Matrix(v1=c4d.Vector( 0, 1, 0), v2=c4d.Vector(-1, 0, 0), v3=c4d.Vector( 0, 0, 1)) >>> m Matrix(v1: (0, 1, 0); v2: (-1, 0, 0); v3: (0, 0, 1); off: (0, 0, 0)) >>> # We can also modify components of an instance. >>> m.off = c4d.Vector(100, 0, 0) >>> m Matrix(v1: (0, 1, 0); v2: (-1, 0, 0); v3: (0, 0, 1); off: (100, 0, 0)) - Parameters
- off (Optional[c4d.Vector]) – The translation vector. 
- v1 (Optional[c4d.Vector]) – The X axis of a left-handed coordinate system. 
- v2 (Optional[c4d.Vector]) – The Y axis of a left-handed coordinate system. 
- v3 (Optional[c4d.Vector]) – The Z axis of a left-handed coordinate system. 
 
 
- 
Matrix.__str__(self)¶
- Returns a string representation of the Matrix object.Called if str() is invoked on aMatrixobject. See object.__str__() for more information on Python’s data model.>>> m = c4d.Matrix(v1=c4d.Vector( 0, 1, 0), v2=c4d.Vector(-1, 0, 0), v3=c4d.Vector( 0, 0, 1)) >>> print(m) Matrix(v1: (0, 1, 0); v2: (-1, 0, 0); v3: (0, 0, 1); off: (0, 0, 0)) - Return type
- str 
- Returns
- The Vector as string. 
 
- 
Matrix.__add__(self, other)¶
- Adds two matrices. - Parameters
- other (c4d.Matrix) – The other matrix. 
- Return type
- Returns
- The result matrix. 
 
- 
Matrix.__sub__(self, other)¶
- Subtracts two matrices. - Parameters
- other (c4d.Matrix) – The other matrix. 
- Return type
- Returns
- The result matrix. 
 
- 
Matrix.__mul__(self, other)¶
- Computes the product of theMatrixand another type.If other is of typeMatrix, it computes the matrix productself * other.If other is of typeVector, it will return the transform of other by self, including the translation defined in self.>>> import math >>> u = c4d.Vector(1, 0, 0) >>> quarter_pi = math.pi * .25 >>> # A transform rotating by 90° ccw and translating by 100 units on v3. M = c4d.Matrix(v1=c4d.Vector(0, 1, 0), v2=c4d.Vector(-1, 0, 0), v3=c4d.Vector(0, 0, 1), off=c4d.Vector(0, 0, 100)) >>> # Transforms u by M, including translations. >>> M * u Vector(0, 1, 100) >>> # A transform rotating by 45° ccw on the x-axis. >>> X = c4d.utils.MatrixRotX(quarter_pi) >>> X Matrix(v1: (1, 0, 0); v2: (0, 0.707, -0.707); v3: (0, 0.707, 0.707); off: (0, 0, 0)) >>> # A transform rotating by 45° cw on the y-axis. >>> Y = c4d.utils.MatrixRotY(-quarter_pi) >>> Y Matrix(v1: (0.707, 0, -0.707); v2: (0, 1, 0); v3: (0.707, 0, 0.707); off: (0, 0, 0)) >>> # A transform rotating by 45° ccw on the z-axis. >>> Z = c4d.utils.MatrixRotZ(quarter_pi) >>> Z Matrix(v1: (0.707, -0.707, 0); v2: (0.707, 0.707, 0); v3: (0, 0, 1); off: (0, 0, 0)) >>> # The product of the three matrices is a matrix rotating by 45° ccw on x, then 45° cw >>> # on y and finally by 45° ccw on z. >>> X * Y * Z Matrix(v1: (0.5, -0.854, 0.146); v2: (0.5, 0.146, -0.854); v3: (0.707, 0.5, 0.5); off: (0, 0, 0)) >>> # Due to matrix multiplication not being commutative, executing the transforms in a >>> # different order will yield another matrix product. >>> Z * Y * X Matrix(v1: (0.5, -0.5, -0.707); v2: (0.146, 0.854, -0.5); v3: (0.854, 0.146, 0.5); off: (0, 0, 0)) - Parameters
- other (Union[c4d.Matrix, c4d.Vector, int, float]) – The other operand. 
- Return type
- Union[c4d.Matrix, c4d.Vector] 
- Returns
- The resulting matrix or vector. 
 
- 
Matrix.__rmul__(self, other)¶
- Computes the product of another type and theMatrix.If other is of typeVector, it will return the transform of other by self, including the translation defined in self.If other is a numeric type, it will scale each basis vector in self with it.>>> u = c4d.Vector(1, 0, 0) >>> # A transform rotating by 90° ccw and translating by 100 units on v3. >>> M = c4d.Matrix(v1=c4d.Vector( 0, 1, 0), v2=c4d.Vector(-1, 0, 0), v3=c4d.Vector( 0, 0, 1), off=c4d.Vector(0, 0, 100)) >>> # Transforms u by M, including translations. >>> u * M Vector(0, 1, 100) >>> # Scale each component of M by the factor of two. >>> 2 * M Matrix(v1: (0, 2, 0); v2: (-2, 0, 0); v3: (0, 0, 2); off: (0, 0, 200)) - Parameters
- other (Union[int, float, c4d.Vector]) – The other operand. 
- Return type
- Union[c4d.Vector, c4d.Matrix] 
- Returns
- The resulting matrix or vector. 
 
- 
Matrix.__div__(self, other)¶
- Divides each element in the matrix by a scalar. - Parameters
- other (float) – The scalar. 
- Return type
- Returns
- The result matrix. 
 
- 
Matrix.__rdiv__(self, other)¶
- Not implemented. - Raise
- TypeError. 
 
- 
Matrix.__invert__(self)¶
- Inverts the matrix. - >>> u = c4d.Vector(1, 0, 0) >>> # A transform rotating by 90° ccw and translating by 100 units on v3. >>> M = c4d.Matrix(v1=c4d.Vector(0, 1, 0), v2=c4d.Vector(-1, 0, 0), v3=c4d.Vector(0, 0, 1), off=c4d.Vector(0, 0, 100)) >>> M Matrix(v1: (0, 1, 0); v2: (-1, 0, 0); v3: (0, 0, 1); off: (0, 0, 100)) >>> The inverse of M is the inverse transform of M. >>> ~M Matrix(v1: (0, -1, 0); v2: (1, 0, 0); v3: (0, 0, 1); off: (0, 0, -100)) >>> Applying the inverse of M to the point u transformed by M will yield u again. >>> v = u * M >>> v Vector(0, 1, 100) >>> v * ~M Vector(1, 0, 0) - Return type
- Returns
- The inverted matrix. 
 
- 
Matrix.__eq__(self, other)¶
- Checks if two matrices are equal. - Parameters
- other (c4d.Matrix) – The other matrix. 
- Return type
- bool 
- Returns
- True if matrices are equal. 
 
- 
Matrix.__ne__(self, other)¶
- Checks if two matrices are not equal. - Parameters
- other (c4d.Matrix) – The other matrix. 
- Return type
- bool 
- Returns
- True if matrices are not equal. 
 
- 
Matrix.__ge__(self, other)¶
- raise NotImplemented. 
- 
Matrix.__gt__(self, other)¶
- raise NotImplemented. 
- 
Matrix.__le__(self, other)¶
- raise NotImplemented. 
- 
Matrix.__lt__(self, other)¶
- raise NotImplemented. 
- 
Matrix.Normalize(self)¶
- Normalizes the frame of the instance. - >>> # A transform rotating by 90° ccw and translating by 100 units on v3. >>> M = c4d.Matrix(v1=c4d.Vector( 0, 1, 0), v2=c4d.Vector(-1, 0, 0), v3=c4d.Vector( 0, 0, 1), off=c4d.Vector(0, 0, 100)) >>> # Scale each component of M by the factor of two. >>> N = 2 * M >>> N Matrix(v1: (0, 2, 0); v2: (-2, 0, 0); v3: (0, 0, 2); off: (0, 0, 200)) >>> # Normalize the three basis vectors of N, i.e., set them to a length of 1. >>> N.Normalize() >>> N Matrix(v1: (0, 1, 0); v2: (-1, 0, 0); v3: (0, 0, 1); off: (0, 0, 200)) 
- 
Matrix.GetNormalized(self)¶
- Returns the normalized matrix for the instance. - >>> # A transform rotating by 90° ccw and translating by 100 units on v3. >>> M = c4d.Matrix(v1=c4d.Vector( 0, 1, 0), v2=c4d.Vector(-1, 0, 0), v3=c4d.Vector( 0, 0, 1), off=c4d.Vector(0, 0, 100)) >>> # Scale each component of M by the factor of two. >>> N = 2 * M >>> N Matrix(v1: (0, 2, 0); v2: (-2, 0, 0); v3: (0, 0, 2); off: (0, 0, 200)) >>> # Returns the normalized form of N. >>> N.GetNormalized() Matrix(v1: (0, 1, 0); v2: (-1, 0, 0); v3: (0, 0, 1); off: (0, 0, 200)) - Return type
- Returns
- The normalized matrix. 
 
- 
Matrix.Mul(self, v)¶
- Multiply the vector by the matrix, this includes any translation in the matrix. - Note - This is a verbose form of Vector.__mul__ <c4d.Vector.__mul__. - Parameters
- v (c4d.Vector) – The vector to multiply. 
- Return type
- Returns
- The resulting vector. 
 
- 
Matrix.MulV(self, v)¶
- Multiply the vector by the matrix, this does not include any translation. - Note - This is a verbose form of Vector.__xor__ <c4d.Vector.__xor__. - Parameters
- v (c4d.Vector) – The vector to multiply. 
- Return type
- Returns
- The resulting vector. 
 
- 
Matrix.GetTensorMatrix(self)¶
- Returns the matrix’ tensor. - Return type
- Returns
- The tensor matrix. 
 
- 
Matrix.Scale(self, v)¶
- Performs uniform matrix scaling (float) or non-uniform matrix scaling (vector). - Parameters
- v (Union[c4d.Vector, float]) – The scaling scalar. 
 
- 
Matrix.GetScale(self)¶
- Returns the scale stored by the matrix. - Returns
- The scale. 
- Return type