[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