[Bf-blender-cvs] [6e880756180] blender2.8: Merge branch 'master' into blender2.8

Campbell Barton noreply at git.blender.org
Tue May 8 19:16:19 CEST 2018


Commit: 6e88075618058bb2b33f93ca2c57e7d2db430a05
Author: Campbell Barton
Date:   Tue May 8 19:09:35 2018 +0200
Branches: blender2.8
https://developer.blender.org/rB6e88075618058bb2b33f93ca2c57e7d2db430a05

Merge branch 'master' into blender2.8

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



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

diff --cc source/blender/blenkernel/CMakeLists.txt
index 83241d3c4c7,c2b2fc4f869..a64d35e09bd
--- a/source/blender/blenkernel/CMakeLists.txt
+++ b/source/blender/blenkernel/CMakeLists.txt
@@@ -139,12 -136,10 +139,13 @@@ set(SR
  	intern/mball.c
  	intern/mball_tessellate.c
  	intern/mesh.c
+ 	intern/mesh_convert.c
  	intern/mesh_evaluate.c
  	intern/mesh_mapping.c
 +	intern/mesh_merge.c
  	intern/mesh_remap.c
 +	intern/mesh_runtime.c
 +	intern/mesh_tangent.c
  	intern/mesh_validate.c
  	intern/modifier.c
  	intern/modifiers_bmesh.c
diff --cc source/blender/blenkernel/intern/mesh.c
index 0879c3e028d,688700748ed..cca51190d26
--- a/source/blender/blenkernel/intern/mesh.c
+++ b/source/blender/blenkernel/intern/mesh.c
@@@ -43,11 -39,8 +39,9 @@@
  #include "BLI_memarena.h"
  #include "BLI_edgehash.h"
  #include "BLI_string.h"
- #include "BLI_utildefines_stack.h"
  
  #include "BKE_animsys.h"
 +#include "BKE_idcode.h"
  #include "BKE_main.h"
  #include "BKE_DerivedMesh.h"
  #include "BKE_global.h"
@@@ -58,24 -49,12 +50,16 @@@
  #include "BKE_material.h"
  #include "BKE_modifier.h"
  #include "BKE_multires.h"
- #include "BKE_key.h"
- #include "BKE_mball.h"
- /* these 2 are only used by conversion functions */
- #include "BKE_curve.h"
- /* -- */
 -#include "BKE_depsgraph.h"
  #include "BKE_object.h"
  #include "BKE_editmesh.h"
  
  #include "DEG_depsgraph.h"
- #include "DEG_depsgraph_query.h"
  
 +/* Define for cases when you want extra validation of mesh
 + * after certain modifications.
 + */
 +// #undef VALIDATE_MESH
 +
  enum {
  	MESHCMP_DVERT_WEIGHTMISMATCH = 1,
  	MESHCMP_DVERT_GROUPMISMATCH,
@@@ -1076,779 -901,7 +1060,6 @@@ void BKE_mesh_assign_object(Object *ob
  	test_object_modifiers(ob);
  }
  
- void BKE_mesh_from_metaball(ListBase *lb, Mesh *me)
- {
- 	DispList *dl;
- 	MVert *mvert;
- 	MLoop *mloop, *allloop;
- 	MPoly *mpoly;
- 	const float *nors, *verts;
- 	int a, *index;
- 	
- 	dl = lb->first;
- 	if (dl == NULL) return;
- 
- 	if (dl->type == DL_INDEX4) {
- 		mvert = CustomData_add_layer(&me->vdata, CD_MVERT, CD_CALLOC, NULL, dl->nr);
- 		allloop = mloop = CustomData_add_layer(&me->ldata, CD_MLOOP, CD_CALLOC, NULL, dl->parts * 4);
- 		mpoly = CustomData_add_layer(&me->pdata, CD_MPOLY, CD_CALLOC, NULL, dl->parts);
- 		me->mvert = mvert;
- 		me->mloop = mloop;
- 		me->mpoly = mpoly;
- 		me->totvert = dl->nr;
- 		me->totpoly = dl->parts;
- 
- 		a = dl->nr;
- 		nors = dl->nors;
- 		verts = dl->verts;
- 		while (a--) {
- 			copy_v3_v3(mvert->co, verts);
- 			normal_float_to_short_v3(mvert->no, nors);
- 			mvert++;
- 			nors += 3;
- 			verts += 3;
- 		}
- 		
- 		a = dl->parts;
- 		index = dl->index;
- 		while (a--) {
- 			int count = index[2] != index[3] ? 4 : 3;
- 
- 			mloop[0].v = index[0];
- 			mloop[1].v = index[1];
- 			mloop[2].v = index[2];
- 			if (count == 4)
- 				mloop[3].v = index[3];
- 
- 			mpoly->totloop = count;
- 			mpoly->loopstart = (int)(mloop - allloop);
- 			mpoly->flag = ME_SMOOTH;
- 
- 
- 			mpoly++;
- 			mloop += count;
- 			me->totloop += count;
- 			index += 4;
- 		}
- 
- 		BKE_mesh_update_customdata_pointers(me, true);
- 
- 		BKE_mesh_calc_normals(me);
- 
- 		BKE_mesh_calc_edges(me, true, false);
- 	}
- }
- 
- /**
-  * Specialized function to use when we _know_ existing edges don't overlap with poly edges.
-  */
- static void make_edges_mdata_extend(MEdge **r_alledge, int *r_totedge,
-                                     const MPoly *mpoly, MLoop *mloop,
-                                     const int totpoly)
- {
- 	int totedge = *r_totedge;
- 	int totedge_new;
- 	EdgeHash *eh;
- 	unsigned int eh_reserve;
- 	const MPoly *mp;
- 	int i;
- 
- 	eh_reserve = max_ii(totedge, BLI_EDGEHASH_SIZE_GUESS_FROM_POLYS(totpoly));
- 	eh = BLI_edgehash_new_ex(__func__, eh_reserve);
- 
- 	for (i = 0, mp = mpoly; i < totpoly; i++, mp++) {
- 		BKE_mesh_poly_edgehash_insert(eh, mp, mloop + mp->loopstart);
- 	}
- 
- 	totedge_new = BLI_edgehash_len(eh);
- 
- #ifdef DEBUG
- 	/* ensure that theres no overlap! */
- 	if (totedge_new) {
- 		MEdge *medge = *r_alledge;
- 		for (i = 0; i < totedge; i++, medge++) {
- 			BLI_assert(BLI_edgehash_haskey(eh, medge->v1, medge->v2) == false);
- 		}
- 	}
- #endif
- 
- 	if (totedge_new) {
- 		EdgeHashIterator *ehi;
- 		MEdge *medge;
- 		unsigned int e_index = totedge;
- 
- 		*r_alledge = medge = (*r_alledge ? MEM_reallocN(*r_alledge, sizeof(MEdge) * (totedge + totedge_new)) :
- 		                                   MEM_calloc_arrayN(totedge_new, sizeof(MEdge), __func__));
- 		medge += totedge;
- 
- 		totedge += totedge_new;
- 
- 		/* --- */
- 		for (ehi = BLI_edgehashIterator_new(eh);
- 		     BLI_edgehashIterator_isDone(ehi) == false;
- 		     BLI_edgehashIterator_step(ehi), ++medge, e_index++)
- 		{
- 			BLI_edgehashIterator_getKey(ehi, &medge->v1, &medge->v2);
- 			BLI_edgehashIterator_setValue(ehi, SET_UINT_IN_POINTER(e_index));
- 
- 			medge->crease = medge->bweight = 0;
- 			medge->flag = ME_EDGEDRAW | ME_EDGERENDER;
- 		}
- 		BLI_edgehashIterator_free(ehi);
- 
- 		*r_totedge = totedge;
- 
- 
- 		for (i = 0, mp = mpoly; i < totpoly; i++, mp++) {
- 			MLoop *l = &mloop[mp->loopstart];
- 			MLoop *l_prev = (l + (mp->totloop - 1));
- 			int j;
- 			for (j = 0; j < mp->totloop; j++, l++) {
- 				/* lookup hashed edge index */
- 				l_prev->e = GET_UINT_FROM_POINTER(BLI_edgehash_lookup(eh, l_prev->v, l->v));
- 				l_prev = l;
- 			}
- 		}
- 	}
- 
- 	BLI_edgehash_free(eh, NULL);
- }
- 
- 
- /* Initialize mverts, medges and, faces for converting nurbs to mesh and derived mesh */
- /* return non-zero on error */
- int BKE_mesh_nurbs_to_mdata(
-         Object *ob, MVert **r_allvert, int *r_totvert,
-         MEdge **r_alledge, int *r_totedge, MLoop **r_allloop, MPoly **r_allpoly,
-         int *r_totloop, int *r_totpoly)
- {
- 	ListBase disp = {NULL, NULL};
- 
- 	if (ob->curve_cache) {
- 		disp = ob->curve_cache->disp;
- 	}
- 
- 	return BKE_mesh_nurbs_displist_to_mdata(
- 	        ob, &disp,
- 	        r_allvert, r_totvert,
- 	        r_alledge, r_totedge,
- 	        r_allloop, r_allpoly, NULL,
- 	        r_totloop, r_totpoly);
- }
- 
- /* BMESH: this doesn't calculate all edges from polygons,
-  * only free standing edges are calculated */
- 
- /* Initialize mverts, medges and, faces for converting nurbs to mesh and derived mesh */
- /* use specified dispbase */
- int BKE_mesh_nurbs_displist_to_mdata(
-         Object *ob, const ListBase *dispbase,
-         MVert **r_allvert, int *r_totvert,
-         MEdge **r_alledge, int *r_totedge,
-         MLoop **r_allloop, MPoly **r_allpoly,
-         MLoopUV **r_alluv,
-         int *r_totloop, int *r_totpoly)
- {
- 	Curve *cu = ob->data;
- 	DispList *dl;
- 	MVert *mvert;
- 	MPoly *mpoly;
- 	MLoop *mloop;
- 	MLoopUV *mloopuv = NULL;
- 	MEdge *medge;
- 	const float *data;
- 	int a, b, ofs, vertcount, startvert, totvert = 0, totedge = 0, totloop = 0, totpoly = 0;
- 	int p1, p2, p3, p4, *index;
- 	const bool conv_polys = ((CU_DO_2DFILL(cu) == false) ||  /* 2d polys are filled with DL_INDEX3 displists */
- 	                         (ob->type == OB_SURF));  /* surf polys are never filled */
- 
- 	/* count */
- 	dl = dispbase->first;
- 	while (dl) {
- 		if (dl->type == DL_SEGM) {
- 			totvert += dl->parts * dl->nr;
- 			totedge += dl->parts * (dl->nr - 1);
- 		}
- 		else if (dl->type == DL_POLY) {
- 			if (conv_polys) {
- 				totvert += dl->parts * dl->nr;
- 				totedge += dl->parts * dl->nr;
- 			}
- 		}
- 		else if (dl->type == DL_SURF) {
- 			int tot;
- 			totvert += dl->parts * dl->nr;
- 			tot = (dl->parts - 1 + ((dl->flag & DL_CYCL_V) == 2)) * (dl->nr - 1 + (dl->flag & DL_CYCL_U));
- 			totpoly += tot;
- 			totloop += tot * 4;
- 		}
- 		else if (dl->type == DL_INDEX3) {
- 			int tot;
- 			totvert += dl->nr;
- 			tot = dl->parts;
- 			totpoly += tot;
- 			totloop += tot * 3;
- 		}
- 		dl = dl->next;
- 	}
- 
- 	if (totvert == 0) {
- 		/* error("can't convert"); */
- 		/* Make Sure you check ob->data is a curve */
- 		return -1;
- 	}
- 
- 	*r_allvert = mvert = MEM_calloc_arrayN(totvert, sizeof(MVert), "nurbs_init mvert");
- 	*r_alledge = medge = MEM_calloc_arrayN(totedge, sizeof(MEdge), "nurbs_init medge");
- 	*r_allloop = mloop = MEM_calloc_arrayN(totpoly, 4 * sizeof(MLoop), "nurbs_init mloop"); // totloop
- 	*r_allpoly = mpoly = MEM_calloc_arrayN(totpoly, sizeof(MPoly), "nurbs_init mloop");
- 
- 	if (r_alluv)
- 		*r_alluv = mloopuv = MEM_calloc_arrayN(totpoly, 4 * sizeof(MLoopUV), "nurbs_init mloopuv");
- 	
- 	/* verts and faces */
- 	vertcount = 0;
- 
- 	dl = dispbase->first;
- 	while (dl) {
- 		const bool is_smooth = (dl->rt & CU_SMOOTH) != 0;
- 
- 		if (dl->type == DL_SEGM) {
- 			startvert = vertcount;
- 			a = dl->parts * dl->nr;
- 			data = dl->verts;
- 			while (a--) {
- 				copy_v3_v3(mvert->co, data);
- 				data += 3;
- 				vertcount++;
- 				mvert++;
- 			}
- 
- 			for (a = 0; a < dl->parts; a++) {
- 				ofs = a * dl->nr;
- 				for (b = 1; b < dl->nr; b++) {
- 					medge->v1 = startvert + ofs + b - 1;
- 					medge->v2 = startvert + ofs + b;
- 					medge->flag = ME_LOOSEEDGE | ME_EDGERENDER | ME_EDGEDRAW;
- 
- 					medge++;
- 				}
- 			}
- 
- 		}
- 		else if (dl->type == DL_POLY) {
- 			if (conv_polys) {
- 				startvert = vertcount;
- 				a = dl->parts * dl->nr;
- 				data = dl->verts;
- 				while (a--) {
- 					copy_v3_v3(mvert->co, data);
- 					data += 3;
- 					vertcount++;
- 					mvert++;
- 				}
- 
- 				for (a = 0; a < dl->parts; a++) {
- 					ofs = a * dl->nr;
- 					for (b = 0; b < dl->nr; b++) {
- 						medge->v1 = startvert + ofs + b;
- 						if (b == dl->nr - 1) medge->v2 = startvert + ofs;
- 						else medge->v2 = startvert + ofs + b + 1;
- 						medge->flag = ME_LOOSEEDGE | ME_EDGERENDER | ME_EDGEDRAW;
- 						medge++;
- 					}
- 				}
- 			}
- 		}
- 		else if (dl->type == DL_INDEX3) {
- 			startvert = vertcount;
- 			a = dl->nr;
- 			data = dl->verts;
- 			while (a--) {
- 				copy_v3_v3(mvert->co, data);
- 				data += 3;
- 				vertcount++;
- 				mvert++;
- 			}
- 
- 			a = dl->parts;
- 			index = dl->index;
- 			while (a--) {
- 				mloop[0].v = startvert + index[0];
- 				mloop[1].v = startvert + index[2];
- 				mloop[2].v = startvert + index[1];
- 				mpoly->loopstart = (int)(mloop - (*r_allloop));
- 				mpoly->totloop = 3;
- 				mpoly->ma

@@ Diff output truncated at 10240 characters. @@



More information about the Bf-blender-cvs mailing list