[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [42119] branches/bmesh/blender/source/ blender/makesrna/intern: add some macros to cleanup lots of tedious code in rna_mesh. c defining customdatalayer collections ( especially as upcoming bmesh cycles changes will add a few more such collections )

Andrew Wiggin ender79bl at gmail.com
Thu Nov 24 07:56:01 CET 2011


Revision: 42119
          http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=42119
Author:   ender79
Date:     2011-11-24 06:55:53 +0000 (Thu, 24 Nov 2011)
Log Message:
-----------
add some macros to cleanup lots of tedious code in rna_mesh.c defining customdatalayer collections (especially as upcoming bmesh cycles changes will add a few more such collections)

Modified Paths:
--------------
    branches/bmesh/blender/source/blender/makesrna/intern/rna_mesh.c

Added Paths:
-----------
    branches/bmesh/blender/source/blender/makesrna/intern/rna_mesh_utils.h

Modified: branches/bmesh/blender/source/blender/makesrna/intern/rna_mesh.c
===================================================================
--- branches/bmesh/blender/source/blender/makesrna/intern/rna_mesh.c	2011-11-24 06:30:37 UTC (rev 42118)
+++ branches/bmesh/blender/source/blender/makesrna/intern/rna_mesh.c	2011-11-24 06:55:53 UTC (rev 42119)
@@ -67,6 +67,8 @@
 #include "WM_api.h"
 #include "WM_types.h"
 
+#include "rna_mesh_utils.h"
+
 static Mesh *rna_mesh(PointerRNA *ptr)
 {
 	Mesh *me = (Mesh *)ptr->id.data;
@@ -394,308 +396,40 @@
 
 /* uv_loop_layers */
 
-static int rna_uv_loop_layer_check(CollectionPropertyIterator *iter, void *data)
-{
-	CustomDataLayer *layer = (CustomDataLayer *)data;
-	return (layer->type != CD_MLOOPUV);
-}
+DEFINE_CUSTOMDATA_LAYER_COLLECTION(uv_loop_layer, ldata, CD_MLOOPUV)
+DEFINE_CUSTOMDATA_LAYER_COLLECTION_ACTIVEITEM(uv_loop_layer, ldata, CD_MLOOPUV, active, MeshUVLoopLayer)
+DEFINE_CUSTOMDATA_LAYER_COLLECTION_ACTIVEITEM(uv_loop_layer, ldata, CD_MLOOPUV, clone, MeshUVLoopLayer)
+DEFINE_CUSTOMDATA_LAYER_COLLECTION_ACTIVEITEM(uv_loop_layer, ldata, CD_MLOOPUV, stencil, MeshUVLoopLayer)
+DEFINE_CUSTOMDATA_LAYER_COLLECTION_ACTIVEITEM(uv_loop_layer, ldata, CD_MLOOPUV, render, MeshUVLoopLayer)
 
-static void rna_Mesh_uv_loop_layers_begin(CollectionPropertyIterator *iter, PointerRNA *ptr)
-{
-	CustomData *ldata = rna_mesh_ldata(ptr);
-	rna_iterator_array_begin(iter, (void *)ldata->layers, sizeof(CustomDataLayer), ldata->totlayer, 0, rna_uv_loop_layer_check);
-}
+/* MeshUVLoopLayer */
 
-static int rna_Mesh_uv_loop_layers_length(PointerRNA *ptr)
+static char *rna_MeshUVLoopLayer_path(PointerRNA *ptr)
 {
-	return CustomData_number_of_layers(rna_mesh_ldata(ptr), CD_MLOOPUV);
+	return BLI_sprintfN("uv_loop_layer[\"%s\"]", ((CustomDataLayer*)ptr->data)->name);
 }
 
-static PointerRNA rna_Mesh_active_uv_loop_layer_get(PointerRNA *ptr)
+static void rna_MeshUVLoopLayer_data_begin(CollectionPropertyIterator *iter, PointerRNA *ptr)
 {
-	CustomData *ldata = rna_mesh_ldata(ptr);
-	int index = CustomData_get_active_layer_index(ldata, CD_MLOOPUV);
-	CustomDataLayer *cdl = (index == -1) ? NULL : &ldata->layers[index];
-
-	return rna_pointer_inherit_refine(ptr, &RNA_MeshUVLoopLayer, cdl);
-}
-
-static PointerRNA rna_Mesh_uv_loop_layer_clone_get(PointerRNA *ptr)
-{
-	CustomData *ldata = rna_mesh_ldata(ptr);
-	int index = CustomData_get_clone_layer_index(ldata, CD_MLOOPUV);
-	CustomDataLayer *cdl = (index == -1) ? NULL : &ldata->layers[index];
-
-	return rna_pointer_inherit_refine(ptr, &RNA_MeshUVLoopLayer, cdl);
-}
-
-static PointerRNA rna_Mesh_uv_loop_layer_stencil_get(PointerRNA *ptr)
-{
-	CustomData *ldata = rna_mesh_ldata(ptr);
-	int index = CustomData_get_stencil_layer_index(ldata, CD_MLOOPUV);
-	CustomDataLayer *cdl = (index == -1) ? NULL : &ldata->layers[index];
-
-	return rna_pointer_inherit_refine(ptr, &RNA_MeshUVLoopLayer, cdl);
-}
-
-static void rna_Mesh_active_uv_loop_layer_set(PointerRNA *ptr, PointerRNA value)
-{
 	Mesh *me = rna_mesh(ptr);
-	CustomData *ldata = rna_mesh_ldata(ptr);
-	CustomDataLayer *cdl;
-	int a;
-
-	for(cdl=ldata->layers, a=0; a<ldata->totlayer; cdl++, a++) {
-		if(value.data == cdl) {
-			CustomData_set_layer_active_index(ldata, CD_MLOOPUV, a);
-			mesh_update_customdata_pointers(me);
-			return;
-		}
-	}
+	CustomDataLayer *layer = (CustomDataLayer *)ptr->data;
+	rna_iterator_array_begin(iter, layer->data, sizeof(MLoopUV), (me->edit_btmesh) ? 0 : me->totloop, 0, NULL);
 }
 
-static void rna_Mesh_uv_loop_layer_clone_set(PointerRNA *ptr, PointerRNA value)
+static int rna_MeshUVLoopLayer_data_length(PointerRNA *ptr)
 {
-	CustomData *ldata = rna_mesh_ldata(ptr);
-	CustomDataLayer *cdl;
-	int a;
-
-	for(cdl=ldata->layers, a=0; a<ldata->totlayer; cdl++, a++) {
-		if(value.data == cdl) {
-			CustomData_set_layer_clone_index(ldata, CD_MLOOPUV, a);
-			return;
-		}
-	}
-
-	return;
-}
-
-static void rna_Mesh_uv_loop_layer_stencil_set(PointerRNA *ptr, PointerRNA value)
-{
-	CustomData *ldata = rna_mesh_ldata(ptr);
-	CustomDataLayer *cdl;
-	int a;
-
-	for(cdl=ldata->layers, a=0; a<ldata->totlayer; cdl++, a++) {
-		if(value.data == cdl) {
-			CustomData_set_layer_stencil_index(ldata, CD_MLOOPUV, a);
-			return;
-		}
-	}
-
-	return;
-}
-
-static int rna_Mesh_active_uv_loop_layer_index_get(PointerRNA *ptr)
-{
-	CustomData *ldata = rna_mesh_ldata(ptr);
-	return CustomData_get_active_layer(ldata, CD_MLOOPUV);
-}
-
-static int rna_Mesh_uv_loop_layer_clone_index_get(PointerRNA *ptr)
-{
-	CustomData *ldata = rna_mesh_ldata(ptr);
-	return CustomData_get_clone_layer(ldata, CD_MLOOPUV);
-}
-
-static int rna_Mesh_uv_loop_layer_stencil_index_get(PointerRNA *ptr)
-{
-	CustomData *ldata = rna_mesh_ldata(ptr);
-	return CustomData_get_stencil_layer(ldata, CD_MLOOPUV);
-}
-
-static void rna_Mesh_active_uv_loop_layer_index_set(PointerRNA *ptr, int value)
-{
 	Mesh *me = rna_mesh(ptr);
-	CustomData *ldata = rna_mesh_ldata(ptr);
-
-	CustomData_set_layer_active(ldata, CD_MLOOPUV, value);
-	mesh_update_customdata_pointers(me);
+	return (me->edit_btmesh) ? 0 : me->totloop;
 }
 
-static void rna_Mesh_uv_loop_layer_clone_index_set(PointerRNA *ptr, int value)
-{
-	CustomData *ldata = rna_mesh_ldata(ptr);
-
-	CustomData_set_layer_clone(ldata, CD_MLOOPUV, value);
-}
-
-static void rna_Mesh_uv_loop_layer_stencil_index_set(PointerRNA *ptr, int value)
-{
-	CustomData *ldata = rna_mesh_ldata(ptr);
-
-	CustomData_set_layer_stencil(ldata, CD_MLOOPUV, value);
-}
-
-static void rna_Mesh_active_uv_loop_layer_index_range(PointerRNA *ptr, int *min, int *max)
-{
-	CustomData *ldata = rna_mesh_ldata(ptr);
-
-	*min= 0;
-	*max= CustomData_number_of_layers(ldata, CD_MLOOPUV)-1;
-	*max= MAX2(0, *max);
-}
-
 /* uv_textures */
 
-static int rna_uv_texture_check(CollectionPropertyIterator *iter, void *data)
-{
-	CustomDataLayer *layer= (CustomDataLayer*)data;
-	return (layer->type != CD_MTEXPOLY);
-}
+DEFINE_CUSTOMDATA_LAYER_COLLECTION(uv_texture, pdata, CD_MTEXPOLY)
+DEFINE_CUSTOMDATA_LAYER_COLLECTION_ACTIVEITEM(uv_texture, pdata, CD_MTEXPOLY, active, MeshTextureFaceLayer)
+DEFINE_CUSTOMDATA_LAYER_COLLECTION_ACTIVEITEM(uv_texture, pdata, CD_MTEXPOLY, clone, MeshTextureFaceLayer)
+DEFINE_CUSTOMDATA_LAYER_COLLECTION_ACTIVEITEM(uv_texture, pdata, CD_MTEXPOLY, stencil, MeshTextureFaceLayer)
+DEFINE_CUSTOMDATA_LAYER_COLLECTION_ACTIVEITEM(uv_texture, pdata, CD_MTEXPOLY, render, MeshTextureFaceLayer)
 
-static void rna_Mesh_uv_textures_begin(CollectionPropertyIterator *iter, PointerRNA *ptr)
-{
-	CustomData *pdata = rna_mesh_pdata(ptr);
-	rna_iterator_array_begin(iter, (void*)pdata->layers, sizeof(CustomDataLayer), pdata->totlayer, 0, rna_uv_texture_check);
-}
-
-static int rna_Mesh_uv_textures_length(PointerRNA *ptr)
-{
-	return CustomData_number_of_layers(rna_mesh_pdata(ptr), CD_MTEXPOLY);
-}
-
-static PointerRNA rna_Mesh_active_uv_texture_get(PointerRNA *ptr)
-{
-	CustomData *pdata = rna_mesh_pdata(ptr);
-	int index= CustomData_get_active_layer_index(pdata, CD_MTEXPOLY);
-	CustomDataLayer *cdl= (index == -1)? NULL: &pdata->layers[index];
-
-	return rna_pointer_inherit_refine(ptr, &RNA_MeshTextureFaceLayer, cdl);
-}
-
-static PointerRNA rna_Mesh_uv_texture_clone_get(PointerRNA *ptr)
-{
-	CustomData *pdata= rna_mesh_pdata(ptr);
-	int index= CustomData_get_clone_layer_index(pdata, CD_MTEXPOLY);
-	CustomDataLayer *cdl= (index == -1)? NULL: &pdata->layers[index];
-
-	return rna_pointer_inherit_refine(ptr, &RNA_MeshTextureFaceLayer, cdl);
-}
-
-static PointerRNA rna_Mesh_uv_texture_stencil_get(PointerRNA *ptr)
-{
-	CustomData *pdata= rna_mesh_pdata(ptr);
-	int index= CustomData_get_stencil_layer_index(pdata, CD_MTEXPOLY);
-	CustomDataLayer *cdl= (index == -1)? NULL: &pdata->layers[index];
-
-	return rna_pointer_inherit_refine(ptr, &RNA_MeshTextureFaceLayer, cdl);
-}
-
-static void rna_Mesh_active_uv_texture_set(PointerRNA *ptr, PointerRNA value)
-{
-	Mesh *me = rna_mesh(ptr);
-	CustomData *pdata = rna_mesh_pdata(ptr);
-	CustomDataLayer *cdl;
-	int a;
-
-	for(cdl=pdata->layers, a=0; a<pdata->totlayer; cdl++, a++) {
-		if(value.data == cdl) {
-			CustomData_set_layer_active_index(pdata, CD_MTEXPOLY, a);
-			mesh_update_customdata_pointers(me);
-			return;
-		}
-	}
-}
-
-static void rna_Mesh_uv_texture_clone_set(PointerRNA *ptr, PointerRNA value)
-{
-	CustomData *pdata= rna_mesh_pdata(ptr);
-	CustomDataLayer *cdl;
-	int a;
-
-	for(cdl=pdata->layers, a=0; a<pdata->totlayer; cdl++, a++) {
-		if(value.data == cdl) {
-			CustomData_set_layer_clone_index(pdata, CD_MTEXPOLY, a);
-			return;
-		}
-	}
-
-	return;
-}
-
-static void rna_Mesh_uv_texture_stencil_set(PointerRNA *ptr, PointerRNA value)
-{
-	CustomData *pdata= rna_mesh_pdata(ptr);
-	CustomDataLayer *cdl;
-	int a;
-
-	for(cdl=pdata->layers, a=0; a<pdata->totlayer; cdl++, a++) {
-		if(value.data == cdl) {
-			CustomData_set_layer_stencil_index(pdata, CD_MTEXPOLY, a);
-			return;
-		}
-	}
-
-	return;
-}
-
-static int rna_Mesh_active_uv_texture_index_get(PointerRNA *ptr)
-{
-	CustomData *pdata = rna_mesh_pdata(ptr);
-	return CustomData_get_active_layer(pdata, CD_MTEXPOLY);
-}
-
-static int rna_Mesh_uv_texture_clone_index_get(PointerRNA *ptr)
-{
-	CustomData *pdata = rna_mesh_pdata(ptr);
-	return CustomData_get_clone_layer(pdata, CD_MTEXPOLY);
-}
-
-static int rna_Mesh_uv_texture_stencil_index_get(PointerRNA *ptr)
-{
-	CustomData *pdata = rna_mesh_pdata(ptr);
-	return CustomData_get_stencil_layer(pdata, CD_MTEXPOLY);
-}
-
-static void rna_Mesh_active_uv_texture_index_set(PointerRNA *ptr, int value)
-{
-	Mesh *me = rna_mesh(ptr);
-	CustomData *pdata = rna_mesh_pdata(ptr);
-
-	CustomData_set_layer_active(pdata, CD_MTEXPOLY, value);
-	mesh_update_customdata_pointers(me);
-}
-
-static void rna_Mesh_uv_texture_clone_index_set(PointerRNA *ptr, int value)
-{
-	CustomData *pdata = rna_mesh_pdata(ptr);
-
-	CustomData_set_layer_clone(pdata, CD_MTEXPOLY, value);
-}
-
-static void rna_Mesh_uv_texture_stencil_index_set(PointerRNA *ptr, int value)
-{
-	CustomData *pdata = rna_mesh_pdata(ptr);
-
-	CustomData_set_layer_stencil(pdata, CD_MTEXPOLY, value);
-}
-
-static void rna_Mesh_active_uv_texture_index_range(PointerRNA *ptr, int *min, int *max)
-{
-	CustomData *pdata= rna_mesh_pdata(ptr);
-
-	*min= 0;
-	*max= CustomData_number_of_layers(pdata, CD_MTEXPOLY)-1;
-	*max= MAX2(0, *max);
-}
-
-static void rna_MeshTextureFace_uv1_get(PointerRNA *ptr, float *values)
-{
-	MLoopUV *mloopuv= (MLoopUV*)ptr->data;
-	
-	values[0]= mloopuv->uv[0];
-	values[1]= mloopuv->uv[1];
-}
-
-static void rna_MeshTextureFace_uv1_set(PointerRNA *ptr, const float *values)
-{

@@ Diff output truncated at 10240 characters. @@



More information about the Bf-blender-cvs mailing list