Page Menu
Home
Search
Configure Global Search
Log In
Files
F5770
axisgen05.txt
Public
Actions
View File
Edit File
Delete File
View Transforms
Subscribe
Mute Notifications
Award Token
Authored By
Juho Vepsalainen (bebraw)
Nov 13 2013, 1:24 PM
Size
7 KB
Subscribers
None
axisgen05.txt
View Options
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
Details
Mime Type
text/x-diff
Storage Engine
local-disk
Storage Format
Raw Data
Storage Handle
35/24/54211310d50b2b8037fbc5a77dff
Event Timeline
Log In to Comment