[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [23876] trunk/blender/source/blender/ editors/transform: X Mirror editmesh with PET
Martin Poirier
theeth at yahoo.com
Thu Oct 15 23:54:22 CEST 2009
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))
||
More information about the Bf-blender-cvs
mailing list