[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [32068] trunk/blender/source/blender: - py /rna's path_resolve function was ignoring the index eg: obj.path_resolve(" location[1]")

Campbell Barton ideasman42 at gmail.com
Thu Sep 23 04:12:36 CEST 2010


Revision: 32068
          http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=32068
Author:   campbellbarton
Date:     2010-09-23 04:12:33 +0200 (Thu, 23 Sep 2010)

Log Message:
-----------
- py/rna's path_resolve function was ignoring the index eg: obj.path_resolve("location[1]")
- corrected comment from previous commit

Modified Paths:
--------------
    trunk/blender/source/blender/blenkernel/intern/armature.c
    trunk/blender/source/blender/python/intern/bpy_array.c
    trunk/blender/source/blender/python/intern/bpy_rna.c
    trunk/blender/source/blender/python/intern/bpy_rna.h

Modified: trunk/blender/source/blender/blenkernel/intern/armature.c
===================================================================
--- trunk/blender/source/blender/blenkernel/intern/armature.c	2010-09-23 01:48:31 UTC (rev 32067)
+++ trunk/blender/source/blender/blenkernel/intern/armature.c	2010-09-23 02:12:33 UTC (rev 32068)
@@ -1289,8 +1289,8 @@
 	/*	Find Axis & Amount for bone matrix*/
 	cross_v3_v3v3(axis,target,nor);
 
-	/* was 0.0000000000001, caused bug [#23954], larger values give unstable
-	 * when toggling editmode */
+	/* was 0.0000000000001, caused bug [#23954], smaller values give unstable
+	 * roll when toggling editmode */
 	if (dot_v3v3(axis,axis) > 0.00001) {
 		/* if nor is *not* a multiple of target ... */
 		normalize_v3(axis);

Modified: trunk/blender/source/blender/python/intern/bpy_array.c
===================================================================
--- trunk/blender/source/blender/python/intern/bpy_array.c	2010-09-23 01:48:31 UTC (rev 32067)
+++ trunk/blender/source/blender/python/intern/bpy_array.c	2010-09-23 02:12:33 UTC (rev 32068)
@@ -400,7 +400,7 @@
 	return ret;
 }
 
-static PyObject *pyrna_array_item(PointerRNA *ptr, PropertyRNA *prop, int index)
+PyObject *pyrna_array_index(PointerRNA *ptr, PropertyRNA *prop, int index)
 {
 	PyObject *item;
 
@@ -441,7 +441,7 @@
 		if (dim + 1 < totdim)
 			item= pyrna_py_from_array_internal(ptr, prop, dim + 1, index);
 		else {
-			item= pyrna_array_item(ptr, prop, *index);
+			item= pyrna_array_index(ptr, prop, *index);
 			*index= *index + 1;
 		}
 
@@ -496,7 +496,7 @@
 	}
 	else {
 		index = arrayoffset + index;
-		ret= (BPy_PropertyArrayRNA *)pyrna_array_item(ptr, prop, index);
+		ret= (BPy_PropertyArrayRNA *)pyrna_array_index(ptr, prop, index);
 	}
 
 	return (PyObject*)ret;

Modified: trunk/blender/source/blender/python/intern/bpy_rna.c
===================================================================
--- trunk/blender/source/blender/python/intern/bpy_rna.c	2010-09-23 01:48:31 UTC (rev 32067)
+++ trunk/blender/source/blender/python/intern/bpy_rna.c	2010-09-23 02:12:33 UTC (rev 32068)
@@ -2262,17 +2262,29 @@
 	PyObject *coerce= Py_True;
 	PointerRNA r_ptr;
 	PropertyRNA *r_prop;
+	int index= -1;
 
 	if (!PyArg_ParseTuple(args, "s|O!:path_resolve", &path, &PyBool_Type, &coerce))
 		return NULL;
 
-	if (RNA_path_resolve(&self->ptr, path, &r_ptr, &r_prop)) {
+	if (RNA_path_resolve_full(&self->ptr, path, &r_ptr, &r_prop, &index)) {
 		if(r_prop) {
-			if(coerce == Py_False) {
-				return pyrna_prop_CreatePyObject(&r_ptr, r_prop);
+			if(index != -1) {
+				if(index >= RNA_property_array_length(&r_ptr, r_prop) || index < 0) {
+					PyErr_Format(PyExc_TypeError, "%.200s.path_resolve(\"%.200s\") index out of range", RNA_struct_identifier(self->ptr.type), path);
+					return NULL;
+				}
+				else {
+					return pyrna_array_index(&r_ptr, r_prop, index);
+				}
 			}
 			else {
-				return pyrna_prop_to_py(&r_ptr, r_prop);
+				if(coerce == Py_False) {
+					return pyrna_prop_CreatePyObject(&r_ptr, r_prop);
+				}
+				else {
+					return pyrna_prop_to_py(&r_ptr, r_prop);
+				}
 			}
 		}
 		else {

Modified: trunk/blender/source/blender/python/intern/bpy_rna.h
===================================================================
--- trunk/blender/source/blender/python/intern/bpy_rna.h	2010-09-23 01:48:31 UTC (rev 32067)
+++ trunk/blender/source/blender/python/intern/bpy_rna.h	2010-09-23 02:12:33 UTC (rev 32068)
@@ -101,6 +101,7 @@
 /* primitive type conversion */
 int pyrna_py_to_array(PointerRNA *ptr, PropertyRNA *prop, ParameterList *parms, char *param_data, PyObject *py, const char *error_prefix);
 int pyrna_py_to_array_index(PointerRNA *ptr, PropertyRNA *prop, int arraydim, int arrayoffset, int index, PyObject *py, const char *error_prefix);
+PyObject *pyrna_array_index(PointerRNA *ptr, PropertyRNA *prop, int index);
 
 PyObject *pyrna_py_from_array(PointerRNA *ptr, PropertyRNA *prop);
 PyObject *pyrna_py_from_array_index(BPy_PropertyArrayRNA *self, PointerRNA *ptr, PropertyRNA *prop, int index);





More information about the Bf-blender-cvs mailing list