[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [28442] trunk/blender/source: py/rna, euler objects order is now wrapped correctly...

Campbell Barton ideasman42 at gmail.com
Mon Apr 26 23:04:42 CEST 2010


Revision: 28442
          http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=28442
Author:   campbellbarton
Date:     2010-04-26 23:04:42 +0200 (Mon, 26 Apr 2010)

Log Message:
-----------
py/rna, euler objects order is now wrapped correctly...

eg:
 eul = bpy.context.object.rotation_euler
 eul.order = 'XZY' # will update the objects setting.

Modified Paths:
--------------
    trunk/blender/source/blender/python/generic/mathutils.c
    trunk/blender/source/blender/python/generic/mathutils.h
    trunk/blender/source/blender/python/generic/mathutils_color.c
    trunk/blender/source/blender/python/generic/mathutils_euler.c
    trunk/blender/source/blender/python/generic/mathutils_matrix.c
    trunk/blender/source/blender/python/intern/bpy_rna.c
    trunk/blender/source/gameengine/Ketsji/KX_GameObject.cpp
    trunk/blender/source/gameengine/Ketsji/KX_ObjectActuator.cpp

Modified: trunk/blender/source/blender/python/generic/mathutils.c
===================================================================
--- trunk/blender/source/blender/python/generic/mathutils.c	2010-04-26 20:44:30 UTC (rev 28441)
+++ trunk/blender/source/blender/python/generic/mathutils.c	2010-04-26 21:04:42 UTC (rev 28442)
@@ -646,7 +646,7 @@
 int _BaseMathObject_ReadCallback(BaseMathObject *self)
 {
 	Mathutils_Callback *cb= mathutils_callbacks[self->cb_type];
-	if(cb->get(self->cb_user, self->cb_subtype, self->data))
+	if(cb->get(self, self->cb_subtype, self->data))
 		return 1;
 
 	PyErr_Format(PyExc_SystemError, "%s user has become invalid", Py_TYPE(self)->tp_name);
@@ -656,7 +656,7 @@
 int _BaseMathObject_WriteCallback(BaseMathObject *self)
 {
 	Mathutils_Callback *cb= mathutils_callbacks[self->cb_type];
-	if(cb->set(self->cb_user, self->cb_subtype, self->data))
+	if(cb->set(self, self->cb_subtype, self->data))
 		return 1;
 
 	PyErr_Format(PyExc_SystemError, "%s user has become invalid", Py_TYPE(self)->tp_name);
@@ -666,7 +666,7 @@
 int _BaseMathObject_ReadIndexCallback(BaseMathObject *self, int index)
 {
 	Mathutils_Callback *cb= mathutils_callbacks[self->cb_type];
-	if(cb->get_index(self->cb_user, self->cb_subtype, self->data, index))
+	if(cb->get_index(self, self->cb_subtype, self->data, index))
 		return 1;
 
 	PyErr_Format(PyExc_SystemError, "%s user has become invalid", Py_TYPE(self)->tp_name);
@@ -676,7 +676,7 @@
 int _BaseMathObject_WriteIndexCallback(BaseMathObject *self, int index)
 {
 	Mathutils_Callback *cb= mathutils_callbacks[self->cb_type];
-	if(cb->set_index(self->cb_user, self->cb_subtype, self->data, index))
+	if(cb->set_index(self, self->cb_subtype, self->data, index))
 		return 1;
 
 	PyErr_Format(PyExc_SystemError, "%s user has become invalid", Py_TYPE(self)->tp_name);

Modified: trunk/blender/source/blender/python/generic/mathutils.h
===================================================================
--- trunk/blender/source/blender/python/generic/mathutils.h	2010-04-26 20:44:30 UTC (rev 28441)
+++ trunk/blender/source/blender/python/generic/mathutils.h	2010-04-26 21:04:42 UTC (rev 28442)
@@ -88,18 +88,18 @@
 
 typedef struct Mathutils_Callback Mathutils_Callback;
 
-typedef int (*BaseMathCheckFunc)(PyObject *);
-typedef int (*BaseMathGetFunc)(PyObject *, int, float *);
-typedef int (*BaseMathSetFunc)(PyObject *, int, float *);
-typedef int (*BaseMathGetIndexFunc)(PyObject *, int, float *, int);
-typedef int (*BaseMathSetIndexFunc)(PyObject *, int, float *, int);
+typedef int (*BaseMathCheckFunc)(BaseMathObject *);							/* checks the user is still valid */
+typedef int (*BaseMathGetFunc)(BaseMathObject *, int, float *);				/* gets the vector from the user */
+typedef int (*BaseMathSetFunc)(BaseMathObject *, int, float *);				/* sets the users vector values once the vector is modified */
+typedef int (*BaseMathGetIndexFunc)(BaseMathObject *, int, float *, int);	/* same as above but only for an index */
+typedef int (*BaseMathSetIndexFunc)(BaseMathObject *, int, float *, int);	/* same as above but only for an index */
 
 struct Mathutils_Callback {
-	int		(*check)(PyObject *user);					/* checks the user is still valid */
-	int		(*get)(PyObject *user, int subtype, float *from);	/* gets the vector from the user */
-	int		(*set)(PyObject *user, int subtype, float *to);	/* sets the users vector values once the vector is modified */
-	int		(*get_index)(PyObject *user, int subtype, float *from,int index);	/* same as above but only for an index */
-	int		(*set_index)(PyObject *user, int subtype, float *to,	int index);	/* same as above but only for an index */
+	BaseMathCheckFunc		check;
+	BaseMathGetFunc			get;
+	BaseMathSetFunc			set;
+	BaseMathGetIndexFunc	get_index;
+	BaseMathSetIndexFunc	set_index;
 };
 
 int Mathutils_RegisterCallback(Mathutils_Callback *cb);

Modified: trunk/blender/source/blender/python/generic/mathutils_color.c
===================================================================
--- trunk/blender/source/blender/python/generic/mathutils_color.c	2010-04-26 20:44:30 UTC (rev 28441)
+++ trunk/blender/source/blender/python/generic/mathutils_color.c	2010-04-26 21:04:42 UTC (rev 28442)
@@ -280,13 +280,13 @@
 			return Color_slice(self, start, stop);
 		}
 		else {
-			PyErr_SetString(PyExc_TypeError, "slice steps not supported with eulers");
+			PyErr_SetString(PyExc_TypeError, "slice steps not supported with color");
 			return NULL;
 		}
 	}
 	else {
 		PyErr_Format(PyExc_TypeError,
-				 "euler indices must be integers, not %.200s",
+				 "color indices must be integers, not %.200s",
 				 item->ob_type->tp_name);
 		return NULL;
 	}
@@ -311,13 +311,13 @@
 		if (step == 1)
 			return Color_ass_slice(self, start, stop, value);
 		else {
-			PyErr_SetString(PyExc_TypeError, "slice steps not supported with euler");
+			PyErr_SetString(PyExc_TypeError, "slice steps not supported with color");
 			return -1;
 		}
 	}
 	else {
 		PyErr_Format(PyExc_TypeError,
-				 "euler indices must be integers, not %.200s",
+				 "color indices must be integers, not %.200s",
 				 item->ob_type->tp_name);
 		return -1;
 	}

Modified: trunk/blender/source/blender/python/generic/mathutils_euler.c
===================================================================
--- trunk/blender/source/blender/python/generic/mathutils_euler.c	2010-04-26 20:44:30 UTC (rev 28441)
+++ trunk/blender/source/blender/python/generic/mathutils_euler.c	2010-04-26 21:04:42 UTC (rev 28442)
@@ -587,7 +587,11 @@
 /* rotation order */
 static PyObject *Euler_getOrder(EulerObject *self, void *type)
 {
-	static char order[][4] = {"XYZ", "XZY", "YXZ", "YZX", "ZXY", "ZYX"};
+	const char order[][4] = {"XYZ", "XZY", "YXZ", "YZX", "ZXY", "ZYX"};
+
+	if(!BaseMath_ReadCallback(self)) /* can read order too */
+		return NULL;
+
 	return PyUnicode_FromString(order[self->order-EULER_ORDER_XYZ]);
 }
 
@@ -599,12 +603,8 @@
 	if(order == -1)
 		return -1;
 
-	if(self->cb_user) {
-		PyErr_SetString(PyExc_TypeError, "euler.order: assignment is not allowed on eulers with an owner");
-		return -1;
-	}
-
 	self->order= order;
+	BaseMath_WriteCallback(self); /* order can be written back */
 	return 0;
 }
 

Modified: trunk/blender/source/blender/python/generic/mathutils_matrix.c
===================================================================
--- trunk/blender/source/blender/python/generic/mathutils_matrix.c	2010-04-26 20:44:30 UTC (rev 28441)
+++ trunk/blender/source/blender/python/generic/mathutils_matrix.c	2010-04-26 21:04:42 UTC (rev 28442)
@@ -37,15 +37,15 @@
 /* matrix vector callbacks */
 int mathutils_matrix_vector_cb_index= -1;
 
-static int mathutils_matrix_vector_check(PyObject *self_p)
+static int mathutils_matrix_vector_check(BaseMathObject *self_p)
 {
-	MatrixObject *self= (MatrixObject*)self_p;
+	MatrixObject *self= (MatrixObject *)self_p;
 	return BaseMath_ReadCallback(self);
 }
 
-static int mathutils_matrix_vector_get(PyObject *self_p, int subtype, float *vec_from)
+static int mathutils_matrix_vector_get(BaseMathObject *self_p, int subtype, float *vec_from)
 {
-	MatrixObject *self= (MatrixObject*)self_p;
+	MatrixObject *self= (MatrixObject *)self_p;
 	int i;
 
 	if(!BaseMath_ReadCallback(self))
@@ -57,9 +57,9 @@
 	return 1;
 }
 
-static int mathutils_matrix_vector_set(PyObject *self_p, int subtype, float *vec_to)
+static int mathutils_matrix_vector_set(BaseMathObject *self_p, int subtype, float *vec_to)
 {
-	MatrixObject *self= (MatrixObject*)self_p;
+	MatrixObject *self= (MatrixObject *)self_p;
 	int i;
 
 	if(!BaseMath_ReadCallback(self))
@@ -72,9 +72,9 @@
 	return 1;
 }
 
-static int mathutils_matrix_vector_get_index(PyObject *self_p, int subtype, float *vec_from, int index)
+static int mathutils_matrix_vector_get_index(BaseMathObject *self_p, int subtype, float *vec_from, int index)
 {
-	MatrixObject *self= (MatrixObject*)self_p;
+	MatrixObject *self= (MatrixObject *)self_p;
 
 	if(!BaseMath_ReadCallback(self))
 		return 0;
@@ -83,7 +83,7 @@
 	return 1;
 }
 
-static int mathutils_matrix_vector_set_index(PyObject *self_p, int subtype, float *vec_to, int index)
+static int mathutils_matrix_vector_set_index(BaseMathObject *self_p, int subtype, float *vec_to, int index)
 {
 	MatrixObject *self= (MatrixObject*)self_p;
 

Modified: trunk/blender/source/blender/python/intern/bpy_rna.c
===================================================================
--- trunk/blender/source/blender/python/intern/bpy_rna.c	2010-04-26 20:44:30 UTC (rev 28441)
+++ trunk/blender/source/blender/python/intern/bpy_rna.c	2010-04-26 21:04:42 UTC (rev 28442)
@@ -68,22 +68,34 @@
 #define MATHUTILS_CB_SUBTYPE_QUAT 2
 #define MATHUTILS_CB_SUBTYPE_COLOR 0
 
-static int mathutils_rna_generic_check(BPy_PropertyRNA *self)
+static int mathutils_rna_generic_check(BaseMathObject *bmo)
 {
-	return self->prop?1:0;
+	BPy_PropertyRNA *self= (BPy_PropertyRNA *)bmo->cb_user;
+	return self->prop ? 1:0;
 }
 
-static int mathutils_rna_vector_get(BPy_PropertyRNA *self, int subtype, float *vec_from)
+static int mathutils_rna_vector_get(BaseMathObject *bmo, int subtype, float *vec_from)
 {
+	BPy_PropertyRNA *self= (BPy_PropertyRNA *)bmo->cb_user;
 	if(self->prop==NULL)
 		return 0;
 	
 	RNA_property_float_get_array(&self->ptr, self->prop, vec_from);
+	
+	/* Euler order exception */
+	if(subtype==MATHUTILS_CB_SUBTYPE_EUL) {
+		PropertyRNA *prop_eul_order= RNA_struct_find_property(&self->ptr, "rotation_mode");
+		if(prop_eul_order) {
+			((EulerObject *)bmo)->order= RNA_property_enum_get(&self->ptr, prop_eul_order);
+		}		
+	}
+	
 	return 1;
 }
 
-static int mathutils_rna_vector_set(BPy_PropertyRNA *self, int subtype, float *vec_to)
+static int mathutils_rna_vector_set(BaseMathObject *bmo, int subtype, float *vec_to)
 {
+	BPy_PropertyRNA *self= (BPy_PropertyRNA *)bmo->cb_user;
 	float min, max;
 	if(self->prop==NULL)
 		return 0;
@@ -98,12 +110,24 @@
 	}
 
 	RNA_property_float_set_array(&self->ptr, self->prop, vec_to);
+	
+	/* Euler order exception */
+	if(subtype==MATHUTILS_CB_SUBTYPE_EUL) {
+		PropertyRNA *prop_eul_order= RNA_struct_find_property(&self->ptr, "rotation_mode");
+		if(prop_eul_order) {
+			RNA_property_enum_set(&self->ptr, prop_eul_order, ((EulerObject *)bmo)->order);
+			RNA_property_update(BPy_GetContext(), &self->ptr, prop_eul_order);
+		}		
+	}
+
 	RNA_property_update(BPy_GetContext(), &self->ptr, self->prop);
 	return 1;
 }
 
-static int mathutils_rna_vector_get_index(BPy_PropertyRNA *self, int subtype, float *vec_from, int index)

@@ Diff output truncated at 10240 characters. @@




More information about the Bf-blender-cvs mailing list