[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [35860] branches/bmesh/blender/source/ blender: =bmesh=

Joseph Eagar joeedh at gmail.com
Tue Mar 29 07:48:18 CEST 2011


Revision: 35860
          http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=35860
Author:   joeedh
Date:     2011-03-29 05:48:18 +0000 (Tue, 29 Mar 2011)
Log Message:
-----------
=bmesh=

Multires interpolation is considerably better
now, though it still has a problem with occasionally
producing little random tangent spikes.  Still, it's
far better then it was.

Also fixed a bug in dissolve faces.

Modified Paths:
--------------
    branches/bmesh/blender/source/blender/blenkernel/BKE_cdderivedmesh.h
    branches/bmesh/blender/source/blender/blenkernel/BKE_multires.h
    branches/bmesh/blender/source/blender/blenkernel/intern/DerivedMesh.c
    branches/bmesh/blender/source/blender/blenkernel/intern/cdderivedmesh.c
    branches/bmesh/blender/source/blender/blenkernel/intern/constraint.c
    branches/bmesh/blender/source/blender/blenkernel/intern/editderivedbmesh.c
    branches/bmesh/blender/source/blender/blenkernel/intern/mesh.c
    branches/bmesh/blender/source/blender/blenkernel/intern/modifier.c
    branches/bmesh/blender/source/blender/blenkernel/intern/modifiers_bmesh.c
    branches/bmesh/blender/source/blender/blenkernel/intern/multires.c
    branches/bmesh/blender/source/blender/blenkernel/intern/subsurf_ccg.c
    branches/bmesh/blender/source/blender/blenlib/BLI_utildefines.h
    branches/bmesh/blender/source/blender/bmesh/bmesh.h
    branches/bmesh/blender/source/blender/bmesh/bmesh_class.h
    branches/bmesh/blender/source/blender/bmesh/bmesh_operator_api.h
    branches/bmesh/blender/source/blender/bmesh/intern/bmesh_construct.c
    branches/bmesh/blender/source/blender/bmesh/intern/bmesh_interp.c
    branches/bmesh/blender/source/blender/bmesh/intern/bmesh_mesh.c
    branches/bmesh/blender/source/blender/bmesh/intern/bmesh_mods.c
    branches/bmesh/blender/source/blender/bmesh/intern/bmesh_opdefines.c
    branches/bmesh/blender/source/blender/bmesh/intern/bmesh_operators.c
    branches/bmesh/blender/source/blender/bmesh/intern/bmesh_polygon.c
    branches/bmesh/blender/source/blender/bmesh/intern/bmesh_private.h
    branches/bmesh/blender/source/blender/bmesh/operators/bmesh_dupeops.c
    branches/bmesh/blender/source/blender/editors/mesh/bmesh_tools.c
    branches/bmesh/blender/source/blender/editors/mesh/bmeshutils.c
    branches/bmesh/blender/source/blender/modifiers/intern/MOD_armature.c
    branches/bmesh/blender/source/blender/modifiers/intern/MOD_array.c
    branches/bmesh/blender/source/blender/modifiers/intern/MOD_curve.c
    branches/bmesh/blender/source/blender/modifiers/intern/MOD_hook.c
    branches/bmesh/blender/source/blender/modifiers/intern/MOD_lattice.c
    branches/bmesh/blender/source/blender/modifiers/intern/MOD_util.c

Modified: branches/bmesh/blender/source/blender/blenkernel/BKE_cdderivedmesh.h
===================================================================
--- branches/bmesh/blender/source/blender/blenkernel/BKE_cdderivedmesh.h	2011-03-29 05:10:36 UTC (rev 35859)
+++ branches/bmesh/blender/source/blender/blenkernel/BKE_cdderivedmesh.h	2011-03-29 05:48:18 UTC (rev 35860)
@@ -62,7 +62,7 @@
 struct DerivedMesh *CDDM_from_editmesh(struct EditMesh *em, struct Mesh *me);
 
 /* creates a CDDerivedMesh from the given BMEditMesh */
-DerivedMesh *CDDM_from_BMEditMesh(struct BMEditMesh *em, struct Mesh *me);
+DerivedMesh *CDDM_from_BMEditMesh(struct BMEditMesh *em, struct Mesh *me, int use_mdisps);
 
 /* merge verts  */
 DerivedMesh *CDDM_merge_verts(DerivedMesh *dm, int *vtargetmap);
@@ -74,7 +74,7 @@
 /* useful for OrcoDM creation for curves with constructive modifiers */
 DerivedMesh *CDDM_from_curve_customDB(struct Object *ob, struct ListBase *dispbase);
 
-struct BMEditMesh *CDDM_To_BMesh(DerivedMesh *dm, struct BMEditMesh *existing);
+struct BMEditMesh *CDDM_To_BMesh(struct Object *ob, struct DerivedMesh *dm, struct BMEditMesh *existing);
 
 
 /* Copies the given DerivedMesh with verts, faces & edges stored as

Modified: branches/bmesh/blender/source/blender/blenkernel/BKE_multires.h
===================================================================
--- branches/bmesh/blender/source/blender/blenkernel/BKE_multires.h	2011-03-29 05:10:36 UTC (rev 35859)
+++ branches/bmesh/blender/source/blender/blenkernel/BKE_multires.h	2011-03-29 05:48:18 UTC (rev 35860)
@@ -73,6 +73,14 @@
 
 void multires_stitch_grids(struct Object *);
 
+/*switch mdisp data in dm between tangent and object space*/
+enum {
+	MULTIRES_SPACE_TANGENT,
+	MULTIRES_SPACE_OBJECT,
+	MULTIRES_SPACE_ABSOLUTE,
+};
+void multires_set_space(struct DerivedMesh *dm, struct Object *ob, int from, int to);
+
 /* Related to the old multires */
 void multires_free(struct Multires *mr);
 void multires_load_old(struct Object *ob, struct Mesh *me);

Modified: branches/bmesh/blender/source/blender/blenkernel/intern/DerivedMesh.c
===================================================================
--- branches/bmesh/blender/source/blender/blenkernel/intern/DerivedMesh.c	2011-03-29 05:10:36 UTC (rev 35859)
+++ branches/bmesh/blender/source/blender/blenkernel/intern/DerivedMesh.c	2011-03-29 05:48:18 UTC (rev 35860)
@@ -754,7 +754,7 @@
 	float (*orco)[3];
 	int free;
 
-	if(em) dm= CDDM_from_BMEditMesh(em, me);
+	if(em) dm= CDDM_from_BMEditMesh(em, me, 0);
 	else dm= CDDM_from_mesh(me, ob);
 
 	orco= get_orco_coords_dm(ob, em, layer, &free);
@@ -1379,7 +1379,7 @@
 				}
 
 			} else {
-				dm = CDDM_from_BMEditMesh(em, ob->data);
+				dm = CDDM_from_BMEditMesh(em, ob->data, 0);
 
 				if(deformedVerts) {
 					CDDM_apply_vert_coords(dm, deformedVerts);

Modified: branches/bmesh/blender/source/blender/blenkernel/intern/cdderivedmesh.c
===================================================================
--- branches/bmesh/blender/source/blender/blenkernel/intern/cdderivedmesh.c	2011-03-29 05:10:36 UTC (rev 35859)
+++ branches/bmesh/blender/source/blender/blenkernel/intern/cdderivedmesh.c	2011-03-29 05:48:18 UTC (rev 35860)
@@ -1832,7 +1832,7 @@
 	}
 }
 
