Skip to content

Commit 6c5185b

Browse files
committed
Separate forced and setting deduced edit mode tests
Forcing f_knob into edit mode basically means ignoring the settings and ALWAYS taking the edit path, even if the option specifies an operation other than the one the MGED settings indicate. The other checks, however, care WHICH edit mode we're in. Use and pass two variables to make that clearer.
1 parent 1d62827 commit 6c5185b

File tree

1 file changed

+49
-41
lines changed

1 file changed

+49
-41
lines changed

src/mged/chgview.c

+49-41
Original file line numberDiff line numberDiff line change
@@ -56,6 +56,10 @@ int mged_otran(struct mged_state *s, const vect_t tvec);
5656
int mged_vtran(struct mged_state *s, const vect_t tvec);
5757
int mged_vrot_xyz(struct mged_state *s, char origin, char coords, vect_t rvec);
5858

59+
#define EDIT_FLAG_ROT 2
60+
#define EDIT_FLAG_SCA 3
61+
#define EDIT_FLAG_TRA 4
62+
5963
/* DEBUG -- force view center */
6064
/* Format: C x y z */
6165
int
@@ -1260,9 +1264,10 @@ knob_tran(struct mged_state *s,
12601264
vect_t tvec,
12611265
int model_flag,
12621266
int view_flag,
1263-
int edit_flag_tra)
1267+
int edit_flag,
1268+
int edit_flag_force)
12641269
{
1265-
if (edit_flag_tra) {
1270+
if (edit_flag == EDIT_FLAG_TRA || edit_flag_force) {
12661271
mged_etran(s, view_state->vs_gvp->gv_coord, tvec);
12671272
} else if (model_flag || (view_state->vs_gvp->gv_coord == 'm' && !view_flag)) {
12681273
mged_mtran(s, tvec);
@@ -1282,9 +1287,10 @@ knob_rot(struct mged_state *s,
12821287
char origin,
12831288
int model_flag,
12841289
int view_flag,
1285-
int edit_flag_rot)
1290+
int edit_flag,
1291+
int edit_flag_force)
12861292
{
1287-
if (edit_flag_rot) {
1293+
if (edit_flag == EDIT_FLAG_ROT || edit_flag_force) {
12881294
mged_erot_xyz(s, origin, rvec);
12891295
} else if (model_flag || (view_state->vs_gvp->gv_coord == 'm' && !view_flag)) {
12901296
mged_vrot_xyz(s, origin, 'm', rvec);
@@ -1363,10 +1369,12 @@ f_knob(ClientData clientData, Tcl_Interp *interp, int argc, const char *argv[])
13631369
argc -= bu_optind - 1;
13641370
}
13651371

1366-
int edit_flag_rot = (EDIT_ROTATE && ((mged_variables->mv_transform == 'e' && !view_flag && !model_flag) || edit_flag_force)) ? 1 : 0;
1367-
int edit_flag_tra = (EDIT_TRAN && ((mged_variables->mv_transform == 'e' && !view_flag && !model_flag) || edit_flag_force)) ? 1 : 0;
1368-
// NOTE - edit_flag_sca doesn't care about model_flag...
1369-
int edit_flag_sca = (EDIT_SCALE && ((mged_variables->mv_transform == 'e' && !view_flag) || edit_flag_force)) ? 1 : 0;
1372+
// Pack more info into edit_flag
1373+
int edit_flag = 0;
1374+
edit_flag = (EDIT_ROTATE && ((mged_variables->mv_transform == 'e' && !view_flag && !model_flag))) ? EDIT_FLAG_ROT : edit_flag;
1375+
edit_flag = (EDIT_TRAN && ((mged_variables->mv_transform == 'e' && !view_flag && !model_flag))) ? EDIT_FLAG_TRA : edit_flag;
1376+
// NOTE - SCALE doesn't care about model_flag...
1377+
edit_flag = (EDIT_SCALE && ((mged_variables->mv_transform == 'e' && !view_flag))) ? EDIT_FLAG_SCA : edit_flag;
13701378

13711379
if (origin != 'v' && origin != 'm' && origin != 'e' && origin != 'k') {
13721380
origin = view_state->vs_gvp->gv_rotate_about;
@@ -1418,7 +1426,7 @@ f_knob(ClientData clientData, Tcl_Interp *interp, int argc, const char *argv[])
14181426
switch (cmd[0]) {
14191427
case 'x':
14201428
if (incr_flag) {
1421-
if (edit_flag_rot) {
1429+
if (edit_flag == EDIT_FLAG_ROT || edit_flag_force) {
14221430
switch (view_state->vs_gvp->gv_coord) {
14231431
case 'm':
14241432
s->edit_state.edit_rate_model_rotate[X] += f;
@@ -1451,7 +1459,7 @@ f_knob(ClientData clientData, Tcl_Interp *interp, int argc, const char *argv[])
14511459

14521460
}
14531461
} else {
1454-
if (edit_flag_rot) {
1462+
if (edit_flag == EDIT_FLAG_ROT || edit_flag_force) {
14551463
switch (view_state->vs_gvp->gv_coord) {
14561464
case 'm':
14571465
s->edit_state.edit_rate_model_rotate[X] = f;
@@ -1488,7 +1496,7 @@ f_knob(ClientData clientData, Tcl_Interp *interp, int argc, const char *argv[])
14881496
break;
14891497
case 'y':
14901498
if (incr_flag) {
1491-
if (edit_flag_rot) {
1499+
if (edit_flag == EDIT_FLAG_ROT || edit_flag_force) {
14921500
switch (view_state->vs_gvp->gv_coord) {
14931501
case 'm':
14941502
s->edit_state.edit_rate_model_rotate[Y] += f;
@@ -1520,7 +1528,7 @@ f_knob(ClientData clientData, Tcl_Interp *interp, int argc, const char *argv[])
15201528
}
15211529
}
15221530
} else {
1523-
if (edit_flag_rot) {
1531+
if (edit_flag == EDIT_FLAG_ROT || edit_flag_force) {
15241532
switch (view_state->vs_gvp->gv_coord) {
15251533
case 'm':
15261534
s->edit_state.edit_rate_model_rotate[Y] = f;
@@ -1556,7 +1564,7 @@ f_knob(ClientData clientData, Tcl_Interp *interp, int argc, const char *argv[])
15561564
break;
15571565
case 'z':
15581566
if (incr_flag) {
1559-
if (edit_flag_rot) {
1567+
if (edit_flag == EDIT_FLAG_ROT || edit_flag_force) {
15601568
switch (view_state->vs_gvp->gv_coord) {
15611569
case 'm':
15621570
s->edit_state.edit_rate_model_rotate[Z] += f;
@@ -1588,7 +1596,7 @@ f_knob(ClientData clientData, Tcl_Interp *interp, int argc, const char *argv[])
15881596
}
15891597
}
15901598
} else {
1591-
if (edit_flag_rot) {
1599+
if (edit_flag == EDIT_FLAG_ROT || edit_flag_force) {
15921600
switch (view_state->vs_gvp->gv_coord) {
15931601
case 'm':
15941602
s->edit_state.edit_rate_model_rotate[Z] = f;
@@ -1624,7 +1632,7 @@ f_knob(ClientData clientData, Tcl_Interp *interp, int argc, const char *argv[])
16241632
break;
16251633
case 'X':
16261634
if (incr_flag) {
1627-
if (edit_flag_tra) {
1635+
if (edit_flag == EDIT_FLAG_TRA || edit_flag_force) {
16281636
switch (view_state->vs_gvp->gv_coord) {
16291637
case 'm':
16301638
case 'o':
@@ -1647,7 +1655,7 @@ f_knob(ClientData clientData, Tcl_Interp *interp, int argc, const char *argv[])
16471655
}
16481656
}
16491657
} else {
1650-
if (edit_flag_tra) {
1658+
if (edit_flag == EDIT_FLAG_TRA || edit_flag_force) {
16511659
switch (view_state->vs_gvp->gv_coord) {
16521660
case 'm':
16531661
case 'o':
@@ -1674,7 +1682,7 @@ f_knob(ClientData clientData, Tcl_Interp *interp, int argc, const char *argv[])
16741682
break;
16751683
case 'Y':
16761684
if (incr_flag) {
1677-
if (edit_flag_tra) {
1685+
if (edit_flag == EDIT_FLAG_TRA || edit_flag_force) {
16781686
switch (view_state->vs_gvp->gv_coord) {
16791687
case 'm':
16801688
case 'o':
@@ -1697,7 +1705,7 @@ f_knob(ClientData clientData, Tcl_Interp *interp, int argc, const char *argv[])
16971705
}
16981706
}
16991707
} else {
1700-
if (edit_flag_tra) {
1708+
if (edit_flag == EDIT_FLAG_TRA || edit_flag_force) {
17011709
switch (view_state->vs_gvp->gv_coord) {
17021710
case 'm':
17031711
case 'o':
@@ -1724,7 +1732,7 @@ f_knob(ClientData clientData, Tcl_Interp *interp, int argc, const char *argv[])
17241732
break;
17251733
case 'Z':
17261734
if (incr_flag) {
1727-
if (edit_flag_tra) {
1735+
if (edit_flag == EDIT_FLAG_TRA || edit_flag_force) {
17281736
switch (view_state->vs_gvp->gv_coord) {
17291737
case 'm':
17301738
case 'o':
@@ -1747,7 +1755,7 @@ f_knob(ClientData clientData, Tcl_Interp *interp, int argc, const char *argv[])
17471755
}
17481756
}
17491757
} else {
1750-
if (edit_flag_tra) {
1758+
if (edit_flag == EDIT_FLAG_TRA || edit_flag_force) {
17511759
switch (view_state->vs_gvp->gv_coord) {
17521760
case 'm':
17531761
case 'o':
@@ -1774,13 +1782,13 @@ f_knob(ClientData clientData, Tcl_Interp *interp, int argc, const char *argv[])
17741782
break;
17751783
case 'S':
17761784
if (incr_flag) {
1777-
if (edit_flag_sca) {
1785+
if (edit_flag == EDIT_FLAG_SCA || edit_flag_force) {
17781786
s->edit_state.edit_rate_scale += f;
17791787
} else {
17801788
view_state->vs_rate_scale += f;
17811789
}
17821790
} else {
1783-
if (edit_flag_sca) {
1791+
if (edit_flag == EDIT_FLAG_SCA || edit_flag_force) {
17841792
s->edit_state.edit_rate_scale = f;
17851793
} else {
17861794
view_state->vs_rate_scale = f;
@@ -1795,7 +1803,7 @@ f_knob(ClientData clientData, Tcl_Interp *interp, int argc, const char *argv[])
17951803
switch (cmd[1]) {
17961804
case 'x':
17971805
if (incr_flag) {
1798-
if (edit_flag_rot) {
1806+
if (edit_flag == EDIT_FLAG_ROT || edit_flag_force) {
17991807
switch (view_state->vs_gvp->gv_coord) {
18001808
case 'm':
18011809
s->edit_state.edit_absolute_model_rotate[X] += f;
@@ -1817,7 +1825,7 @@ f_knob(ClientData clientData, Tcl_Interp *interp, int argc, const char *argv[])
18171825

18181826
rvec[X] = f;
18191827
} else {
1820-
if (edit_flag_rot) {
1828+
if (edit_flag == EDIT_FLAG_ROT || edit_flag_force) {
18211829
switch (view_state->vs_gvp->gv_coord) {
18221830
case 'm':
18231831
rvec[X] = f - s->edit_state.last_edit_absolute_model_rotate[X];
@@ -1844,7 +1852,7 @@ f_knob(ClientData clientData, Tcl_Interp *interp, int argc, const char *argv[])
18441852
}
18451853

18461854
/* wrap around */
1847-
if (edit_flag_rot) {
1855+
if (edit_flag == EDIT_FLAG_ROT || edit_flag_force) {
18481856
fastf_t *arp;
18491857
fastf_t *larp;
18501858

@@ -1899,7 +1907,7 @@ f_knob(ClientData clientData, Tcl_Interp *interp, int argc, const char *argv[])
18991907
break;
19001908
case 'y':
19011909
if (incr_flag) {
1902-
if (edit_flag_rot) {
1910+
if (edit_flag == EDIT_FLAG_ROT || edit_flag_force) {
19031911
switch (view_state->vs_gvp->gv_coord) {
19041912
case 'm':
19051913
s->edit_state.edit_absolute_model_rotate[Y] += f;
@@ -1921,7 +1929,7 @@ f_knob(ClientData clientData, Tcl_Interp *interp, int argc, const char *argv[])
19211929

19221930
rvec[Y] = f;
19231931
} else {
1924-
if (edit_flag_rot) {
1932+
if (edit_flag == EDIT_FLAG_ROT || edit_flag_force) {
19251933
switch (view_state->vs_gvp->gv_coord) {
19261934
case 'm':
19271935
rvec[Y] = f - s->edit_state.last_edit_absolute_model_rotate[Y];
@@ -1948,7 +1956,7 @@ f_knob(ClientData clientData, Tcl_Interp *interp, int argc, const char *argv[])
19481956
}
19491957

19501958
/* wrap around */
1951-
if (edit_flag_rot) {
1959+
if (edit_flag == EDIT_FLAG_ROT || edit_flag_force) {
19521960
fastf_t *arp;
19531961
fastf_t *larp;
19541962

@@ -2003,7 +2011,7 @@ f_knob(ClientData clientData, Tcl_Interp *interp, int argc, const char *argv[])
20032011
break;
20042012
case 'z':
20052013
if (incr_flag) {
2006-
if (edit_flag_rot) {
2014+
if (edit_flag == EDIT_FLAG_ROT || edit_flag_force) {
20072015
switch (view_state->vs_gvp->gv_coord) {
20082016
case 'm':
20092017
s->edit_state.edit_absolute_model_rotate[Z] += f;
@@ -2025,7 +2033,7 @@ f_knob(ClientData clientData, Tcl_Interp *interp, int argc, const char *argv[])
20252033

20262034
rvec[Z] = f;
20272035
} else {
2028-
if (edit_flag_rot) {
2036+
if (edit_flag == EDIT_FLAG_ROT || edit_flag_force) {
20292037
switch (view_state->vs_gvp->gv_coord) {
20302038
case 'm':
20312039
rvec[Z] = f - s->edit_state.last_edit_absolute_model_rotate[Z];
@@ -2052,7 +2060,7 @@ f_knob(ClientData clientData, Tcl_Interp *interp, int argc, const char *argv[])
20522060
}
20532061

20542062
/* wrap around */
2055-
if (edit_flag_rot) {
2063+
if (edit_flag == EDIT_FLAG_ROT || edit_flag_force) {
20562064
fastf_t *arp;
20572065
fastf_t *larp;
20582066

@@ -2109,7 +2117,7 @@ f_knob(ClientData clientData, Tcl_Interp *interp, int argc, const char *argv[])
21092117
sf = f * s->dbip->dbi_local2base / view_state->vs_gvp->gv_scale;
21102118

21112119
if (incr_flag) {
2112-
if (edit_flag_tra) {
2120+
if (edit_flag == EDIT_FLAG_TRA || edit_flag_force) {
21132121
switch (view_state->vs_gvp->gv_coord) {
21142122
case 'm':
21152123
case 'o':
@@ -2131,7 +2139,7 @@ f_knob(ClientData clientData, Tcl_Interp *interp, int argc, const char *argv[])
21312139

21322140
tvec[X] = f;
21332141
} else {
2134-
if (edit_flag_tra) {
2142+
if (edit_flag == EDIT_FLAG_TRA || edit_flag_force) {
21352143
switch (view_state->vs_gvp->gv_coord) {
21362144
case 'm':
21372145
case 'o':
@@ -2163,7 +2171,7 @@ f_knob(ClientData clientData, Tcl_Interp *interp, int argc, const char *argv[])
21632171
sf = f * s->dbip->dbi_local2base / view_state->vs_gvp->gv_scale;
21642172

21652173
if (incr_flag) {
2166-
if (edit_flag_tra) {
2174+
if (edit_flag == EDIT_FLAG_TRA || edit_flag_force) {
21672175
switch (view_state->vs_gvp->gv_coord) {
21682176
case 'm':
21692177
case 'o':
@@ -2185,7 +2193,7 @@ f_knob(ClientData clientData, Tcl_Interp *interp, int argc, const char *argv[])
21852193

21862194
tvec[Y] = f;
21872195
} else {
2188-
if (edit_flag_tra) {
2196+
if (edit_flag == EDIT_FLAG_TRA || edit_flag_force) {
21892197
switch (view_state->vs_gvp->gv_coord) {
21902198
case 'm':
21912199
case 'o':
@@ -2216,7 +2224,7 @@ f_knob(ClientData clientData, Tcl_Interp *interp, int argc, const char *argv[])
22162224
sf = f * s->dbip->dbi_local2base / view_state->vs_gvp->gv_scale;
22172225

22182226
if (incr_flag) {
2219-
if (edit_flag_tra) {
2227+
if (edit_flag == EDIT_FLAG_TRA || edit_flag_force) {
22202228
switch (view_state->vs_gvp->gv_coord) {
22212229
case 'm':
22222230
case 'o':
@@ -2238,7 +2246,7 @@ f_knob(ClientData clientData, Tcl_Interp *interp, int argc, const char *argv[])
22382246

22392247
tvec[Z] = f;
22402248
} else {
2241-
if (edit_flag_tra) {
2249+
if (edit_flag == EDIT_FLAG_TRA || edit_flag_force) {
22422250
switch (view_state->vs_gvp->gv_coord) {
22432251
case 'm':
22442252
case 'o':
@@ -2267,7 +2275,7 @@ f_knob(ClientData clientData, Tcl_Interp *interp, int argc, const char *argv[])
22672275
break;
22682276
case 'S':
22692277
if (incr_flag) {
2270-
if (edit_flag_sca) {
2278+
if (edit_flag == EDIT_FLAG_SCA || edit_flag_force) {
22712279
s->s_edit->edit_absolute_scale += f;
22722280

22732281
if (s->edit_state.global_editing_state == ST_S_EDIT) {
@@ -2280,7 +2288,7 @@ f_knob(ClientData clientData, Tcl_Interp *interp, int argc, const char *argv[])
22802288
abs_zoom(s);
22812289
}
22822290
} else {
2283-
if (edit_flag_sca) {
2291+
if (edit_flag == EDIT_FLAG_SCA || edit_flag_force) {
22842292
s->s_edit->edit_absolute_scale = f;
22852293

22862294
if (s->edit_state.global_editing_state == ST_S_EDIT) {
@@ -2370,11 +2378,11 @@ f_knob(ClientData clientData, Tcl_Interp *interp, int argc, const char *argv[])
23702378
}
23712379

23722380
if (do_tran) {
2373-
(void)knob_tran(s, tvec, model_flag, view_flag, edit_flag_tra);
2381+
(void)knob_tran(s, tvec, model_flag, view_flag, edit_flag, edit_flag_force);
23742382
}
23752383

23762384
if (do_rot) {
2377-
(void)knob_rot(s, rvec, origin, model_flag, view_flag, edit_flag_rot);
2385+
(void)knob_rot(s, rvec, origin, model_flag, view_flag, edit_flag, edit_flag_force);
23782386
}
23792387

23802388
check_nonzero_rates(s);

0 commit comments

Comments
 (0)