Exemplo n.º 1
0
static PyObject *bpy_bmlayercollection_new(BPy_BMLayerCollection *self, PyObject *args)
{
	const char *name = NULL;
	int index;
	CustomData *data;

	BPY_BM_CHECK_OBJ(self);

	if (!PyArg_ParseTuple(args, "|s:new", &name)) {
		return NULL;
	}

	data = bpy_bm_customdata_get(self->bm, self->htype);

	if (CustomData_layertype_is_singleton(self->type) &&
	    CustomData_has_layer(data, self->type))
	{
		PyErr_SetString(PyExc_ValueError,
		                "layers.new(): is a singleton, use verify() instead");
		return NULL;
	}

	if (name) {
		BM_data_layer_add_named(self->bm, data, self->type, name);
	}
	else {
		BM_data_layer_add(self->bm, data, self->type);
	}

	index = CustomData_number_of_layers(data, self->type) - 1;
	BLI_assert(index >= 0);

	return BPy_BMLayerItem_CreatePyObject(self->bm, self->htype, self->type, index);
}
Exemplo n.º 2
0
void BM_mesh_cd_flag_apply(BMesh *bm, const char cd_flag)
{
	/* CustomData_bmesh_init_pool() must run first */
	BLI_assert(bm->vdata.totlayer == 0 || bm->vdata.pool != NULL);
	BLI_assert(bm->edata.totlayer == 0 || bm->edata.pool != NULL);
	BLI_assert(bm->pdata.totlayer == 0 || bm->pdata.pool != NULL);

	if (cd_flag & ME_CDFLAG_VERT_BWEIGHT) {
		if (!CustomData_has_layer(&bm->vdata, CD_BWEIGHT)) {
			BM_data_layer_add(bm, &bm->vdata, CD_BWEIGHT);
		}
	}
	else {
		if (CustomData_has_layer(&bm->vdata, CD_BWEIGHT)) {
			BM_data_layer_free(bm, &bm->vdata, CD_BWEIGHT);
		}
	}

	if (cd_flag & ME_CDFLAG_EDGE_BWEIGHT) {
		if (!CustomData_has_layer(&bm->edata, CD_BWEIGHT)) {
			BM_data_layer_add(bm, &bm->edata, CD_BWEIGHT);
		}
	}
	else {
		if (CustomData_has_layer(&bm->edata, CD_BWEIGHT)) {
			BM_data_layer_free(bm, &bm->edata, CD_BWEIGHT);
		}
	}

	if (cd_flag & ME_CDFLAG_EDGE_CREASE) {
		if (!CustomData_has_layer(&bm->edata, CD_CREASE)) {
			BM_data_layer_add(bm, &bm->edata, CD_CREASE);
		}
	}
	else {
		if (CustomData_has_layer(&bm->edata, CD_CREASE)) {
			BM_data_layer_free(bm, &bm->edata, CD_CREASE);
		}
	}
}
Exemplo n.º 3
0
static PyObject *bpy_bmlayercollection_verify(BPy_BMLayerCollection *self)
{
	int index;
	CustomData *data;

	BPY_BM_CHECK_OBJ(self);

	data = bpy_bm_customdata_get(self->bm, self->htype);

	index = CustomData_get_active_layer(data, self->type);  /* type relative */

	if (index == -1) {
		BM_data_layer_add(self->bm, data, self->type);
		index = 0;
	}

	BLI_assert(index >= 0);

	return BPy_BMLayerItem_CreatePyObject(self->bm, self->htype, self->type, index);
}