diff options
author | Campbell Barton <ideasman42@gmail.com> | 2006-12-24 14:15:54 +0300 |
---|---|---|
committer | Campbell Barton <ideasman42@gmail.com> | 2006-12-24 14:15:54 +0300 |
commit | c5de881413504e64011e10b1cf2cbe094950602c (patch) | |
tree | fc1bda1bf150a8c0d6ba10fe2f2e31d056dabaeb /source | |
parent | 1be58e7a8dccb17dcdf3d95804de0139ba392881 (diff) |
added CustomData_add_layer_named, same as CustomData_add_layer but accepts a name. saves Mesh.c having to look up the data after adding (just to rename it)
Diffstat (limited to 'source')
-rw-r--r-- | source/blender/blenkernel/BKE_customdata.h | 3 | ||||
-rw-r--r-- | source/blender/blenkernel/intern/customdata.c | 17 | ||||
-rw-r--r-- | source/blender/python/api2_2x/Mesh.c | 26 |
3 files changed, 29 insertions, 17 deletions
diff --git a/source/blender/blenkernel/BKE_customdata.h b/source/blender/blenkernel/BKE_customdata.h index 73b1e02eb51..03224eaadaf 100644 --- a/source/blender/blenkernel/BKE_customdata.h +++ b/source/blender/blenkernel/BKE_customdata.h @@ -83,6 +83,9 @@ void CustomData_free_temporary(struct CustomData *data, int totelem); */ void *CustomData_add_layer(struct CustomData *data, int type, int alloctype, void *layer, int totelem); +/*same as above but accepts a name */ +void *CustomData_add_layer_named(struct CustomData *data, int type, int alloctype, + void *layer, int totelem, char *name); /* frees the active or first data layer with the give type. * returns 1 on succes, 0 if no layer with the given type is found diff --git a/source/blender/blenkernel/intern/customdata.c b/source/blender/blenkernel/intern/customdata.c index 6b763490be9..e93a58bc951 100644 --- a/source/blender/blenkernel/intern/customdata.c +++ b/source/blender/blenkernel/intern/customdata.c @@ -639,6 +639,23 @@ void *CustomData_add_layer(CustomData *data, int type, int alloctype, return NULL; } +/*same as above but accepts a name*/ +void *CustomData_add_layer_named(CustomData *data, int type, int alloctype, + void *layerdata, int totelem, char *name) +{ + CustomDataLayer *layer; + const LayerTypeInfo *typeInfo= layerType_getInfo(type); + + layer = customData_add_layer__internal(data, type, alloctype, layerdata, + totelem, name); + + if(layer) + return layer->data; + + return NULL; +} + + int CustomData_free_layer(CustomData *data, int type, int totelem, int index) { int i; diff --git a/source/blender/python/api2_2x/Mesh.c b/source/blender/python/api2_2x/Mesh.c index 096bea38488..5be47e2985d 100644 --- a/source/blender/python/api2_2x/Mesh.c +++ b/source/blender/python/api2_2x/Mesh.c @@ -6356,30 +6356,22 @@ static PyObject *Mesh_insertKey( BPy_Mesh * self, PyObject * args ) static PyObject * Mesh_addCustomLayer_internal(Mesh *me, PyObject * args, int type) { - int i; char *name = NULL; - void *layer_data; CustomData *data = &me->fdata; if( !PyArg_ParseTuple( args, "|s", &name ) ) return EXPP_ReturnPyObjError( PyExc_TypeError, "expected a string or nothing" ); - layer_data = CustomData_add_layer(data, type, CD_DEFAULT, - NULL, me->totface); + if (strlen(name)>31) + return EXPP_ReturnPyObjError( PyExc_ValueError, + "error, maximum name length is 31" ); - if (name && layer_data) { - - if (strlen(name)>31) - return EXPP_ReturnPyObjError( PyExc_ValueError, - "error, maximum name length is 31" ); - - for(i = 0; i < data->totlayer; i++) { - if (data->layers[i].data == layer_data ) { - BLI_strncpy(data->layers[i].name, name, 31); - CustomData_set_layer_unique_name(&me->fdata, i); - } - } - } + if (name) + CustomData_add_layer_named(data, type, CD_DEFAULT, + NULL, me->totface, name); + else + CustomData_add_layer(data, type, CD_DEFAULT, + NULL, me->totface); mesh_update_customdata_pointers(me); Py_RETURN_NONE; } |