store snapping in the scene, (theeth's suggestion)

This commit is contained in:
2007-09-25 04:11:57 +00:00
parent 2c0db4d707
commit 4ad6ac1cad
6 changed files with 34 additions and 39 deletions

View File

@@ -438,8 +438,8 @@ typedef struct Scene {
ListBase markers; ListBase markers;
short jumpframe; short jumpframe, pad1;
short pad1, pad2, pad3; short snap_flag, snap_target;
/* none of the dependancy graph vars is mean to be saved */ /* none of the dependancy graph vars is mean to be saved */
struct DagForest *theDag; struct DagForest *theDag;
@@ -568,8 +568,12 @@ typedef struct Scene {
/* base->flag is in DNA_object_types.h */ /* base->flag is in DNA_object_types.h */
/* sce->flag */ /* scene->snap_flag */
#define SCE_ADDSCENAME 1 #define SCE_SNAP 1
/* scene->snap_target */
#define SCE_SNAP_TARGET_CLOSEST 0
#define SCE_SNAP_TARGET_CENTER 1
#define SCE_SNAP_TARGET_MEDIAN 2
/* sce->selectmode */ /* sce->selectmode */
#define SCE_SELECT_VERTEX 1 #define SCE_SELECT_VERTEX 1

View File

@@ -137,7 +137,7 @@ typedef struct View3D {
short gridsubdiv; /* Number of subdivisions in the grid between each highlighted grid line */ short gridsubdiv; /* Number of subdivisions in the grid between each highlighted grid line */
short snap_target; short pad3;
short pad2; short pad2;
@@ -168,15 +168,9 @@ typedef struct View3D {
/* View3d->flag2 (short) */ /* View3d->flag2 (short) */
#define V3D_OPP_DIRECTION_NAME 1 #define V3D_OPP_DIRECTION_NAME 1
#define V3D_FLYMODE 2 #define V3D_FLYMODE 2
#define V3D_TRANSFORM_SNAP 4 #define V3D_DEPRECATED 4 /* V3D_TRANSFORM_SNAP, moved to a scene setting */
#define V3D_SOLID_TEX 8 #define V3D_SOLID_TEX 8
/* View3d->snap_target */
#define V3D_SNAP_TARGET_CLOSEST 0
#define V3D_SNAP_TARGET_CENTER 1
#define V3D_SNAP_TARGET_MEDIAN 2
/* View3D->around */ /* View3D->around */
#define V3D_CENTER 0 #define V3D_CENTER 0
#define V3D_CENTROID 3 #define V3D_CENTROID 3

View File

@@ -1017,7 +1017,7 @@ static int draw_tface_mapped__set_draw(void *userData, int index)
static int draw_em_tf_mapped__set_draw(void *userData, int index) static int draw_em_tf_mapped__set_draw(void *userData, int index)
{ {
EditMesh *em = userData; EditMesh *em = userData;
EditFace *efa = EM_get_face_for_index(index), *efa_act = userData; EditFace *efa = EM_get_face_for_index(index);
MTFace *tface; MTFace *tface;
MCol *mcol; MCol *mcol;
int matnr; int matnr;

View File

@@ -1743,19 +1743,19 @@ static void do_view3d_transformmenu(void *arg, int event)
Transform(); Transform();
break; break;
case 15: case 15:
G.vd->flag2 &= ~V3D_TRANSFORM_SNAP; G.scene->snap_flag &= ~SCE_SNAP;
break; break;
case 16: case 16:
G.vd->flag2 |= V3D_TRANSFORM_SNAP; G.scene->snap_flag |= SCE_SNAP;
break; break;
case 17: case 17:
G.vd->snap_target = V3D_SNAP_TARGET_CLOSEST; G.scene->snap_target = SCE_SNAP_TARGET_CLOSEST;
break; break;
case 18: case 18:
G.vd->snap_target = V3D_SNAP_TARGET_CENTER; G.scene->snap_target = SCE_SNAP_TARGET_CENTER;
break; break;
case 19: case 19:
G.vd->snap_target = V3D_SNAP_TARGET_MEDIAN; G.scene->snap_target = SCE_SNAP_TARGET_MEDIAN;
break; break;
} }
allqueue(REDRAWVIEW3D, 0); allqueue(REDRAWVIEW3D, 0);
@@ -1812,7 +1812,7 @@ static uiBlock *view3d_transformmenu(void *arg_unused)
{ {
uiDefBut(block, SEPR, 0, "", 0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, ""); uiDefBut(block, SEPR, 0, "", 0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, "");
if (G.vd->flag2 & V3D_TRANSFORM_SNAP) if (G.scene->snap_flag & SCE_SNAP)
{ {
uiDefIconTextBut(block, BUTM, 1, ICON_CHECKBOX_DEHLT, "Grid", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 15, ""); uiDefIconTextBut(block, BUTM, 1, ICON_CHECKBOX_DEHLT, "Grid", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 15, "");
uiDefIconTextBut(block, BUTM, 1, ICON_CHECKBOX_HLT, "Snap", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 16, ""); uiDefIconTextBut(block, BUTM, 1, ICON_CHECKBOX_HLT, "Snap", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 16, "");
@@ -1825,19 +1825,19 @@ static uiBlock *view3d_transformmenu(void *arg_unused)
uiDefBut(block, SEPR, 0, "", 0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, ""); uiDefBut(block, SEPR, 0, "", 0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, "");
switch(G.vd->snap_target) switch(G.scene->snap_target)
{ {
case V3D_SNAP_TARGET_CLOSEST: case SCE_SNAP_TARGET_CLOSEST:
uiDefIconTextBut(block, BUTM, 1, ICON_CHECKBOX_HLT, "Snap Closest", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 17, ""); uiDefIconTextBut(block, BUTM, 1, ICON_CHECKBOX_HLT, "Snap Closest", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 17, "");
uiDefIconTextBut(block, BUTM, 1, ICON_CHECKBOX_DEHLT, "Snap Center", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 18, ""); uiDefIconTextBut(block, BUTM, 1, ICON_CHECKBOX_DEHLT, "Snap Center", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 18, "");
uiDefIconTextBut(block, BUTM, 1, ICON_CHECKBOX_DEHLT, "Snap Median", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 19, ""); uiDefIconTextBut(block, BUTM, 1, ICON_CHECKBOX_DEHLT, "Snap Median", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 19, "");
break; break;
case V3D_SNAP_TARGET_CENTER: case SCE_SNAP_TARGET_CENTER:
uiDefIconTextBut(block, BUTM, 1, ICON_CHECKBOX_DEHLT, "Snap Closest", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 17, ""); uiDefIconTextBut(block, BUTM, 1, ICON_CHECKBOX_DEHLT, "Snap Closest", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 17, "");
uiDefIconTextBut(block, BUTM, 1, ICON_CHECKBOX_HLT, "Snap Center", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 18, ""); uiDefIconTextBut(block, BUTM, 1, ICON_CHECKBOX_HLT, "Snap Center", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 18, "");
uiDefIconTextBut(block, BUTM, 1, ICON_CHECKBOX_DEHLT, "Snap Median", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 19, ""); uiDefIconTextBut(block, BUTM, 1, ICON_CHECKBOX_DEHLT, "Snap Median", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 19, "");
break; break;
case V3D_SNAP_TARGET_MEDIAN: case SCE_SNAP_TARGET_MEDIAN:
uiDefIconTextBut(block, BUTM, 1, ICON_CHECKBOX_DEHLT, "Snap Closest", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 17, ""); uiDefIconTextBut(block, BUTM, 1, ICON_CHECKBOX_DEHLT, "Snap Closest", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 17, "");
uiDefIconTextBut(block, BUTM, 1, ICON_CHECKBOX_DEHLT, "Snap Center", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 18, ""); uiDefIconTextBut(block, BUTM, 1, ICON_CHECKBOX_DEHLT, "Snap Center", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 18, "");
uiDefIconTextBut(block, BUTM, 1, ICON_CHECKBOX_HLT, "Snap Median", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 19, ""); uiDefIconTextBut(block, BUTM, 1, ICON_CHECKBOX_HLT, "Snap Median", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 19, "");
@@ -5106,18 +5106,15 @@ void view3d_buttons(void)
if(G.obedit && (G.obedit->type == OB_MESH)) { // Only Mesh for now if(G.obedit && (G.obedit->type == OB_MESH)) { // Only Mesh for now
uiBlockBeginAlign(block); uiBlockBeginAlign(block);
if (G.vd->flag2 & V3D_TRANSFORM_SNAP) if (G.scene->snap_flag & SCE_SNAP) {
{ uiDefIconButBitS(block, TOG, SCE_SNAP, B_REDR, ICON_SNAP_GEO,xco,0,XIC,YIC, &G.scene->snap_flag, 0, 0, 0, 0, "Use Snap or Grid (Shift Tab)");
uiDefIconButBitS(block, TOG, V3D_TRANSFORM_SNAP, B_REDR, ICON_SNAP_GEO,xco,0,XIC,YIC, &G.vd->flag2, 0, 0, 0, 0, "Use Snap or Grid (Shift Tab)");
xco+= XIC; xco+= XIC;
uiDefButS(block, MENU, B_NOP, "Mode%t|Closest%x0|Center%x1|Median%x2",xco,0,70,YIC, &G.vd->snap_target, 0, 0, 0, 0, "Snap Target Mode"); uiDefButS(block, MENU, B_NOP, "Mode%t|Closest%x0|Center%x1|Median%x2",xco,0,70,YIC, &G.scene->snap_target, 0, 0, 0, 0, "Snap Target Mode");
xco+= 70; xco+= 70;
} } else {
else uiDefIconButBitS(block, TOG, SCE_SNAP, B_REDR, ICON_SNAP_GEAR,xco,0,XIC,YIC, &G.scene->snap_flag, 0, 0, 0, 0, "Snap while Ctrl is held during transform (Shift Tab)");
{
uiDefIconButBitS(block, TOG, V3D_TRANSFORM_SNAP, B_REDR, ICON_SNAP_GEAR,xco,0,XIC,YIC, &G.vd->flag2, 0, 0, 0, 0, "Snap while Ctrl is held during transform (Shift Tab)");
xco+= XIC; xco+= XIC;
} }
uiBlockEndAlign(block); uiBlockEndAlign(block);
xco+= 10; xco+= 10;

View File

@@ -1524,7 +1524,7 @@ static void winqreadview3dspace(ScrArea *sa, void *spacedata, BWinEvent *evt)
/* Snap toggle (only edit mesh right now) */ /* Snap toggle (only edit mesh right now) */
if (G.obedit && G.obedit->type==OB_MESH) if (G.obedit && G.obedit->type==OB_MESH)
{ {
G.vd->flag2 ^= V3D_TRANSFORM_SNAP; G.scene->snap_flag ^= SCE_SNAP;
allqueue(REDRAWHEADERS, 0); allqueue(REDRAWHEADERS, 0);
} }
} }

View File

@@ -174,7 +174,7 @@ void initSnapping(TransInfo *t)
if (t->tsnap.applySnap != NULL && // A snapping function actually exist if (t->tsnap.applySnap != NULL && // A snapping function actually exist
(G.obedit != NULL && G.obedit->type==OB_MESH) && // Temporary limited to edit mode meshes (G.obedit != NULL && G.obedit->type==OB_MESH) && // Temporary limited to edit mode meshes
(G.vd->flag2 & V3D_TRANSFORM_SNAP) && // Only if the snap flag is on (G.scene->snap_flag & SCE_SNAP) && // Only if the snap flag is on
(t->flag & T_PROP_EDIT) == 0) // No PET, obviously (t->flag & T_PROP_EDIT) == 0) // No PET, obviously
{ {
t->tsnap.status |= SNAP_ON; t->tsnap.status |= SNAP_ON;
@@ -197,17 +197,17 @@ void setSnappingCallback(TransInfo *t)
{ {
t->tsnap.calcSnap = CalcSnapGeometry; t->tsnap.calcSnap = CalcSnapGeometry;
switch(G.vd->snap_target) switch(G.scene->snap_target)
{ {
case V3D_SNAP_TARGET_CLOSEST: case SCE_SNAP_TARGET_CLOSEST:
t->tsnap.modeTarget = SNAP_CLOSEST; t->tsnap.modeTarget = SNAP_CLOSEST;
t->tsnap.targetSnap = TargetSnapClosest; t->tsnap.targetSnap = TargetSnapClosest;
break; break;
case V3D_SNAP_TARGET_CENTER: case SCE_SNAP_TARGET_CENTER:
t->tsnap.modeTarget = SNAP_CENTER; t->tsnap.modeTarget = SNAP_CENTER;
t->tsnap.targetSnap = TargetSnapCenter; t->tsnap.targetSnap = TargetSnapCenter;
break; break;
case V3D_SNAP_TARGET_MEDIAN: case SCE_SNAP_TARGET_MEDIAN:
t->tsnap.modeTarget = SNAP_MEDIAN; t->tsnap.modeTarget = SNAP_MEDIAN;
t->tsnap.targetSnap = TargetSnapMedian; t->tsnap.targetSnap = TargetSnapMedian;
break; break;
@@ -224,7 +224,7 @@ void setSnappingCallback(TransInfo *t)
t->tsnap.distance = RotationBetween; t->tsnap.distance = RotationBetween;
// Can't do TARGET_CENTER with rotation, use TARGET_MEDIAN instead // Can't do TARGET_CENTER with rotation, use TARGET_MEDIAN instead
if (G.vd->snap_target == V3D_SNAP_TARGET_CENTER) { if (G.scene->snap_target == SCE_SNAP_TARGET_CENTER) {
t->tsnap.modeTarget = SNAP_MEDIAN; t->tsnap.modeTarget = SNAP_MEDIAN;
t->tsnap.targetSnap = TargetSnapMedian; t->tsnap.targetSnap = TargetSnapMedian;
} }