Page MenuHome

axisgen05.txt

axisgen05.txt

Index: source/blender/makesdna/DNA_scene_types.h
===================================================================
--- source/blender/makesdna/DNA_scene_types.h (revision 10991)
+++ source/blender/makesdna/DNA_scene_types.h (working copy)
@@ -333,7 +333,8 @@
short uvcalc_mapalign;
short uvcalc_flag;
- short pad2;
+ /* Mirror axis */
+ short mirror;
/* Image Paint (8 byte aligned please!) */
struct ImagePaintSettings imapaint;
Index: source/blender/include/blendef.h
===================================================================
--- source/blender/include/blendef.h (revision 10991)
+++ source/blender/include/blendef.h (working copy)
@@ -420,22 +420,27 @@
#define B_KEEPORIG 2
#define B_BEAUTY 4
#define B_SMOOTH 8
-#define B_BEAUTY_SHORT 16
+#define B_BEAUTY_SHORT 16
#define B_AUTOFGON 32
#define B_KNIFE 0x80
-#define B_PERCENTSUBD 0x40
-#define B_MESH_X_MIRROR 0x100
-#define B_JOINTRIA_UV 0x200
-#define B_JOINTRIA_VCOL 0X400
-#define B_JOINTRIA_SHARP 0X800
-#define B_JOINTRIA_MAT 0X1000
+#define B_PERCENTSUBD 0x40
+#define B_MESH_MIRROR 0x100
+#define B_JOINTRIA_UV 0x200
+#define B_JOINTRIA_VCOL 0X400
+#define B_JOINTRIA_SHARP 0X800
+#define B_JOINTRIA_MAT 0X1000
/* DISPLAYMODE */
#define R_DISPLAYIMAGE 0
#define R_DISPLAYWIN 1
#define R_DISPLAYSCREEN 2
- /* Gvp.flag and Gwp.flag */
+/* mirror axes */
+#define MIRROR_X 0
+#define MIRROR_Y 1
+#define MIRROR_Z 2
+
+/* Gvp.flag and Gwp.flag */
#define VP_COLINDEX 1
#define VP_AREA 2
#define VP_SOFT 4
Index: source/blender/include/BIF_meshtools.h
===================================================================
--- source/blender/include/BIF_meshtools.h (revision 10991)
+++ source/blender/include/BIF_meshtools.h (working copy)
@@ -44,7 +44,8 @@
extern long mesh_octree_table(struct Object *ob, float *co, char mode);
extern int mesh_get_x_mirror_vert(struct Object *ob, int index);
-extern struct EditVert *editmesh_get_x_mirror_vert(struct Object *ob, float *co);
+extern void setmirroredcoords(float *vec, float *co, int mirror);
+extern struct EditVert *editmesh_get_mirror_vert(struct Object *ob, float *co, int mirror);
#endif
Index: source/blender/src/buttons_editing.c
===================================================================
--- source/blender/src/buttons_editing.c (revision 10991)
+++ source/blender/src/buttons_editing.c (working copy)
@@ -4381,8 +4381,12 @@
uiBlockEndAlign(block);
uiBlockBeginAlign(block);
- uiDefButBitI(block, TOG, G_ALLEDGES, 0, "All Edges", 1125, 22,150,19, &G.f, 0, 0, 0, 0, "Displays all edges in object mode without optimization");
- uiDefButBitS(block, TOG, B_MESH_X_MIRROR, B_DIFF, "X-axis mirror",1125,0,150,19, &G.scene->toolsettings->editbutflag, 0, 0, 0, 0, "While using transforms, mirrors the transformation");
+ uiDefButBitI(block, TOG, G_ALLEDGES, 0, "All Edges", 1125, 44,150,19, &G.f, 0, 0, 0, 0, "Displays all edges in object mode without optimization");
+
+ uiDefButBitS(block, TOG, B_MESH_MIRROR, B_DIFF, "Mirror",1125,22,150,19, &G.scene->toolsettings->editbutflag, 0, 0, 0, 0, "Enable mirrored editing");
+ uiDefButS(block, ROW, B_DIFF, "X", 1125, 0, 50, 19, &G.scene->toolsettings->mirror, 0, MIRROR_X, 0, 0, "Enable X-axis mirrored editing");
+ uiDefButS(block, ROW, B_DIFF, "Y", 1175, 0, 50, 19, &G.scene->toolsettings->mirror, 0, MIRROR_Y, 0, 0, "Enable Y-axis mirrored editing");
+ uiDefButS(block, ROW, B_DIFF, "Z", 1225, 0, 50, 19, &G.scene->toolsettings->mirror, 0, MIRROR_Z, 0, 0, "Enable Z-axis mirrored editing");
uiBlockEndAlign(block);
}
Index: source/blender/src/transform_conversions.c
===================================================================
--- source/blender/src/transform_conversions.c (revision 10991)
+++ source/blender/src/transform_conversions.c (working copy)
@@ -1637,7 +1637,7 @@
float mtx[3][3], smtx[3][3];
int count=0, countsel=0;
int propmode = t->flag & T_PROP_EDIT;
- int mirror= (G.scene->toolsettings->editbutflag & B_MESH_X_MIRROR);
+ int mirror = G.scene->toolsettings->mirror, negmirror= 0;
// transform now requires awareness for select mode, so we tag the f1 flags in verts
if(G.scene->selectmode & SCE_SELECT_VERTEX) {
@@ -1706,16 +1706,14 @@
}
/* find out which half we do */
- if(mirror) {
- 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)
- mirror = -1;
- break;
- }
+ for (eve=em->verts.first; eve; eve=eve->next) {
+ if(eve->h==0 && eve->f1 && eve->co[mirror]!=0.0f) {
+ if(eve->co[mirror]<0.0f)
+ negmirror= 1;
+ break;
}
}
-
+
for (eve=em->verts.first; eve; eve=eve->next) {
if(eve->h==0) {
if(propmode || eve->f1) {
@@ -1752,9 +1750,11 @@
}
/* Mirror? */
- if( (mirror>0 && tob->iloc[0]>0.0f) || (mirror<0 && tob->iloc[0]<0.0f)) {
- EditVert *vmir= editmesh_get_x_mirror_vert(G.obedit, tob->iloc); /* initializes octree on first call */
- if(vmir!=eve) tob->tdmir= vmir;
+ if(mirror >= 0) {
+ if((!negmirror && tob->iloc[mirror]>0.0f) || (negmirror && tob->iloc[mirror]<0.0f)) {
+ EditVert *vmir= editmesh_get_mirror_vert(G.obedit, tob->iloc, mirror); /* initializes octree on first call */
+ if(vmir!=eve) tob->tdmir= vmir;
+ }
}
tob++;
}
Index: source/blender/src/meshtools.c
===================================================================
--- source/blender/src/meshtools.c (revision 10991)
+++ source/blender/src/meshtools.c (working copy)
@@ -805,15 +805,23 @@
return mesh_octree_table(ob, vec, 'u');
}
-EditVert *editmesh_get_x_mirror_vert(Object *ob, float *co)
+void setmirroredcoords(float *vec, float *co, int mirror)
{
+ int i;
+
+ for(i=0; i<3; i++) {
+ if(i==mirror) vec[i]= -co[i];
+ else vec[i]= co[i];
+ }
+}
+
+EditVert *editmesh_get_mirror_vert(Object *ob, float *co, int mirror)
+{
float vec[3];
long poinval;
-
- vec[0]= -co[0];
- vec[1]= co[1];
- vec[2]= co[2];
-
+
+ setmirroredcoords(vec, co, mirror);
+
poinval= mesh_octree_table(ob, vec, 'u');
if(poinval != -1)
return (EditVert *)(poinval);
Index: source/blender/src/transform_generics.c
===================================================================
--- source/blender/src/transform_generics.c (revision 10991)
+++ source/blender/src/transform_generics.c (working copy)
@@ -187,7 +187,7 @@
}
/* assumes G.obedit set to mesh object */
-static void editmesh_apply_to_mirror(TransInfo *t)
+static void editmesh_apply_to_mirror(TransInfo *t, int mirror)
{
TransData *td = t->data;
EditVert *eve;
@@ -200,12 +200,8 @@
break;
eve= td->tdmir;
- if(eve) {
- eve->co[0]= -td->loc[0];
- eve->co[1]= td->loc[1];
- eve->co[2]= td->loc[2];
- }
- }
+ if(eve) setmirroredcoords(eve->co, td->loc, mirror);
+ }
}
/* called for updating while transform acts, once per redraw */
@@ -224,8 +220,8 @@
if(t->state != TRANS_CANCEL)
clipMirrorModifier(t, G.obedit);
- if(G.scene->toolsettings->editbutflag & B_MESH_X_MIRROR)
- editmesh_apply_to_mirror(t);
+ if(G.scene->toolsettings->editbutflag & B_MESH_MIRROR)
+ editmesh_apply_to_mirror(t, G.scene->toolsettings->mirror);
DAG_object_flush_update(G.scene, G.obedit, OB_RECALC_DATA); /* sets recalc flags */
Index: source/blender/src/editmesh_mods.c
===================================================================
--- source/blender/src/editmesh_mods.c (revision 10991)
+++ source/blender/src/editmesh_mods.c (working copy)
@@ -116,10 +116,11 @@
if(G.scene->selectmode & SCE_SELECT_VERTEX) {
EditMesh *em = G.editMesh;
EditVert *eve, *v1;
+ int mirror = G.scene->toolsettings->mirror;
for(eve= em->verts.first; eve; eve= eve->next) {
if(eve->f & SELECT) {
- v1= editmesh_get_x_mirror_vert(G.obedit, eve->co);
+ v1= editmesh_get_mirror_vert(G.obedit, eve->co, mirror);
if(v1) {
eve->f &= ~SELECT;
v1->f |= SELECT;

File Metadata

Mime Type
text/x-diff
Storage Engine
local-disk
Storage Format
Raw Data
Storage Handle
35/24/54211310d50b2b8037fbc5a77dff

Event Timeline