[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [23260] branches/bmesh/blender/source/ blender: mirror fix attempt 2

Joseph Eagar joeedh at gmail.com
Tue Sep 15 21:36:10 CEST 2009


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

Log Message:
-----------
mirror fix attempt 2

Modified Paths:
--------------
    branches/bmesh/blender/source/blender/blenkernel/intern/modifiers_bmesh.c
    branches/bmesh/blender/source/blender/bmesh/intern/bmesh_opdefines.c
    branches/bmesh/blender/source/blender/bmesh/intern/bmesh_operators_private.h
    branches/bmesh/blender/source/blender/bmesh/operators/mirror.c
    branches/bmesh/blender/source/blender/bmesh/operators/utils.c

Modified: branches/bmesh/blender/source/blender/blenkernel/intern/modifiers_bmesh.c
===================================================================
--- branches/bmesh/blender/source/blender/blenkernel/intern/modifiers_bmesh.c	2009-09-15 19:01:38 UTC (rev 23259)
+++ branches/bmesh/blender/source/blender/blenkernel/intern/modifiers_bmesh.c	2009-09-15 19:36:10 UTC (rev 23260)
@@ -545,24 +545,9 @@
 		float mtx2[4][4], vec[3];
 		
 		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);
+		Mat4MulMat4(mtx, ob->obmat, mtx2);
 	} else {
 		Mat4One(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/bmesh/intern/bmesh_opdefines.c
===================================================================
--- branches/bmesh/blender/source/blender/bmesh/intern/bmesh_opdefines.c	2009-09-15 19:01:38 UTC (rev 23259)
+++ branches/bmesh/blender/source/blender/bmesh/intern/bmesh_opdefines.c	2009-09-15 19:36:10 UTC (rev 23260)
@@ -402,7 +402,21 @@
 	0,
 };
 
+/*
+  Scale
 
+  Scales vertices by an offset.
+*/
+BMOpDefine def_scale= {
+	"scale",
+	{{BMOP_OPSLOT_VEC, "vec"}, //scale factor
+	{BMOP_OPSLOT_ELEMENT_BUF, "verts"}, //input vertices
+	{0, /*null-terminating sentinel*/}},
+	bmesh_scale_exec,
+	0,
+};
+
+
 /*
   Transform
 
@@ -796,6 +810,7 @@
 	&def_bmesh_to_mesh,
 	&def_meshreverseuvs,
 	&def_edgenet_prepare,
+	&def_scale,
 };
 
 int bmesh_total_ops = (sizeof(opdefines) / sizeof(void*));

Modified: branches/bmesh/blender/source/blender/bmesh/intern/bmesh_operators_private.h
===================================================================
--- branches/bmesh/blender/source/blender/bmesh/intern/bmesh_operators_private.h	2009-09-15 19:01:38 UTC (rev 23259)
+++ branches/bmesh/blender/source/blender/bmesh/intern/bmesh_operators_private.h	2009-09-15 19:36:10 UTC (rev 23260)
@@ -55,5 +55,6 @@
 void object_load_bmesh_exec(BMesh *bm, BMOperator *op);
 void bmesh_reverseuvs_exec(BMesh *bm, BMOperator *op);
 void bmesh_edgenet_prepare(BMesh *bm, BMOperator *op);
+void bmesh_scale_exec(BMesh *bm, BMOperator *op);
 
 #endif

Modified: branches/bmesh/blender/source/blender/bmesh/operators/mirror.c
===================================================================
--- branches/bmesh/blender/source/blender/bmesh/operators/mirror.c	2009-09-15 19:01:38 UTC (rev 23259)
+++ branches/bmesh/blender/source/blender/bmesh/operators/mirror.c	2009-09-15 19:36:10 UTC (rev 23260)
@@ -42,6 +42,7 @@
 	V_DECLARE(emap);
 	float mtx[4][4];
 	float imtx[4][4];
+	float scale[3] = {1.0f, 1.0f, 1.0f};
 	float dist = BMO_Get_Float(op, "mergedist");
 	int i, ototvert, ototedge, axis = BMO_Get_Int(op, "axis");
 	int mirroru = BMO_Get_Int(op, "mirror_u");
@@ -72,7 +73,10 @@
 	}
 
 	/*feed old data to transform bmop*/
+	scale[axis] = -1.0f;
 	BMO_CallOpf(bm, "transform verts=%fv mat=%m4", ELE_NEW, mtx);
+	BMO_CallOpf(bm, "scale verts=%fv vec=%v", ELE_NEW, scale);
+	BMO_CallOpf(bm, "transform verts=%fv mat=%m4", ELE_NEW, imtx);
 	
 	BMO_Init_Op(&weldop, "weldverts");
 

Modified: branches/bmesh/blender/source/blender/bmesh/operators/utils.c
===================================================================
--- branches/bmesh/blender/source/blender/bmesh/operators/utils.c	2009-09-15 19:01:38 UTC (rev 23259)
+++ branches/bmesh/blender/source/blender/bmesh/operators/utils.c	2009-09-15 19:36:10 UTC (rev 23260)
@@ -54,10 +54,6 @@
 	}
 }
 
-/*this operator calls the transform operator, which
-  is a little complex, but makes it easier to make
-  sure the transform op is working, since initially
-  only this one will be used.*/
 void bmesh_translate_exec(BMesh *bm, BMOperator *op)
 {
 	float mat[4][4], vec[3];
@@ -70,6 +66,20 @@
 	BMO_CallOpf(bm, "transform mat=%m4 verts=%s", mat, op, "verts");
 }
 
+void bmesh_scale_exec(BMesh *bm, BMOperator *op)
+{
+	float mat[3][3], vec[3];
+	
+	BMO_Get_Vec(op, "vec", vec);
+
+	Mat3One(mat);
+	mat[0][0] = vec[0];
+	mat[1][1] = vec[1];
+	mat[2][2] = vec[2];
+
+	BMO_CallOpf(bm, "transform mat=%m3 verts=%s", mat, op, "verts");
+}
+
 void bmesh_rotate_exec(BMesh *bm, BMOperator *op)
 {
 	float vec[3];





More information about the Bf-blender-cvs mailing list