removed the unpopular 'ed' functions, and added .copy() to Mathutils vector and matrix
(inverted, normalized, transposed) making an inverted copy of an objects matrix used to be.. (2.42) imat= Mathutils.Matrix(ob.matrixWorld) imat.invert() # inverted.. I added but now removed imat= ob.matrixWorld.inverted() # with copy (current functionality)... imat= ob.matrixWorld.copy().invert()
This commit is contained in:
		@@ -130,7 +130,7 @@ def PolyFill(polylines):
 | 
			
		||||
def CopyVec(vector):
 | 
			
		||||
  """
 | 
			
		||||
  Create a copy of the Vector object.
 | 
			
		||||
  @attention: B{DEPRECATED} use Vector(vector) instead.
 | 
			
		||||
  @attention: B{DEPRECATED} use vector.copy() instead.
 | 
			
		||||
  @type vector: Vector object.
 | 
			
		||||
  @param vector: A 2d,3d or 4d vector to be copied.
 | 
			
		||||
  @rtype: Vector object.
 | 
			
		||||
@@ -298,10 +298,9 @@ def CopyMat(matrix):
 | 
			
		||||
  @param matrix: A 2d,3d or 4d matrix to be copied.
 | 
			
		||||
  @rtype: Matrix object.
 | 
			
		||||
  @return: A new matrix object which is a copy of the one passed in.
 | 
			
		||||
  @attention: B{DEPRECATED} You should use the matrix constructor to create
 | 
			
		||||
  a copy of a matrix
 | 
			
		||||
  @attention: B{DEPRECATED} Use the matrix copy funtion to make a copy.
 | 
			
		||||
  Example::
 | 
			
		||||
      newMat = Matrix(myMat)
 | 
			
		||||
      newMat = myMat.copy()
 | 
			
		||||
  """
 | 
			
		||||
 | 
			
		||||
def MatMultVec(mat, vec):
 | 
			
		||||
@@ -429,7 +428,7 @@ class Vector:
 | 
			
		||||
      - vec * matrix
 | 
			
		||||
      - vec * vec
 | 
			
		||||
      - vec * quat
 | 
			
		||||
      - -vec (this is shorthand for negate())
 | 
			
		||||
      - -vec
 | 
			
		||||
  @note: You can access a vector object like a sequence
 | 
			
		||||
      - x = vector[0]
 | 
			
		||||
  @attention: Vector data can be wrapped or non-wrapped. When a object is wrapped it
 | 
			
		||||
@@ -468,10 +467,16 @@ class Vector:
 | 
			
		||||
        - ():     An empty 3 dimensional vector.
 | 
			
		||||
    """
 | 
			
		||||
 | 
			
		||||
  def copy():
 | 
			
		||||
    """
 | 
			
		||||
    Returns a copy of this vector
 | 
			
		||||
    @return: a copy of itself
 | 
			
		||||
    """
 | 
			
		||||
 | 
			
		||||
  def zero():
 | 
			
		||||
    """
 | 
			
		||||
    Set all values to zero.
 | 
			
		||||
    @return: a copy of itself
 | 
			
		||||
    @return: an instance of itself
 | 
			
		||||
    """
 | 
			
		||||
 | 
			
		||||
  def normalize():
 | 
			
		||||
@@ -479,22 +484,13 @@ class Vector:
 | 
			
		||||
    Normalize the vector, making the length of the vector always 1.0
 | 
			
		||||
    @note: Normalize works for vectors of all sizes, however 4D Vectors w axis is left untouched.
 | 
			
		||||
    @note: Normalizing a vector where all values are zero results in all axis having a nan value (not a number).
 | 
			
		||||
    @return: None
 | 
			
		||||
    """
 | 
			
		||||
 | 
			
		||||
  def normalized():
 | 
			
		||||
    """
 | 
			
		||||
    Same as normalize except it returns a normalized copy of the vector, leaving the original intact.
 | 
			
		||||
    @return: a normalized copy of the vector
 | 
			
		||||
    @return: an instance of itself
 | 
			
		||||
    """
 | 
			
		||||
 | 
			
		||||
  def negate():
 | 
			
		||||
    """
 | 
			
		||||
    Set all values to their negative.
 | 
			
		||||
    @return: a copy of itself
 | 
			
		||||
    @attention: B{DEPRECATED} You can use -vector instead
 | 
			
		||||
    Example::
 | 
			
		||||
        negVector = -myVec
 | 
			
		||||
    @return: an instance of its self
 | 
			
		||||
    """
 | 
			
		||||
 | 
			
		||||
  def resize2D():
 | 
			
		||||
