Ejemplo n.º 1
0
static int mesh_validate_customdata(CustomData *data, const bool do_verbose, const bool do_fixes)
{
	int i = 0, has_fixes = 0;

	PRINT("%s: Checking %d CD layers...\n", __func__, data->totlayer);

	while (i < data->totlayer) {
		CustomDataLayer *layer = &data->layers[i];
		CustomDataMask mask = CD_TYPE_AS_MASK(layer->type);
		int ok = 1;

		if ((mask & CD_MASK_MESH) == 0) {
			PRINT("\tCustomDataLayer type %d which isn't in CD_MASK_MESH is stored in Mesh structure\n", layer->type);

			if (do_fixes) {
				CustomData_free_layer(data, layer->type, 0, i);
				ok = 0;
				has_fixes = 1;
			}
		}

		if (ok)
			i++;
	}

	PRINT("%s: Finished\n\n", __func__);

	return has_fixes;
}
Ejemplo n.º 2
0
static bool mesh_validate_customdata(
        CustomData *data, CustomDataMask mask,
        const bool do_verbose, const bool do_fixes,
        bool *r_change)
{
	bool is_valid = true;
	bool has_fixes = false;
	int i = 0;

	PRINT_MSG("%s: Checking %d CD layers...\n", __func__, data->totlayer);

	while (i < data->totlayer) {
		CustomDataLayer *layer = &data->layers[i];
		bool ok = true;

		if (CustomData_layertype_is_singleton(layer->type)) {
			const int layer_tot = CustomData_number_of_layers(data, layer->type);
			if (layer_tot > 1) {
				PRINT_ERR("\tCustomDataLayer type %d is a singleton, found %d in Mesh structure\n",
				          layer->type, layer_tot);
				ok = false;
			}
		}

		if (mask != 0) {
			CustomDataMask layer_typemask = CD_TYPE_AS_MASK(layer->type);
			if ((layer_typemask & mask) == 0) {
				PRINT_ERR("\tCustomDataLayer type %d which isn't in the mask\n",
				          layer->type);
				ok = false;
			}
		}

		if (ok == false) {
			if (do_fixes) {
				CustomData_free_layer(data, layer->type, 0, i);
				has_fixes = true;
			}
		}

		if (ok)
			i++;
	}

	PRINT_MSG("%s: Finished (is_valid=%d)\n\n", __func__, (int)!has_fixes);

	*r_change = has_fixes;

	return is_valid;
}