[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [23257] branches/bmesh/blender/source/ blender: mirror modifier with mirrorob set works properly (I hope) again

Joseph Eagar joeedh at gmail.com
Tue Sep 15 20:51:35 CEST 2009


Revision: 23257
          http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=23257
Author:   joeedh
Date:     2009-09-15 20:51:33 +0200 (Tue, 15 Sep 2009)

Log Message:
-----------
mirror modifier with mirrorob set works properly (I hope) again

Modified Paths:
--------------
    branches/bmesh/blender/source/blender/blenkernel/BKE_utildefines.h
    branches/bmesh/blender/source/blender/blenkernel/intern/modifiers_bmesh.c
    branches/bmesh/blender/source/blender/blenkernel/intern/subsurf_ccg.c
    branches/bmesh/blender/source/blender/blenlib/intern/BLI_cellalloc.c

Modified: branches/bmesh/blender/source/blender/blenkernel/BKE_utildefines.h
===================================================================
--- branches/bmesh/blender/source/blender/blenkernel/BKE_utildefines.h	2009-09-15 18:01:18 UTC (rev 23256)
+++ branches/bmesh/blender/source/blender/blenkernel/BKE_utildefines.h	2009-09-15 18:51:33 UTC (rev 23257)
@@ -250,7 +250,7 @@
 #define BM_INLINE static inline __attribute((always_inline))
 #endif
 
-#define BMEMSET(mem, val, size) {int _i; char *_c = mem; for (_i=0; _i<size; _i++) *_c++ = val;}
+#define BMEMSET(mem, val, size) {unsigned int _i; char *_c = (char*) mem; for (_i=0; _i<size; _i++) *_c++ = val;}
 
 #endif
 

Modified: branches/bmesh/blender/source/blender/blenkernel/intern/modifiers_bmesh.c
===================================================================
--- branches/bmesh/blender/source/blender/blenkernel/intern/modifiers_bmesh.c	2009-09-15 18:01:18 UTC (rev 23256)
+++ branches/bmesh/blender/source/blender/blenkernel/intern/modifiers_bmesh.c	2009-09-15 18:51:33 UTC (rev 23257)
@@ -121,12 +121,11 @@
 	BMVert *v, **vtable, **verts=NULL;
 	BMEdge *e, **etable, **edges=NULL;
 	BMFace *f;
-	BMIter liter, iter;
+	BMIter liter;
 	V_DECLARE(verts);
 	V_DECLARE(edges);
-	void *tmp;
 	int numTex, numCol;
-	int i, j, k, tot, totvert, totedge, totface;
+	int i, j, k, totvert, totedge, totface;
 	
 	if (em) bm = em->bm;
 	else bm = BM_Make_Mesh(allocsize);
@@ -285,12 +284,10 @@
 	float final_offset[4][4];
 	float tmp_mat[4][4];
 	float length = amd->length;
-	int count = amd->count;
-	int numVerts, numEdges, numFaces;
-	int maxVerts, maxEdges, maxFaces;
+	int count = amd->count, maxVerts;
 	int finalVerts, finalEdges, finalFaces;
 	int *indexMap = NULL;
-	DerivedMesh *result, *start_cap = NULL, *end_cap = NULL;
+	DerivedMesh *start_cap = NULL, *end_cap = NULL;
 	MVert *src_mvert;
 
 	/* need to avoid infinite recursion here */
@@ -411,7 +408,6 @@
 		if (j == 0) {
 			BMOperator findop;
 			BMOIter oiter;
-			BMIter iter;
 			BMVert *v, *v2;
 			BMHeader *h;
 
@@ -516,14 +512,14 @@
 	DerivedMesh *result, *cddm;
 	BMEditMesh *em;
 	BMesh *bm;
-	BMOIter siter1, siter2;
+	BMOIter siter1;
 	BMOperator op;
-	BMVert *v1, *v2;
+	BMVert *v1;
 	int vector_size=0, a, b;
 	bDeformGroup *def, *defb;
 	bDeformGroup **vector_def = NULL;
 	float mtx[4][4], imtx[4][4];
-	int i, j;
+	int j;
 
 	cddm = dm; //copying shouldn't be necassary here, as all modifiers return CDDM's
 	em = CDDM_To_BMesh(dm, NULL);
@@ -546,15 +542,27 @@
 	}
 
 	if (mmd->mirror_ob) {
-		float obinv[4][4];
+		float mtx2[4][4], vec[3];
 		
-		Mat4Invert(obinv, mmd->mirror_ob->obmat);
-		Mat4MulMat4(mtx, ob->obmat, obinv);
-		Mat4Invert(imtx, mtx);
+		Mat4Invert(mtx2, mmd->mirror_ob->obmat);
+		Mat4Ortho(mtx2);
+		Mat4MulMat4(imtx, ob->obmat, mtx2);
+		Mat4Invert(mtx, imtx);
+		
+		/*this math here is probably stupid beyond all reason*/
+		VECCOPY(vec, mtx[3]);
+		VecMulf(vec, -1.0f);
+
+		Mat4One(imtx);
+		imtx[axis][axis] = -1.0f;
+		Mat4MulMat4(mtx2, imtx, mtx);
+
+		Mat4One(imtx);
+		VECCOPY(imtx[3], vec);
+		Mat4MulMat4(mtx, imtx, mtx2);
 	} else {
 		Mat4One(mtx);
-		mtx[axis][axis] = -1;
-		Mat4Invert(imtx, mtx);
+		mtx[axis][axis] = -1.0f;
 	}
 
 	BMO_InitOpf(bm, &op, "mirror geom=%avef mat=%m4 mergedist=%f axis=%d", 

Modified: branches/bmesh/blender/source/blender/blenkernel/intern/subsurf_ccg.c
===================================================================
--- branches/bmesh/blender/source/blender/blenkernel/intern/subsurf_ccg.c	2009-09-15 18:01:18 UTC (rev 23256)
+++ branches/bmesh/blender/source/blender/blenkernel/intern/subsurf_ccg.c	2009-09-15 18:51:33 UTC (rev 23257)
@@ -565,7 +565,7 @@
 	double curt = PIL_check_seconds_timer();
 
 	cgdm = getCCGDerivedMesh(ss, drawInteriorEdges, useSubsurfUv, dm);
-	result = CDDM_copy(cgdm, 0);
+	result = CDDM_copy(cgdm, 1);
 
 	printf("subsurf conversion time: %.6lf\n", PIL_check_seconds_timer() - curt);
 	

Modified: branches/bmesh/blender/source/blender/blenlib/intern/BLI_cellalloc.c
===================================================================
--- branches/bmesh/blender/source/blender/blenlib/intern/BLI_cellalloc.c	2009-09-15 18:01:18 UTC (rev 23256)
+++ branches/bmesh/blender/source/blender/blenlib/intern/BLI_cellalloc.c	2009-09-15 18:51:33 UTC (rev 23257)
@@ -62,11 +62,16 @@
 	int idcheck;
 } MemHeader;
 
+//#define USE_GUARDEDALLOC
+
 void *BLI_cellalloc_malloc(long size, char *tag)
 {
 	MemHeader *memh;
 	int slot = size + sizeof(MemHeader);
-
+	
+#ifdef USE_GUARDEDALLOC
+	return MEM_mallocN(size, tag);
+#endif
 	if (!slot) 
 		return NULL;
 	
@@ -115,6 +120,10 @@
 	MemHeader *memh = mem;
 	int slot;
 
+#ifdef USE_GUARDEDALLOC
+	MEM_freeN(mem);
+	return;
+#endif
 	if (!memh)
 		return;
 





More information about the Bf-blender-cvs mailing list