@@ -776,6 +772,13 @@ class Matrix:
 | 
			
		||||
  def zero():
 | 
			
		||||
    """
 | 
			
		||||
    Set all matrix values to 0.
 | 
			
		||||
    @return: an instance of itself
 | 
			
		||||
    """
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
  def copy():
 | 
			
		||||
    """
 | 
			
		||||
    Returns a copy of this matrix
 | 
			
		||||
    @return: a copy of itself
 | 
			
		||||
    """
 | 
			
		||||
 | 
			
		||||
@@ -785,7 +788,7 @@ class Matrix:
 | 
			
		||||
    An object with zero location and rotation, a scale of 1, will have an identity matrix.
 | 
			
		||||
 | 
			
		||||
    See U{http://en.wikipedia.org/wiki/Identity_matrix}
 | 
			
		||||
    @return: a copy of itself
 | 
			
		||||
    @return: an instance of itself
 | 
			
		||||
    """
 | 
			
		||||
 | 
			
		||||
  def transpose():
 | 
			
		||||
@@ -796,12 +799,6 @@ class Matrix:
 | 
			
		||||
    @return: None
 | 
			
		||||
    """
 | 
			
		||||
 | 
			
		||||
  def transposed():
 | 
			
		||||
    """
 | 
			
		||||
    Same as transpose() except a transposed copy of the matrix is returned leaving the original intact.
 | 
			
		||||
    @return: a transposed copy of the matrix
 | 
			
		||||
    """
 | 
			
		||||
 | 
			
		||||
  def determinant():
 | 
			
		||||
    """
 | 
			
		||||
    Return the determinant of a matrix.
 | 
			
		||||
@@ -816,16 +813,10 @@ class Matrix:
 | 
			
		||||
    Set the matrix to its inverse.
 | 
			
		||||
    
 | 
			
		||||
    See U{http://en.wikipedia.org/wiki/Inverse_matrix}
 | 
			
		||||
    @return: a copy of itself
 | 
			
		||||
    @return: an instance of itself.
 | 
			
		||||
    @raise ValueError: When matrix is singular.
 | 
			
		||||
    """
 | 
			
		||||
 | 
			
		||||
  def inverted():
 | 
			
		||||
    """
 | 
			
		||||
    Same as invert() except an inverted copy of the matrix is returned leaving the original intact.
 | 
			
		||||
    @return: an inverted copy of the matrix
 | 
			
		||||
    """
 | 
			
		||||
 | 
			
		||||
  def rotationPart():
 | 
			
		||||
    """
 | 
			
		||||
    Return the 3d submatrix corresponding to the linear term of the 
 | 
			
		||||
@@ -854,7 +845,7 @@ class Matrix:
 | 
			
		||||
  def resize4x4():
 | 
			
		||||
    """
 | 
			
		||||
    Resize the matrix to by 4x4
 | 
			
		||||
    @return: a copy of itself
 | 
			
		||||
    @return: an instance of itself.
 | 
			
		||||
    """
 | 
			
		||||
  
 | 
			
		||||
  def toEuler():
 | 
			
		||||
 
 | 
			
		||||
@@ -39,31 +39,30 @@
 | 
			
		||||
char Matrix_Zero_doc[] = "() - set all values in the matrix to 0";
 | 
			
		||||
char Matrix_Identity_doc[] = "() - set the square matrix to it's identity matrix";
 | 
			
		||||
char Matrix_Transpose_doc[] = "() - set the matrix to it's transpose";
 | 
			
		||||
char Matrix_Transposed_doc[] = "() - return a copy transposed copy of the matrix";
 | 
			
		||||
char Matrix_Determinant_doc[] = "() - return the determinant of the matrix";
 | 
			
		||||
char Matrix_Invert_doc[] =  "() - set the matrix to it's inverse if an inverse is possible";
 | 
			
		||||
char Matrix_Inverted_doc[] =  "() - set the matrix to it's inverse if an inverse is possible";
 | 
			
		||||
char Matrix_TranslationPart_doc[] = "() - return a vector encompassing the translation of the matrix";
 | 
			
		||||
char Matrix_RotationPart_doc[] = "() - return a vector encompassing the rotation of the matrix";
 | 
			
		||||
char Matrix_scalePart_doc[] = "() - convert matrix to a 3D vector";
 | 
			
		||||
char Matrix_Resize4x4_doc[] = "() - resize the matrix to a 4x4 square matrix";
 | 
			
		||||
char Matrix_toEuler_doc[] = "() - convert matrix to a euler angle rotation";
 | 
			
		||||
char Matrix_toQuat_doc[] = "() - convert matrix to a quaternion rotation";
 | 
			
		||||
char Matrix_copy_doc[] = "() - return a copy of the matrix";
 | 
			
		||||
/*-----------------------METHOD DEFINITIONS ----------------------*/
 | 
			
		||||
struct PyMethodDef Matrix_methods[] = {
 | 
			
		||||
	{"zero", (PyCFunction) Matrix_Zero, METH_NOARGS, Matrix_Zero_doc},
 | 
			
		||||
	{"identity", (PyCFunction) Matrix_Identity, METH_NOARGS, Matrix_Identity_doc},
 | 
			
		||||
	{"transpose", (PyCFunction) Matrix_Transpose, METH_NOARGS, Matrix_Transpose_doc},
 | 
			
		||||
	{"transposed", (PyCFunction) Matrix_Transposed, METH_NOARGS, Matrix_Transposed_doc},
 | 
			
		||||
	{"determinant", (PyCFunction) Matrix_Determinant, METH_NOARGS, Matrix_Determinant_doc},
 | 
			
		||||
	{"invert", (PyCFunction) Matrix_Invert, METH_NOARGS, Matrix_Invert_doc},
 | 
			
		||||
	{"inverted", (PyCFunction) Matrix_Inverted, METH_NOARGS, Matrix_Inverted_doc},
 | 
			
		||||
	{"translationPart", (PyCFunction) Matrix_TranslationPart, METH_NOARGS, Matrix_TranslationPart_doc},
 | 
			
		||||
	{"rotationPart", (PyCFunction) Matrix_RotationPart, METH_NOARGS, Matrix_RotationPart_doc},
 | 
			
		||||
	{"scalePart", (PyCFunction) Matrix_scalePart, METH_NOARGS, Matrix_scalePart_doc},
 | 
			
		||||
	{"resize4x4", (PyCFunction) Matrix_Resize4x4, METH_NOARGS, Matrix_Resize4x4_doc},
 | 
			
		||||
	{"toEuler", (PyCFunction) Matrix_toEuler, METH_NOARGS, Matrix_toEuler_doc},
 | 
			
		||||
	{"toQuat", (PyCFunction) Matrix_toQuat, METH_NOARGS, Matrix_toQuat_doc},
 | 
			
		||||
	{"copy", (PyCFunction) Matrix_copy, METH_NOARGS, Matrix_copy_doc},
 | 
			
		||||
	{"__copy__", (PyCFunction) Matrix_copy, METH_NOARGS, Matrix_copy_doc},
 | 
			
		||||
	{NULL, NULL, 0, NULL}
 | 
			
		||||
};
 | 
			
		||||
/*-----------------------------METHODS----------------------------*/
 | 
			
		||||
@@ -264,21 +263,10 @@ PyObject *Matrix_Invert(MatrixObject * self)
 | 
			
		||||
		return EXPP_ReturnPyObjError(PyExc_ValueError,
 | 
			
		||||
				"matrix does not have an inverse");
 | 
			
		||||
	}
 | 
			
		||||
	/*return EXPP_incr_ret((PyObject*)self);*/ /*Changed after 2.42 relerase */
 | 
			
		||||
	Py_RETURN_NONE;
 | 
			
		||||
	return EXPP_incr_ret((PyObject*)self);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/*---------------------------Matrix.inverted() ------------------*/
 | 
			
		||||
PyObject *Matrix_Inverted(MatrixObject * self)
 | 
			
		||||
{
 | 
			
		||||
	MatrixObject *pymat;	
 | 
			
		||||
	/*copy the matrix*/
 | 
			
		||||
	pymat= (MatrixObject*)newMatrixObject((float (*))*self->matrix, self->rowSize, self->colSize, Py_NEW);
 | 
			
		||||
	Matrix_Invert(pymat);
 | 
			
		||||
	return (PyObject*)pymat;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/*---------------------------Matrix.determinant() ----------------*/
 | 
			
		||||
PyObject *Matrix_Determinant(MatrixObject * self)
 | 
			
		||||
{
 | 
			
		||||
@@ -324,18 +312,7 @@ PyObject *Matrix_Transpose(MatrixObject * self)
 | 
			
		||||
		Mat4Transp((float (*)[4])*self->matrix);
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	/*return EXPP_incr_ret((PyObject*)self);*/ /*Changed after 2.42 relerase */
 | 
			
		||||
	Py_RETURN_NONE;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/*---------------------------Matrix.transposed() ------------------*/
 | 
			
		||||
PyObject *Matrix_Transposed(MatrixObject * self)
 | 
			
		||||
{
 | 
			
		||||
	MatrixObject *pymat;
 | 
			
		||||
	/*copy the matrix*/
 | 
			
		||||
	pymat= (MatrixObject*)newMatrixObject((float (*))*self->matrix, self->rowSize, self->colSize, Py_NEW);
 | 
			
		||||
	Matrix_Transpose(pymat);
 | 
			
		||||
	return (PyObject*)pymat;
 | 
			
		||||
	return EXPP_incr_ret((PyObject*)self);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@@ -372,6 +349,13 @@ PyObject *Matrix_Identity(MatrixObject * self)
 | 
			
		||||
 | 
			
		||||
	return EXPP_incr_ret((PyObject*)self);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/*---------------------------Matrix.inverted() ------------------*/
 | 
			
		||||
PyObject *Matrix_copy(MatrixObject * self)
 | 
			
		||||
{
 | 
			
		||||
	return (PyObject*)(MatrixObject*)newMatrixObject((float (*))*self->matrix, self->rowSize, self->colSize, Py_NEW);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/*----------------------------dealloc()(internal) ----------------*/
 | 
			
		||||
/*free the py_object*/
 | 
			
		||||
static void Matrix_dealloc(MatrixObject * self)
 | 
			
		||||
 
 | 
			
		||||
@@ -66,16 +66,15 @@ blender (stored in blend_data). This is an either/or struct not both*/
 | 
			
		||||
PyObject *Matrix_Zero( MatrixObject * self );
 | 
			
		||||
PyObject *Matrix_Identity( MatrixObject * self );
 | 
			
		||||
PyObject *Matrix_Transpose( MatrixObject * self );
 | 
			
		||||
PyObject *Matrix_Transposed( MatrixObject * self );
 | 
			
		||||
PyObject *Matrix_Determinant( MatrixObject * self );
 | 
			
		||||
PyObject *Matrix_Invert( MatrixObject * self );
 | 
			
		||||
PyObject *Matrix_Inverted( MatrixObject * self );
 | 
			
		||||
PyObject *Matrix_TranslationPart( MatrixObject * self );
 | 
			
		||||
PyObject *Matrix_RotationPart( MatrixObject * self );
 | 
			
		||||
PyObject *Matrix_scalePart( MatrixObject * self );
 | 
			
		||||
PyObject *Matrix_Resize4x4( MatrixObject * self );
 | 
			
		||||
PyObject *Matrix_toEuler( MatrixObject * self );
 | 
			
		||||
PyObject *Matrix_toQuat( MatrixObject * self );
 | 
			
		||||
PyObject *Matrix_copy( MatrixObject * self );
 | 
			
		||||
PyObject *newMatrixObject(float *mat, int rowSize, int colSize, int type);
 | 
			
		||||
 | 
			
		||||
#endif				/* EXPP_matrix_H */
 | 
			
		||||
 
 | 
			
		||||
@@ -39,24 +39,25 @@
 | 
			
		||||
/*-------------------------DOC STRINGS ---------------------------*/
 | 
			
		||||
char Vector_Zero_doc[] = "() - set all values in the vector to 0";
 | 
			
		||||
char Vector_Normalize_doc[] = "() - normalize the vector";
 | 
			
		||||
char Vector_Normalized_doc[] = "() - return a normalized copy of the vector";
 | 
			
		||||
char Vector_Negate_doc[] = "() - changes vector to it's additive inverse";
 | 
			
		||||
char Vector_Resize2D_doc[] = "() - resize a vector to [x,y]";
 | 
			
		||||
char Vector_Resize3D_doc[] = "() - resize a vector to [x,y,z]";
 | 
			
		||||
char Vector_Resize4D_doc[] = "() - resize a vector to [x,y,z,w]";
 | 
			
		||||
char Vector_toPoint_doc[] = "() - create a new Point Object from this vector";
 | 
			
		||||
char Vector_ToTrackQuat_doc[] = "(track, up) - extract a quaternion from the vector and the track and up axis";
 | 
			
		||||
char Vector_copy_doc[] = "() - return a copy of the vector";
 | 
			
		||||
/*-----------------------METHOD DEFINITIONS ----------------------*/
 | 
			
		||||
struct PyMethodDef Vector_methods[] = {
 | 
			
		||||
	{"zero", (PyCFunction) Vector_Zero, METH_NOARGS, Vector_Zero_doc},
 | 
			
		||||
	{"normalize", (PyCFunction) Vector_Normalize, METH_NOARGS, Vector_Normalize_doc},
 | 
			
		||||
	{"normalized", (PyCFunction) Vector_Normalized, METH_NOARGS, Vector_Normalized_doc},
 | 
			
		||||
	{"negate", (PyCFunction) Vector_Negate, METH_NOARGS, Vector_Negate_doc},
 | 
			
		||||
	{"resize2D", (PyCFunction) Vector_Resize2D, METH_NOARGS, Vector_Resize2D_doc},
 | 
			
		||||
	{"resize3D", (PyCFunction) Vector_Resize3D, METH_NOARGS, Vector_Resize2D_doc},
 | 
			
		||||
	{"resize4D", (PyCFunction) Vector_Resize4D, METH_NOARGS, Vector_Resize2D_doc},
 | 
			
		||||
	{"toPoint", (PyCFunction) Vector_toPoint, METH_NOARGS, Vector_toPoint_doc},
 | 
			
		||||
	{"toTrackQuat", ( PyCFunction ) Vector_ToTrackQuat, METH_VARARGS, Vector_ToTrackQuat_doc},
 | 
			
		||||
	{"copy", (PyCFunction) Vector_copy, METH_NOARGS, Vector_copy_doc},
 | 
			
		||||
	{"__copy__", (PyCFunction) Vector_copy, METH_NOARGS, Vector_copy_doc},
 | 
			
		||||
	{NULL, NULL, 0, NULL}
 | 
			
		||||
};
 | 
			
		||||
/*-----------------------------METHODS----------------------------
 | 
			
		||||
@@ -101,16 +102,7 @@ PyObject *Vector_Normalize(VectorObject * self)
 | 
			
		||||
	for(x = 0; x < self->size; x++) {
 | 
			
		||||
		self->vec[x] /= norm;
 | 
			
		||||
	}
 | 
			
		||||
	Py_RETURN_NONE;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/*----------------------------Vector.normalized() -----------------
 | 
			
		||||
 return a normalized copy*/
 | 
			
		||||
PyObject *Vector_Normalized(VectorObject * self)
 | 
			
		||||
{
 | 
			
		||||
	VectorObject *vec= (VectorObject*)newVectorObject(self->vec, self->size, Py_NEW);
 | 
			
		||||
	Vector_Normalize(vec);
 | 
			
		||||
	return (PyObject*)vec;
 | 
			
		||||
	return EXPP_incr_ret((PyObject*)self);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@@ -289,6 +281,16 @@ PyObject *Vector_ToTrackQuat( VectorObject * self, PyObject * args )
 | 
			
		||||
 | 
			
		||||
	return newQuaternionObject(vectoquat(vec, track, up), Py_NEW);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/*----------------------------Vector.copy() --------------------------------------
 | 
			
		||||
  return a copy of the vector */
 | 
			
		||||
PyObject *Vector_copy(VectorObject * self)
 | 
			
		||||
{
 | 
			
		||||
	return newVectorObject(self->vec, self->size, Py_NEW);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/*----------------------------dealloc()(internal) ----------------
 | 
			
		||||
  free the py_object */
 | 
			
		||||
static void Vector_dealloc(VectorObject * self)
 | 
			
		||||
@@ -704,11 +706,12 @@ static PyObject *Vector_div(PyObject * v1, PyObject * v2)
 | 
			
		||||
static PyObject *Vector_neg(VectorObject *self)
 | 
			
		||||
{
 | 
			
		||||
	int x;
 | 
			
		||||
	float vec[4];
 | 
			
		||||
	for(x = 0; x < self->size; x++){
 | 
			
		||||
		self->vec[x] = -self->vec[x];
 | 
			
		||||
		vec[x] = -self->vec[x];
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	return EXPP_incr_ret((PyObject *)self);
 | 
			
		||||
	return newVectorObject(vec, self->size, Py_NEW);
 | 
			
		||||
}
 | 
			
		||||
/*------------------------coerce(obj, obj)-----------------------
 | 
			
		||||
  coercion of unknown types to type VectorObject for numeric protocols
 | 
			
		||||
@@ -969,7 +972,7 @@ PyObject *Vector_Negate(VectorObject * self)
 | 
			
		||||
	for(x = 0; x < self->size; x++) {
 | 
			
		||||
		self->vec[x] = -(self->vec[x]);
 | 
			
		||||
	}
 | 
			
		||||
	printf("Vector.negate(): Deprecated: use -vector instead\n");
 | 
			
		||||
	/*printf("Vector.negate(): Deprecated: use -vector instead\n");*/
 | 
			
		||||
	return EXPP_incr_ret((PyObject*)self);
 | 
			
		||||
}
 | 
			
		||||
/*###################################################################
 | 
			
		||||
 
 | 
			
		||||
@@ -62,14 +62,13 @@ blender (stored in blend_data). This is an either/or struct not both*/
 | 
			
		||||
//prototypes
 | 
			
		||||
PyObject *Vector_Zero( VectorObject * self );
 | 
			
		||||
PyObject *Vector_Normalize( VectorObject * self );
 | 
			
		||||
PyObject *Vector_Normalized( VectorObject * self );
 | 
			
		||||
PyObject *Vector_Negate( VectorObject * self );
 | 
			
		||||
PyObject *Vector_Negated( VectorObject * self );
 | 
			
		||||
PyObject *Vector_Resize2D( VectorObject * self );
 | 
			
		||||
PyObject *Vector_Resize3D( VectorObject * self );
 | 
			
		||||
PyObject *Vector_Resize4D( VectorObject * self );
 | 
			
		||||
PyObject *Vector_toPoint( VectorObject * self );
 | 
			
		||||
PyObject *Vector_ToTrackQuat( VectorObject * self, PyObject * args );
 | 
			
		||||
PyObject *Vector_copy( VectorObject * self );
 | 
			
		||||
PyObject *newVectorObject(float *vec, int size, int type);
 | 
			
		||||
 | 
			
		||||
#endif				/* EXPP_vector_h */
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user