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];


_______________________________________________
Bf-blender-cvs mailing list
Bf-blender-cvs@blender.org
http://lists.blender.org/mailman/listinfo/bf-blender-cvs

Reply via email to