@@ -56,6 +56,10 @@ int mged_otran(struct mged_state *s, const vect_t tvec);
56
56
int mged_vtran (struct mged_state * s , const vect_t tvec );
57
57
int mged_vrot_xyz (struct mged_state * s , char origin , char coords , vect_t rvec );
58
58
59
+ #define EDIT_FLAG_ROT 2
60
+ #define EDIT_FLAG_SCA 3
61
+ #define EDIT_FLAG_TRA 4
62
+
59
63
/* DEBUG -- force view center */
60
64
/* Format: C x y z */
61
65
int
@@ -1260,9 +1264,10 @@ knob_tran(struct mged_state *s,
1260
1264
vect_t tvec ,
1261
1265
int model_flag ,
1262
1266
int view_flag ,
1263
- int edit_flag_tra )
1267
+ int edit_flag ,
1268
+ int edit_flag_force )
1264
1269
{
1265
- if (edit_flag_tra ) {
1270
+ if (edit_flag == EDIT_FLAG_TRA || edit_flag_force ) {
1266
1271
mged_etran (s , view_state -> vs_gvp -> gv_coord , tvec );
1267
1272
} else if (model_flag || (view_state -> vs_gvp -> gv_coord == 'm' && !view_flag )) {
1268
1273
mged_mtran (s , tvec );
@@ -1282,9 +1287,10 @@ knob_rot(struct mged_state *s,
1282
1287
char origin ,
1283
1288
int model_flag ,
1284
1289
int view_flag ,
1285
- int edit_flag_rot )
1290
+ int edit_flag ,
1291
+ int edit_flag_force )
1286
1292
{
1287
- if (edit_flag_rot ) {
1293
+ if (edit_flag == EDIT_FLAG_ROT || edit_flag_force ) {
1288
1294
mged_erot_xyz (s , origin , rvec );
1289
1295
} else if (model_flag || (view_state -> vs_gvp -> gv_coord == 'm' && !view_flag )) {
1290
1296
mged_vrot_xyz (s , origin , 'm' , rvec );
@@ -1363,10 +1369,12 @@ f_knob(ClientData clientData, Tcl_Interp *interp, int argc, const char *argv[])
1363
1369
argc -= bu_optind - 1 ;
1364
1370
}
1365
1371
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 ;
1370
1378
1371
1379
if (origin != 'v' && origin != 'm' && origin != 'e' && origin != 'k' ) {
1372
1380
origin = view_state -> vs_gvp -> gv_rotate_about ;
@@ -1418,7 +1426,7 @@ f_knob(ClientData clientData, Tcl_Interp *interp, int argc, const char *argv[])
1418
1426
switch (cmd [0 ]) {
1419
1427
case 'x' :
1420
1428
if (incr_flag ) {
1421
- if (edit_flag_rot ) {
1429
+ if (edit_flag == EDIT_FLAG_ROT || edit_flag_force ) {
1422
1430
switch (view_state -> vs_gvp -> gv_coord ) {
1423
1431
case 'm' :
1424
1432
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[])
1451
1459
1452
1460
}
1453
1461
} else {
1454
- if (edit_flag_rot ) {
1462
+ if (edit_flag == EDIT_FLAG_ROT || edit_flag_force ) {
1455
1463
switch (view_state -> vs_gvp -> gv_coord ) {
1456
1464
case 'm' :
1457
1465
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[])
1488
1496
break ;
1489
1497
case 'y' :
1490
1498
if (incr_flag ) {
1491
- if (edit_flag_rot ) {
1499
+ if (edit_flag == EDIT_FLAG_ROT || edit_flag_force ) {
1492
1500
switch (view_state -> vs_gvp -> gv_coord ) {
1493
1501
case 'm' :
1494
1502
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[])
1520
1528
}
1521
1529
}
1522
1530
} else {
1523
- if (edit_flag_rot ) {
1531
+ if (edit_flag == EDIT_FLAG_ROT || edit_flag_force ) {
1524
1532
switch (view_state -> vs_gvp -> gv_coord ) {
1525
1533
case 'm' :
1526
1534
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[])
1556
1564
break ;
1557
1565
case 'z' :
1558
1566
if (incr_flag ) {
1559
- if (edit_flag_rot ) {
1567
+ if (edit_flag == EDIT_FLAG_ROT || edit_flag_force ) {
1560
1568
switch (view_state -> vs_gvp -> gv_coord ) {
1561
1569
case 'm' :
1562
1570
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[])
1588
1596
}
1589
1597
}
1590
1598
} else {
1591
- if (edit_flag_rot ) {
1599
+ if (edit_flag == EDIT_FLAG_ROT || edit_flag_force ) {
1592
1600
switch (view_state -> vs_gvp -> gv_coord ) {
1593
1601
case 'm' :
1594
1602
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[])
1624
1632
break ;
1625
1633
case 'X' :
1626
1634
if (incr_flag ) {
1627
- if (edit_flag_tra ) {
1635
+ if (edit_flag == EDIT_FLAG_TRA || edit_flag_force ) {
1628
1636
switch (view_state -> vs_gvp -> gv_coord ) {
1629
1637
case 'm' :
1630
1638
case 'o' :
@@ -1647,7 +1655,7 @@ f_knob(ClientData clientData, Tcl_Interp *interp, int argc, const char *argv[])
1647
1655
}
1648
1656
}
1649
1657
} else {
1650
- if (edit_flag_tra ) {
1658
+ if (edit_flag == EDIT_FLAG_TRA || edit_flag_force ) {
1651
1659
switch (view_state -> vs_gvp -> gv_coord ) {
1652
1660
case 'm' :
1653
1661
case 'o' :
@@ -1674,7 +1682,7 @@ f_knob(ClientData clientData, Tcl_Interp *interp, int argc, const char *argv[])
1674
1682
break ;
1675
1683
case 'Y' :
1676
1684
if (incr_flag ) {
1677
- if (edit_flag_tra ) {
1685
+ if (edit_flag == EDIT_FLAG_TRA || edit_flag_force ) {
1678
1686
switch (view_state -> vs_gvp -> gv_coord ) {
1679
1687
case 'm' :
1680
1688
case 'o' :
@@ -1697,7 +1705,7 @@ f_knob(ClientData clientData, Tcl_Interp *interp, int argc, const char *argv[])
1697
1705
}
1698
1706
}
1699
1707
} else {
1700
- if (edit_flag_tra ) {
1708
+ if (edit_flag == EDIT_FLAG_TRA || edit_flag_force ) {
1701
1709
switch (view_state -> vs_gvp -> gv_coord ) {
1702
1710
case 'm' :
1703
1711
case 'o' :
@@ -1724,7 +1732,7 @@ f_knob(ClientData clientData, Tcl_Interp *interp, int argc, const char *argv[])
1724
1732
break ;
1725
1733
case 'Z' :
1726
1734
if (incr_flag ) {
1727
- if (edit_flag_tra ) {
1735
+ if (edit_flag == EDIT_FLAG_TRA || edit_flag_force ) {
1728
1736
switch (view_state -> vs_gvp -> gv_coord ) {
1729
1737
case 'm' :
1730
1738
case 'o' :
@@ -1747,7 +1755,7 @@ f_knob(ClientData clientData, Tcl_Interp *interp, int argc, const char *argv[])
1747
1755
}
1748
1756
}
1749
1757
} else {
1750
- if (edit_flag_tra ) {
1758
+ if (edit_flag == EDIT_FLAG_TRA || edit_flag_force ) {
1751
1759
switch (view_state -> vs_gvp -> gv_coord ) {
1752
1760
case 'm' :
1753
1761
case 'o' :
@@ -1774,13 +1782,13 @@ f_knob(ClientData clientData, Tcl_Interp *interp, int argc, const char *argv[])
1774
1782
break ;
1775
1783
case 'S' :
1776
1784
if (incr_flag ) {
1777
- if (edit_flag_sca ) {
1785
+ if (edit_flag == EDIT_FLAG_SCA || edit_flag_force ) {
1778
1786
s -> edit_state .edit_rate_scale += f ;
1779
1787
} else {
1780
1788
view_state -> vs_rate_scale += f ;
1781
1789
}
1782
1790
} else {
1783
- if (edit_flag_sca ) {
1791
+ if (edit_flag == EDIT_FLAG_SCA || edit_flag_force ) {
1784
1792
s -> edit_state .edit_rate_scale = f ;
1785
1793
} else {
1786
1794
view_state -> vs_rate_scale = f ;
@@ -1795,7 +1803,7 @@ f_knob(ClientData clientData, Tcl_Interp *interp, int argc, const char *argv[])
1795
1803
switch (cmd [1 ]) {
1796
1804
case 'x' :
1797
1805
if (incr_flag ) {
1798
- if (edit_flag_rot ) {
1806
+ if (edit_flag == EDIT_FLAG_ROT || edit_flag_force ) {
1799
1807
switch (view_state -> vs_gvp -> gv_coord ) {
1800
1808
case 'm' :
1801
1809
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[])
1817
1825
1818
1826
rvec [X ] = f ;
1819
1827
} else {
1820
- if (edit_flag_rot ) {
1828
+ if (edit_flag == EDIT_FLAG_ROT || edit_flag_force ) {
1821
1829
switch (view_state -> vs_gvp -> gv_coord ) {
1822
1830
case 'm' :
1823
1831
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[])
1844
1852
}
1845
1853
1846
1854
/* wrap around */
1847
- if (edit_flag_rot ) {
1855
+ if (edit_flag == EDIT_FLAG_ROT || edit_flag_force ) {
1848
1856
fastf_t * arp ;
1849
1857
fastf_t * larp ;
1850
1858
@@ -1899,7 +1907,7 @@ f_knob(ClientData clientData, Tcl_Interp *interp, int argc, const char *argv[])
1899
1907
break ;
1900
1908
case 'y' :
1901
1909
if (incr_flag ) {
1902
- if (edit_flag_rot ) {
1910
+ if (edit_flag == EDIT_FLAG_ROT || edit_flag_force ) {
1903
1911
switch (view_state -> vs_gvp -> gv_coord ) {
1904
1912
case 'm' :
1905
1913
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[])
1921
1929
1922
1930
rvec [Y ] = f ;
1923
1931
} else {
1924
- if (edit_flag_rot ) {
1932
+ if (edit_flag == EDIT_FLAG_ROT || edit_flag_force ) {
1925
1933
switch (view_state -> vs_gvp -> gv_coord ) {
1926
1934
case 'm' :
1927
1935
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[])
1948
1956
}
1949
1957
1950
1958
/* wrap around */
1951
- if (edit_flag_rot ) {
1959
+ if (edit_flag == EDIT_FLAG_ROT || edit_flag_force ) {
1952
1960
fastf_t * arp ;
1953
1961
fastf_t * larp ;
1954
1962
@@ -2003,7 +2011,7 @@ f_knob(ClientData clientData, Tcl_Interp *interp, int argc, const char *argv[])
2003
2011
break ;
2004
2012
case 'z' :
2005
2013
if (incr_flag ) {
2006
- if (edit_flag_rot ) {
2014
+ if (edit_flag == EDIT_FLAG_ROT || edit_flag_force ) {
2007
2015
switch (view_state -> vs_gvp -> gv_coord ) {
2008
2016
case 'm' :
2009
2017
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[])
2025
2033
2026
2034
rvec [Z ] = f ;
2027
2035
} else {
2028
- if (edit_flag_rot ) {
2036
+ if (edit_flag == EDIT_FLAG_ROT || edit_flag_force ) {
2029
2037
switch (view_state -> vs_gvp -> gv_coord ) {
2030
2038
case 'm' :
2031
2039
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[])
2052
2060
}
2053
2061
2054
2062
/* wrap around */
2055
- if (edit_flag_rot ) {
2063
+ if (edit_flag == EDIT_FLAG_ROT || edit_flag_force ) {
2056
2064
fastf_t * arp ;
2057
2065
fastf_t * larp ;
2058
2066
@@ -2109,7 +2117,7 @@ f_knob(ClientData clientData, Tcl_Interp *interp, int argc, const char *argv[])
2109
2117
sf = f * s -> dbip -> dbi_local2base / view_state -> vs_gvp -> gv_scale ;
2110
2118
2111
2119
if (incr_flag ) {
2112
- if (edit_flag_tra ) {
2120
+ if (edit_flag == EDIT_FLAG_TRA || edit_flag_force ) {
2113
2121
switch (view_state -> vs_gvp -> gv_coord ) {
2114
2122
case 'm' :
2115
2123
case 'o' :
@@ -2131,7 +2139,7 @@ f_knob(ClientData clientData, Tcl_Interp *interp, int argc, const char *argv[])
2131
2139
2132
2140
tvec [X ] = f ;
2133
2141
} else {
2134
- if (edit_flag_tra ) {
2142
+ if (edit_flag == EDIT_FLAG_TRA || edit_flag_force ) {
2135
2143
switch (view_state -> vs_gvp -> gv_coord ) {
2136
2144
case 'm' :
2137
2145
case 'o' :
@@ -2163,7 +2171,7 @@ f_knob(ClientData clientData, Tcl_Interp *interp, int argc, const char *argv[])
2163
2171
sf = f * s -> dbip -> dbi_local2base / view_state -> vs_gvp -> gv_scale ;
2164
2172
2165
2173
if (incr_flag ) {
2166
- if (edit_flag_tra ) {
2174
+ if (edit_flag == EDIT_FLAG_TRA || edit_flag_force ) {
2167
2175
switch (view_state -> vs_gvp -> gv_coord ) {
2168
2176
case 'm' :
2169
2177
case 'o' :
@@ -2185,7 +2193,7 @@ f_knob(ClientData clientData, Tcl_Interp *interp, int argc, const char *argv[])
2185
2193
2186
2194
tvec [Y ] = f ;
2187
2195
} else {
2188
- if (edit_flag_tra ) {
2196
+ if (edit_flag == EDIT_FLAG_TRA || edit_flag_force ) {
2189
2197
switch (view_state -> vs_gvp -> gv_coord ) {
2190
2198
case 'm' :
2191
2199
case 'o' :
@@ -2216,7 +2224,7 @@ f_knob(ClientData clientData, Tcl_Interp *interp, int argc, const char *argv[])
2216
2224
sf = f * s -> dbip -> dbi_local2base / view_state -> vs_gvp -> gv_scale ;
2217
2225
2218
2226
if (incr_flag ) {
2219
- if (edit_flag_tra ) {
2227
+ if (edit_flag == EDIT_FLAG_TRA || edit_flag_force ) {
2220
2228
switch (view_state -> vs_gvp -> gv_coord ) {
2221
2229
case 'm' :
2222
2230
case 'o' :
@@ -2238,7 +2246,7 @@ f_knob(ClientData clientData, Tcl_Interp *interp, int argc, const char *argv[])
2238
2246
2239
2247
tvec [Z ] = f ;
2240
2248
} else {
2241
- if (edit_flag_tra ) {
2249
+ if (edit_flag == EDIT_FLAG_TRA || edit_flag_force ) {
2242
2250
switch (view_state -> vs_gvp -> gv_coord ) {
2243
2251
case 'm' :
2244
2252
case 'o' :
@@ -2267,7 +2275,7 @@ f_knob(ClientData clientData, Tcl_Interp *interp, int argc, const char *argv[])
2267
2275
break ;
2268
2276
case 'S' :
2269
2277
if (incr_flag ) {
2270
- if (edit_flag_sca ) {
2278
+ if (edit_flag == EDIT_FLAG_SCA || edit_flag_force ) {
2271
2279
s -> s_edit -> edit_absolute_scale += f ;
2272
2280
2273
2281
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[])
2280
2288
abs_zoom (s );
2281
2289
}
2282
2290
} else {
2283
- if (edit_flag_sca ) {
2291
+ if (edit_flag == EDIT_FLAG_SCA || edit_flag_force ) {
2284
2292
s -> s_edit -> edit_absolute_scale = f ;
2285
2293
2286
2294
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[])
2370
2378
}
2371
2379
2372
2380
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 );
2374
2382
}
2375
2383
2376
2384
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 );
2378
2386
}
2379
2387
2380
2388
check_nonzero_rates (s );
0 commit comments