[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [20936] branches/soc-2009-kazanbas/source/ blender/makesrna/intern: RNA_property_collection_add should work now for non-ID properties.

Arystanbek Dyussenov arystan.d at gmail.com
Tue Jun 16 20:02:38 CEST 2009


Revision: 20936
          http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=20936
Author:   kazanbas
Date:     2009-06-16 20:02:38 +0200 (Tue, 16 Jun 2009)

Log Message:
-----------
RNA_property_collection_add should work now for non-ID properties.
Since it's very limited, and has a doubtful interface, I need help on 
how improve and use it. I'll ask on ML.

Modified Paths:
--------------
    branches/soc-2009-kazanbas/source/blender/makesrna/intern/rna_access.c
    branches/soc-2009-kazanbas/source/blender/makesrna/intern/rna_internal_types.h
    branches/soc-2009-kazanbas/source/blender/makesrna/intern/rna_mesh.c

Modified: branches/soc-2009-kazanbas/source/blender/makesrna/intern/rna_access.c
===================================================================
--- branches/soc-2009-kazanbas/source/blender/makesrna/intern/rna_access.c	2009-06-16 16:15:19 UTC (rev 20935)
+++ branches/soc-2009-kazanbas/source/blender/makesrna/intern/rna_access.c	2009-06-16 18:02:38 UTC (rev 20936)
@@ -1314,6 +1314,7 @@
 void RNA_property_collection_add(PointerRNA *ptr, PropertyRNA *prop, PointerRNA *r_ptr)
 {
 	IDProperty *idprop;
+	CollectionPropertyRNA *cprop= (CollectionPropertyRNA*)prop;
 
 	if((idprop=rna_idproperty_check(&prop, ptr))) {
 		IDPropertyTemplate val = {0};
@@ -1339,11 +1340,12 @@
 			MEM_freeN(item);
 		}
 	}
+	else if(cprop->add){
+		cprop->add(ptr, r_ptr);
+	}
 	else
-		printf("RNA_property_collection_add %s.%s: only supported for id properties.\n", ptr->type->identifier, prop->identifier);
+		printf("RNA_property_collection_add %s.%s: not implemented for this property.\n", ptr->type->identifier, prop->identifier);
 
-	/* TODO: call cprop->add on non-ID props here */
-
 	if(r_ptr) {
 		if(idprop) {
 			CollectionPropertyRNA *cprop= (CollectionPropertyRNA*)prop;

Modified: branches/soc-2009-kazanbas/source/blender/makesrna/intern/rna_internal_types.h
===================================================================
--- branches/soc-2009-kazanbas/source/blender/makesrna/intern/rna_internal_types.h	2009-06-16 16:15:19 UTC (rev 20935)
+++ branches/soc-2009-kazanbas/source/blender/makesrna/intern/rna_internal_types.h	2009-06-16 18:02:38 UTC (rev 20936)
@@ -78,7 +78,7 @@
 typedef int (*PropCollectionLengthFunc)(struct PointerRNA *ptr);
 typedef PointerRNA (*PropCollectionLookupIntFunc)(struct PointerRNA *ptr, int key);
 typedef PointerRNA (*PropCollectionLookupStringFunc)(struct PointerRNA *ptr, const char *key);
-typedef void (*PropCollectionAddFunc)(PointerRNA *ptr, PointerRNA *item);
+typedef void (*PropCollectionAddFunc)(PointerRNA *ptr, PointerRNA *ptr_item);
 
 /* Container - generic abstracted container of RNA properties */
 typedef struct ContainerRNA {

Modified: branches/soc-2009-kazanbas/source/blender/makesrna/intern/rna_mesh.c
===================================================================
--- branches/soc-2009-kazanbas/source/blender/makesrna/intern/rna_mesh.c	2009-06-16 16:15:19 UTC (rev 20935)
+++ branches/soc-2009-kazanbas/source/blender/makesrna/intern/rna_mesh.c	2009-06-16 18:02:38 UTC (rev 20936)
@@ -484,6 +484,33 @@
 	tf->tpage= (struct Image*)id;
 }
 
+static void rna_Mesh_verts_begin(CollectionPropertyIterator *iter, PointerRNA *ptr)
+{
+	Mesh *me= (Mesh*)ptr->data;
+	rna_iterator_array_begin(iter, me->mvert, sizeof(MVert), me->totvert, NULL);
+}
+
+/* extern struct EditVert *addvertlist(EditMesh *em, float *vec, struct EditVert *example); */
+
+static void rna_Mesh_verts_add(PointerRNA *ptr, PointerRNA *ptr_item)
+{
+	Mesh *me= (Mesh*)ptr->data;
+
+	/*
+	// XXX if item is not MVert we fail silently
+	if (item->type == RNA_MeshVertex)
+		return;
+
+	// XXX this must be slow...
+	EditMesh *em= BKE_mesh_get_editmesh(me);
+
+	MVert *v = (MVert*)ptr_item->ptr->data;
+	addvertlist(em, v->co, NULL);
+
+	BKE_mesh_end_editmesh(me, em);
+	*/
+}
+
 /* path construction */
 
 static char *rna_VertexGroupElement_path(PointerRNA *ptr)
@@ -1054,6 +1081,7 @@
 	RNA_def_property_collection_sdna(prop, NULL, "mvert", "totvert");
 	RNA_def_property_struct_type(prop, "MeshVertex");
 	RNA_def_property_ui_text(prop, "Vertices", "Vertices of the mesh.");
+	RNA_def_property_collection_funcs(prop, "rna_Mesh_verts_begin", 0, 0, 0, 0, 0, 0, "rna_Mesh_verts_add");
 
 	prop= RNA_def_property(srna, "edges", PROP_COLLECTION, PROP_NONE);
 	RNA_def_property_collection_sdna(prop, NULL, "medge", "totedge");





More information about the Bf-blender-cvs mailing list