[Bf-blender-cvs] [aa8fafb] temp_custom_loop_normals: Merge branch 'master' into temp_custom_loop_normals

Bastien Montagne noreply at git.blender.org
Tue Sep 2 14:18:07 CEST 2014


Commit: aa8fafb569a7042d7ac2272a0f17d86a2b7059bf
Author: Bastien Montagne
Date:   Tue Sep 2 14:13:14 2014 +0200
Branches: temp_custom_loop_normals
https://developer.blender.org/rBaa8fafb569a7042d7ac2272a0f17d86a2b7059bf

Merge branch 'master' into temp_custom_loop_normals

Conflicts:
	source/blender/makesrna/intern/rna_mesh_api.c

===================================================================



===================================================================

diff --cc source/blender/makesrna/intern/rna_mesh_api.c
index a013a40,cc1f57d..49bf0f1
--- a/source/blender/makesrna/intern/rna_mesh_api.c
+++ b/source/blender/makesrna/intern/rna_mesh_api.c
@@@ -153,106 -139,11 +153,108 @@@ static void rna_Mesh_calc_smooth_groups
  	                    r_group_total, use_bitflags);
  }
  
 +static void rna_Mesh_define_normals_split_custom_do(Mesh *mesh, float (*custom_loopnors)[3],
 +                                                    const float *custom_loopnors_factors,
 +                                                    bool use_current_clnors, const bool use_vertices)
 +{
 +	float (*polynors)[3];
 +	short (*clnors)[2];
 +	const int numloops = mesh->totloop;
 +	bool free_polynors = false;
 +
 +	if (CustomData_has_layer(&mesh->ldata, CD_CUSTOMLOOPNORMAL)) {
 +		clnors = CustomData_get_layer(&mesh->ldata, CD_CUSTOMLOOPNORMAL);
 +		memset(clnors, 0, sizeof(*clnors) * numloops);
 +	}
 +	else {
 +		clnors = CustomData_add_layer(&mesh->ldata, CD_CUSTOMLOOPNORMAL, CD_DEFAULT, NULL, numloops);
 +		use_current_clnors = false;
 +	}
 +
 +	if (CustomData_has_layer(&mesh->pdata, CD_NORMAL)) {
 +		polynors = CustomData_get_layer(&mesh->pdata, CD_NORMAL);
 +	}
 +	else {
 +		polynors = MEM_mallocN(sizeof(float[3]) * mesh->totpoly, __func__);
 +		BKE_mesh_calc_normals_poly(mesh->mvert, mesh->totvert, mesh->mloop, mesh->mpoly, mesh->totloop, mesh->totpoly,
 +		                           polynors, false);
 +		free_polynors = true;
 +	}
 +
 +	if (use_vertices) {
 +		BKE_mesh_normals_loop_custom_from_vertices_set(mesh->mvert, custom_loopnors, custom_loopnors_factors,
 +		                                               mesh->totvert, mesh->medge, mesh->totedge,
 +		                                               mesh->mloop, mesh->totloop, mesh->mpoly,
 +		                                               (const float (*)[3])polynors, mesh->totpoly,
 +		                                               clnors, use_current_clnors);
 +	}
 +	else {
 +		BKE_mesh_normals_loop_custom_set(mesh->mvert, mesh->totvert, mesh->medge, mesh->totedge,
 +		                                 mesh->mloop, custom_loopnors, custom_loopnors_factors, mesh->totloop,
 +		                                 mesh->mpoly, (const float (*)[3])polynors, mesh->totpoly,
 +		                                 clnors, use_current_clnors);
 +	}
 +
 +	if (free_polynors) {
 +		MEM_freeN(polynors);
 +	}
 +}
 +
 +static void rna_Mesh_define_normals_split_custom(Mesh *mesh, ReportList *reports, int normals_len, float *normals,
 +                                                 int factors_len, float *factors, int use_current_custom_normals)
 +{
 +	float (*loopnors)[3] = (float (*)[3])normals;
 +	const float *loopnors_factors = (const float *)factors;
 +	const int numloops = mesh->totloop;
 +
 +	if (normals_len != numloops * 3) {
 +		BKE_reportf(reports, RPT_ERROR,
 +		            "Mesh.define_normals_split_custom(): number of custom normals is not number of loops (%f / %d)",
 +		            (float)normals_len / 3.0f, numloops);
 +		return;
 +	}
 +	if (!ELEM(factors_len, numloops, 0)) {
 +		BKE_reportf(reports, RPT_ERROR,
 +		            "Mesh.define_normals_split_custom(): number of factors is not number of loops (%f / %d)",
 +		            (float)factors_len, numloops);
 +		return;
 +	}
 +
 +	rna_Mesh_define_normals_split_custom_do(mesh, loopnors, loopnors_factors, (bool)use_current_custom_normals, false);
 +}
 +
 +static void rna_Mesh_define_normals_split_custom_from_vertices(Mesh *mesh, ReportList *reports,
 +                                                               int normals_len, float *normals,
 +                                                               int factors_len, float *factors,
 +                                                               int use_current_custom_normals)
 +{
 +	float (*vertnors)[3] = (float (*)[3])normals;
 +	const float *vertnors_factors = (const float *)factors;
 +	const int numverts = mesh->totvert;
 +
 +	if (normals_len != numverts * 3) {
 +		BKE_reportf(reports, RPT_ERROR,
 +		            "Mesh.define_normals_split_custom_from_vertices(): "
 +		            "number of custom normals is not number of vertices (%f / %d)",
 +		            (float)normals_len / 3.0f, numverts);
 +		return;
 +	}
 +	if (!ELEM(factors_len, numverts, 0)) {
 +		BKE_reportf(reports, RPT_ERROR,
 +		            "Mesh.define_normals_split_custom_from_vertices(): "
 +		            "number of factors is not number of vertices (%f / %d)",
 +		            (float)factors_len, numverts);
 +		return;
 +	}
 +
 +	rna_Mesh_define_normals_split_custom_do(mesh, vertnors, vertnors_factors, (bool)use_current_custom_normals, true);
 +}
 +
- static void rna_Mesh_transform(Mesh *mesh, float *mat)
+ static void rna_Mesh_transform(Mesh *mesh, float *mat, int shape_keys)
  {
- 	ED_mesh_transform(mesh, (float (*)[4])mat);
+ 	BKE_mesh_transform(mesh, (float (*)[4])mat, shape_keys);
+ 
+ 	DAG_id_tag_update(&mesh->id, 0);
  }
  
  #else




More information about the Bf-blender-cvs mailing list