-DerivedMesh *CDDM_from_BMEditMesh(BMEditMesh *em, Mesh *me)
+DerivedMesh *CDDM_from_BMEditMesh(BMEditMesh *em, Mesh *me, int use_mdisps)
 {
 	DerivedMesh *dm = CDDM_new(em->bm->totvert, em->bm->totedge, 
 	                       em->tottri, em->bm->totloop, em->bm->totface);
@@ -1851,6 +1851,7 @@
 	int numTex = CustomData_number_of_layers(&em->bm->pdata, CD_MTEXPOLY);
 	int i, j, *index, add_orig;
 	int has_crease, has_edge_bweight, has_vert_bweight;
+	int flag;
 	
 	has_edge_bweight = CustomData_has_layer(&em->bm->edata, CD_BWEIGHT);
 	has_vert_bweight = CustomData_has_layer(&em->bm->vdata, CD_BWEIGHT);
@@ -1861,13 +1862,14 @@
 	/*don't add origindex layer if one already exists*/
 	add_orig = !CustomData_has_layer(&em->bm->pdata, CD_ORIGINDEX);
 
-	CustomData_merge(&em->bm->vdata, &dm->vertData, CD_MASK_DERIVEDMESH,
+	flag = use_mdisps ? CD_MASK_DERIVEDMESH|CD_MASK_MDISPS : CD_MASK_DERIVEDMESH;
+	CustomData_merge(&em->bm->vdata, &dm->vertData, flag,
 	                 CD_CALLOC, dm->numVertData);
-	CustomData_merge(&em->bm->edata, &dm->edgeData, CD_MASK_DERIVEDMESH,
+	CustomData_merge(&em->bm->edata, &dm->edgeData, flag,
 	                 CD_CALLOC, dm->numEdgeData);
-	CustomData_merge(&em->bm->ldata, &dm->loopData, CD_MASK_DERIVEDMESH,
+	CustomData_merge(&em->bm->ldata, &dm->loopData, flag,
 	                 CD_CALLOC, dm->numLoopData);
-	CustomData_merge(&em->bm->pdata, &dm->polyData, CD_MASK_DERIVEDMESH,
+	CustomData_merge(&em->bm->pdata, &dm->polyData, flag,
 	                 CD_CALLOC, dm->numPolyData);
 	
 	/*add tesselation mface layers*/

Modified: branches/bmesh/blender/source/blender/blenkernel/intern/constraint.c
===================================================================
--- branches/bmesh/blender/source/blender/blenkernel/intern/constraint.c	2011-03-29 05:10:36 UTC (rev 35859)
+++ branches/bmesh/blender/source/blender/blenkernel/intern/constraint.c	2011-03-29 05:48:18 UTC (rev 35860)
@@ -444,7 +444,7 @@
 	/* get DerivedMesh */
 	if (em) {
 		/* target is in editmode, so get a special derived mesh */
-		dm = CDDM_from_BMEditMesh(em, ob->data);
+		dm = CDDM_from_BMEditMesh(em, ob->data, 0);
 		freeDM= 1;
 	}
 	else {

Modified: branches/bmesh/blender/source/blender/blenkernel/intern/editderivedbmesh.c
===================================================================
--- branches/bmesh/blender/source/blender/blenkernel/intern/editderivedbmesh.c	2011-03-29 05:10:36 UTC (rev 35859)
+++ branches/bmesh/blender/source/blender/blenkernel/intern/editderivedbmesh.c	2011-03-29 05:48:18 UTC (rev 35860)
@@ -298,10 +298,10 @@
 	if (em->edge_index) MEM_freeN(em->edge_index);
 	if (em->face_index) MEM_freeN(em->face_index);
 
-	BM_Free_Mesh(em->bm);
+	if (em->bm)
+		BM_Free_Mesh(em->bm);
 }
 
-
 /*
 ok, basic design:
 

Modified: branches/bmesh/blender/source/blender/blenkernel/intern/mesh.c
===================================================================
--- branches/bmesh/blender/source/blender/blenkernel/intern/mesh.c	2011-03-29 05:10:36 UTC (rev 35859)
+++ branches/bmesh/blender/source/blender/blenkernel/intern/mesh.c	2011-03-29 05:48:18 UTC (rev 35860)
@@ -567,7 +567,7 @@
 	BMesh *bm;
 	int allocsize[4] = {512,512,2048,512};
 
-	bm = BM_Make_Mesh(allocsize);
+	bm = BM_Make_Mesh(ob, allocsize);
 
 	BMO_CallOpf(bm, "mesh_to_bmesh mesh=%p object=%p", me, ob);
 

Modified: branches/bmesh/blender/source/blender/blenkernel/intern/modifier.c
===================================================================
--- branches/bmesh/blender/source/blender/blenkernel/intern/modifier.c	2011-03-29 05:10:36 UTC (rev 35859)
+++ branches/bmesh/blender/source/blender/blenkernel/intern/modifier.c	2011-03-29 05:48:18 UTC (rev 35860)
@@ -301,7 +301,8 @@
 {
 	ModifierTypeInfo *mti = modifierType_getInfo(md->type);
 
-	md->scene= scene;
+	if (scene)
+		md->scene= scene;
 
 	if((md->mode & required_mode) != required_mode) return 0;
 	if(mti->isDisabled && mti->isDisabled(md, required_mode == eModifierMode_Render)) return 0;

Modified: branches/bmesh/blender/source/blender/blenkernel/intern/modifiers_bmesh.c
===================================================================
--- branches/bmesh/blender/source/blender/blenkernel/intern/modifiers_bmesh.c	2011-03-29 05:10:36 UTC (rev 35859)
+++ branches/bmesh/blender/source/blender/blenkernel/intern/modifiers_bmesh.c	2011-03-29 05:48:18 UTC (rev 35860)
@@ -106,7 +106,7 @@
 
 /*converts a cddm to a BMEditMesh.  if existing is non-NULL, the
   new geometry will be put in there.*/
-BMEditMesh *CDDM_To_BMesh(DerivedMesh *dm, BMEditMesh *existing)
+BMEditMesh *CDDM_To_BMesh(Object *ob, DerivedMesh *dm, BMEditMesh *existing)
 {
 	int allocsize[4] = {512, 512, 2048, 512};
 	BMesh *bm, bmold; /*bmold is for storing old customdata layout*/
@@ -125,7 +125,7 @@
 	int i, j, k, totvert, totedge, totface;
 	
 	if (em) bm = em->bm;
-	else bm = BM_Make_Mesh(allocsize);
+	else bm = BM_Make_Mesh(ob, allocsize);
 
 	bmold = *bm;
 

Modified: branches/bmesh/blender/source/blender/blenkernel/intern/multires.c
===================================================================
--- branches/bmesh/blender/source/blender/blenkernel/intern/multires.c	2011-03-29 05:10:36 UTC (rev 35859)
+++ branches/bmesh/blender/source/blender/blenkernel/intern/multires.c	2011-03-29 05:48:18 UTC (rev 35860)
@@ -63,7 +63,7 @@
 static const int multires_side_tot[] = {0, 2, 3, 5,  9,  17,  33,   65,   129,   257,   513,    1025,    2049,    4097};
 
 static void multires_mvert_to_ss(DerivedMesh *dm, MVert *mvert);
-static void multiresModifier_disp_run(DerivedMesh *dm, Mesh *me, int invert, int add, DMGridData **oldGridData, int totlvl);
+static void multiresModifier_disp_run(DerivedMesh *dm, Mesh *me, DerivedMesh *dm2, int invert, int add, DMGridData **oldGridData, int totlvl);
 
 DerivedMesh *get_multires_dm(Scene *scene, MultiresModifierData *mmd, Object *ob)
 {
@@ -126,6 +126,9 @@
 
 static int multires_get_level(Object *ob, MultiresModifierData *mmd, int render)
 {
+	if (!ob || !mmd)
+		return 0;
+	
 	if(render)
 		return (mmd->modifier.scene)? get_render_subsurf_level(&mmd->modifier.scene->r, mmd->renderlvl): mmd->renderlvl;
 	else if(ob->mode == OB_MODE_SCULPT)
@@ -314,12 +317,12 @@
 	}
 }
 
-static void multires_reallocate_mdisps(Mesh *me, MDisps *mdisps, int lvl)
+static void multires_reallocate_mdisps(int totloop, MDisps *mdisps, int lvl)
 {
 	int i;
 
 	/* reallocate displacements to be filled in */
-	for(i = 0; i < me->totloop; ++i) {
+	for(i = 0; i < totloop; ++i) {
 		int totdisp = multires_grid_tot[lvl];
 		float (*disps)[3] = BLI_cellalloc_calloc(sizeof(float) * 3 * totdisp, "multires disps");
 
@@ -331,6 +334,7 @@
 	}
 }
 
+
 static void column_vectors_to_mat3(float mat[][3], float v1[3], float v2[3], float v3[3])
 {
 	copy_v3_v3(mat[0], v1);
@@ -395,11 +399,11 @@
 			MLoop *ml = me->mloop;
 			int nsize = multires_side_tot[lvl];
 			int hsize = multires_side_tot[mmd->totlvl];
-			int i, j, k=0;
+			int i, j;
 
 			for(i = 0; i < me->totpoly; ++i) {
-				for (j=0; j<me->mpoly[i].totloop; j++, k++) {
-					MDisps *mdisp= &mdisps[k];
+				for (j=0; j<me->mpoly[i].totloop; j++) {
+					MDisps *mdisp= &mdisps[me->mpoly[i].loopstart+j];
 					float (*disps)[3], (*ndisps)[3], (*hdisps)[3];

@@ Diff output truncated at 10240 characters. @@



More information about the Bf-blender-cvs mailing list