Revision: 23876
          
http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=23876
Author:   theeth
Date:     2009-10-15 23:54:22 +0200 (Thu, 15 Oct 2009)

Log Message:
-----------
X Mirror editmesh with PET

Lock vertice near the middle (|x| < 0.0001) on the mirror's plane.
Don't propagate transformation across mirror plane (this could probably be 
smarter)

Modified Paths:
--------------
    trunk/blender/source/blender/editors/transform/transform.h
    trunk/blender/source/blender/editors/transform/transform_conversions.c
    trunk/blender/source/blender/editors/transform/transform_generics.c

Modified: trunk/blender/source/blender/editors/transform/transform.h
===================================================================
--- trunk/blender/source/blender/editors/transform/transform.h  2009-10-15 
20:38:35 UTC (rev 23875)
+++ trunk/blender/source/blender/editors/transform/transform.h  2009-10-15 
21:54:22 UTC (rev 23876)
@@ -215,7 +215,7 @@
        TransDataExtension *ext;        /* for objects, poses. 1 single malloc 
per TransInfo! */
        TransDataCurveHandleFlags *hdata; /* for curves, stores handle flags 
for modification/cancel */
        void  *extra;            /* extra data (mirrored element pointer, in 
editmode mesh to EditVert) (editbone for roll fixing) (...) */
-    short  flag;         /* Various flags */
+    int  flag;         /* Various flags */
        short  protectflag;      /* If set, copy of Object or PoseChannel 
protection */
        int    rotOrder;        /* rotation mode,  as defined in eRotationModes 
(DNA_action_types.h) */
 } TransData;
@@ -289,6 +289,8 @@
        short           current_orientation;
 
        short           prop_mode;
+       
+       short           mirror;
 
        float           values[4];
        float           auto_values[4];
@@ -398,6 +400,7 @@
 #define TD_NO_LOC                      (1 << 13)       /* when this is set, 
don't apply translation changes to this element */
 #define TD_NOTIMESNAP          (1 << 14)       /* for Graph Editor autosnap, 
indicates that point should not undergo autosnapping */
 #define TD_INTVALUES           (1 << 15)       /* for Graph Editor - curves 
that can only have int-values need their keyframes tagged with this */
+#define TD_MIRROR_EDGE         (1 << 16)       /* For editmode mirror, clamp 
to x = 0 */
 
 /* transsnap->status */
 #define SNAP_ON                        1

Modified: trunk/blender/source/blender/editors/transform/transform_conversions.c
===================================================================
--- trunk/blender/source/blender/editors/transform/transform_conversions.c      
2009-10-15 20:38:35 UTC (rev 23875)
+++ trunk/blender/source/blender/editors/transform/transform_conversions.c      
2009-10-15 21:54:22 UTC (rev 23876)
@@ -2214,7 +2214,10 @@
                for (eve=em->verts.first; eve; eve=eve->next) {
                        if(eve->h==0 && eve->f1 && eve->co[0]!=0.0f) {
                                if(eve->co[0]<0.0f)
+                               {
+                                       t->mirror = -1;
                                        mirror = -1;
+                               }
                                break;
                        }
                }
@@ -2280,6 +2283,19 @@
                        }
                }
        }
+       
+       if (mirror != 0)
+       {
+               tob = t->data;
+               for( a = 0; a < t->total; a++, tob++ )
+               {
+                       if (ABS(tob->loc[0]) <= 0.00001f)
+                       {
+                               tob->flag |= TD_MIRROR_EDGE;
+                       }
+               }
+       }
+       
        if (propmode) {
                MEM_freeN(vectors);
                MEM_freeN(nears);

Modified: trunk/blender/source/blender/editors/transform/transform_generics.c
===================================================================
--- trunk/blender/source/blender/editors/transform/transform_generics.c 
2009-10-15 20:38:35 UTC (rev 23875)
+++ trunk/blender/source/blender/editors/transform/transform_generics.c 
2009-10-15 21:54:22 UTC (rev 23876)
@@ -259,11 +259,16 @@
                        continue;
                
                eve = td->extra;
-               if(eve) {
+               if (eve) {
                        eve->co[0]= -td->loc[0];
                        eve->co[1]= td->loc[1];
                        eve->co[2]= td->loc[2];
                }
+               
+               if (td->flag & TD_MIRROR_EDGE)
+               {
+                       td->loc[0] = 0;
+               }
        }
 }
 
@@ -969,6 +974,7 @@
                if (RNA_boolean_get(op->ptr, "mirror"))
                {
                        t->flag |= T_MIRROR;
+                       t->mirror = 1;
                }
        }
        // Need stuff to take it from edit mesh or whatnot here
@@ -977,6 +983,7 @@
                if (t->obedit && t->obedit->type == OB_MESH && (((Mesh 
*)t->obedit->data)->editflag & ME_EDIT_MIRROR_X))
                {
                        t->flag |= T_MIRROR;
+                       t->mirror = 1;
                }
        }
        
@@ -1373,6 +1380,12 @@
                        if (td->flag & TD_SELECTED) {
                                td->factor = 1.0f;
                        }
+                       else if (t->flag & T_MIRROR && td->loc[0] * t->mirror < 
-0.00001f)
+                       {
+                               td->flag |= TD_SKIP;
+                               td->factor = 0.0f;
+                               restoreElement(td);
+                       }
                        else if ((connected &&
                                                (td->flag & TD_NOTCONNECTED || 
td->dist > t->prop_size))
                                ||


_______________________________________________
Bf-blender-cvs mailing list
[email protected]
http://lists.blender.org/mailman/listinfo/bf-blender-cvs

Reply via email to