static CustomDataLayer *bpy_bmlayeritem_get(BPy_BMLayerItem *self)
{
CustomData *data = bpy_bm_customdata_get(self->bm, self->htype);
- return &data->layers[CustomData_get_layer_index_n(data, self->type, self->index)];
+ const int index_absolute = CustomData_get_layer_index_n(data, self->type, self->index);
+ if (index_absolute != -1) {
+ return &data->layers[index_absolute];
+ }
+ else {
+ PyErr_SetString(PyExc_RuntimeError,
+ "layer has become invalid");
+ return NULL;
+ }
}
/* py-type definitions
BPY_BM_CHECK_OBJ(self);
data = bpy_bm_customdata_get(self->bm, self->htype);
- index = CustomData_get_active_layer_index(data, self->type);
+ index = CustomData_get_active_layer_index(data, self->type); /* absolute */
if (index != -1) {
+ index -= CustomData_get_layer_index(data, self->type); /* make relative */
return BPy_BMLayerItem_CreatePyObject(self->bm, self->htype, self->type, index);
}
else {
BPY_BM_CHECK_OBJ(self);
layer = bpy_bmlayeritem_get(self);
- return PyUnicode_FromString(layer->name);
+ if (layer) {
+ return PyUnicode_FromString(layer->name);
+ }
+ else {
+ return NULL;
+ }
}
static PyGetSetDef bpy_bmlayeraccess_vert_getseters[] = {
BPY_BM_CHECK_OBJ(self);
data = bpy_bm_customdata_get(self->bm, self->htype);
- index = CustomData_get_layer_index(data, self->type);
+ index = CustomData_get_layer_index(data, self->type); /* absolute, but no need to make relative */
ret = PyList_New(0);
int index;
data = bpy_bm_customdata_get(self->bm, self->htype);
- index = CustomData_get_named_layer_index(data, self->type, key);
+ index = CustomData_get_named_layer_index(data, self->type, key); /* absolute index */
if (index != -1) {
+ index -= CustomData_get_layer_index(data, self->type); /* make relative */
return BPy_BMLayerItem_CreatePyObject(self->bm, self->htype, self->type, index);
}
}
BPY_BM_CHECK_OBJ(self);
data = bpy_bm_customdata_get(self->bm, self->htype);
- index = CustomData_get_named_layer_index(data, self->type, keyname);
+ index = CustomData_get_named_layer_index(data, self->type, keyname); /* absolute */
if (index != -1) {
+ index -= CustomData_get_layer_index(data, self->type); /* make relative */
return BPy_BMLayerItem_CreatePyObject(self->bm, self->htype, self->type, index);
}
else {