Cleanup: Refactor marker area clamping
Switch from a single function with a lot of branching at its top level to dedicated function calls with own documentation.
This commit is contained in:
parent
58fe38af9f
commit
66dada123c
|
@ -32,12 +32,6 @@ struct rcti;
|
|||
* Common types and constants.
|
||||
*/
|
||||
|
||||
enum {
|
||||
CLAMP_PAT_POS = 2,
|
||||
CLAMP_SEARCH_DIM = 3,
|
||||
CLAMP_SEARCH_POS = 4,
|
||||
};
|
||||
|
||||
typedef enum eTrackArea {
|
||||
TRACK_AREA_POINT = (1 << 0),
|
||||
TRACK_AREA_PAT = (1 << 1),
|
||||
|
@ -292,7 +286,35 @@ struct MovieTrackingMarker *BKE_tracking_marker_insert(struct MovieTrackingTrack
|
|||
struct MovieTrackingMarker *marker);
|
||||
void BKE_tracking_marker_delete(struct MovieTrackingTrack *track, int framenr);
|
||||
|
||||
void BKE_tracking_marker_clamp(struct MovieTrackingMarker *marker, int event);
|
||||
/**
|
||||
* If the pattern area is outside of the search area its position will be modified in a way that it
|
||||
* is within the pattern is within the search area.
|
||||
*
|
||||
* If the pattern area is already within the search area nothing happens.
|
||||
*
|
||||
* If the pattern area is bigger than the search area the behavior is undefined.
|
||||
*
|
||||
* Search area is never modified.
|
||||
*/
|
||||
void BKE_tracking_marker_clamp_pattern_position(struct MovieTrackingMarker *marker);
|
||||
|
||||
/**
|
||||
* If the search size is such that pattern area is (partially) outside of the search area make the
|
||||
* search area bigger so that the pattern is within the search area.
|
||||
*
|
||||
* Pattern area is never modified.
|
||||
*/
|
||||
void BKE_tracking_marker_clamp_search_size(struct MovieTrackingMarker *marker);
|
||||
|
||||
/**
|
||||
* If the search position is such that pattern area is (partially) outside of the search area move
|
||||
* the search area so that the pattern is within the search area.
|
||||
*
|
||||
* If the search area is smaller than the pattern the behavior is undefined.
|
||||
*
|
||||
* Pattern area is never modified.
|
||||
*/
|
||||
void BKE_tracking_marker_clamp_search_position(struct MovieTrackingMarker *marker);
|
||||
|
||||
/**
|
||||
* Get marker closest to the given frame number.
|
||||
|
|
|
@ -1367,53 +1367,52 @@ void BKE_tracking_marker_delete(MovieTrackingTrack *track, int framenr)
|
|||
}
|
||||
}
|
||||
|
||||
void BKE_tracking_marker_clamp(MovieTrackingMarker *marker, int event)
|
||||
void BKE_tracking_marker_clamp_pattern_position(MovieTrackingMarker *marker)
|
||||
{
|
||||
float pat_min[2], pat_max[2];
|
||||
|
||||
BKE_tracking_marker_pattern_minmax(marker, pat_min, pat_max);
|
||||
|
||||
if (event == CLAMP_PAT_POS) {
|
||||
float dim[2];
|
||||
|
||||
sub_v2_v2v2(dim, pat_max, pat_min);
|
||||
|
||||
for (int a = 0; a < 2; a++) {
|
||||
/* pattern shouldn't be moved outside of search */
|
||||
if (pat_min[a] < marker->search_min[a]) {
|
||||
for (int b = 0; b < 4; b++) {
|
||||
marker->pattern_corners[b][a] += marker->search_min[a] - pat_min[a];
|
||||
}
|
||||
for (int a = 0; a < 2; a++) {
|
||||
if (pat_min[a] < marker->search_min[a]) {
|
||||
for (int b = 0; b < 4; b++) {
|
||||
marker->pattern_corners[b][a] += marker->search_min[a] - pat_min[a];
|
||||
}
|
||||
if (pat_max[a] > marker->search_max[a]) {
|
||||
for (int b = 0; b < 4; b++) {
|
||||
marker->pattern_corners[b][a] -= pat_max[a] - marker->search_max[a];
|
||||
}
|
||||
}
|
||||
if (pat_max[a] > marker->search_max[a]) {
|
||||
for (int b = 0; b < 4; b++) {
|
||||
marker->pattern_corners[b][a] -= pat_max[a] - marker->search_max[a];
|
||||
}
|
||||
}
|
||||
}
|
||||
else if (event == CLAMP_SEARCH_DIM) {
|
||||
for (int a = 0; a < 2; a++) {
|
||||
/* search shouldn't be resized smaller than pattern */
|
||||
marker->search_min[a] = min_ff(pat_min[a], marker->search_min[a]);
|
||||
marker->search_max[a] = max_ff(pat_max[a], marker->search_max[a]);
|
||||
}
|
||||
}
|
||||
|
||||
void BKE_tracking_marker_clamp_search_size(MovieTrackingMarker *marker)
|
||||
{
|
||||
float pat_min[2], pat_max[2];
|
||||
BKE_tracking_marker_pattern_minmax(marker, pat_min, pat_max);
|
||||
|
||||
for (int a = 0; a < 2; a++) {
|
||||
marker->search_min[a] = min_ff(pat_min[a], marker->search_min[a]);
|
||||
marker->search_max[a] = max_ff(pat_max[a], marker->search_max[a]);
|
||||
}
|
||||
else if (event == CLAMP_SEARCH_POS) {
|
||||
float dim[2];
|
||||
}
|
||||
|
||||
sub_v2_v2v2(dim, marker->search_max, marker->search_min);
|
||||
void BKE_tracking_marker_clamp_search_position(MovieTrackingMarker *marker)
|
||||
{
|
||||
float pat_min[2], pat_max[2];
|
||||
BKE_tracking_marker_pattern_minmax(marker, pat_min, pat_max);
|
||||
|
||||
for (int a = 0; a < 2; a++) {
|
||||
/* search shouldn't be moved inside pattern */
|
||||
if (marker->search_min[a] > pat_min[a]) {
|
||||
marker->search_min[a] = pat_min[a];
|
||||
marker->search_max[a] = marker->search_min[a] + dim[a];
|
||||
}
|
||||
if (marker->search_max[a] < pat_max[a]) {
|
||||
marker->search_max[a] = pat_max[a];
|
||||
marker->search_min[a] = marker->search_max[a] - dim[a];
|
||||
}
|
||||
float dim[2];
|
||||
sub_v2_v2v2(dim, marker->search_max, marker->search_min);
|
||||
|
||||
for (int a = 0; a < 2; a++) {
|
||||
if (marker->search_min[a] > pat_min[a]) {
|
||||
marker->search_min[a] = pat_min[a];
|
||||
marker->search_max[a] = marker->search_min[a] + dim[a];
|
||||
}
|
||||
if (marker->search_max[a] < pat_max[a]) {
|
||||
marker->search_max[a] = pat_max[a];
|
||||
marker->search_min[a] = marker->search_max[a] - dim[a];
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -303,7 +303,7 @@ static void marker_block_handler(bContext *C, void *arg_cb, int event)
|
|||
cb->marker->pattern_corners[a][1] *= scale_y;
|
||||
}
|
||||
|
||||
BKE_tracking_marker_clamp(cb->marker, CLAMP_SEARCH_DIM);
|
||||
BKE_tracking_marker_clamp_search_size(cb->marker);
|
||||
|
||||
ok = true;
|
||||
}
|
||||
|
@ -319,7 +319,7 @@ static void marker_block_handler(bContext *C, void *arg_cb, int event)
|
|||
sub_v2_v2v2(cb->marker->search_min, delta, side);
|
||||
add_v2_v2v2(cb->marker->search_max, delta, side);
|
||||
|
||||
BKE_tracking_marker_clamp(cb->marker, CLAMP_SEARCH_POS);
|
||||
BKE_tracking_marker_clamp_search_position(cb->marker);
|
||||
|
||||
ok = true;
|
||||
}
|
||||
|
@ -340,7 +340,7 @@ static void marker_block_handler(bContext *C, void *arg_cb, int event)
|
|||
cb->marker->search_max[0] += dim[0];
|
||||
cb->marker->search_max[1] += dim[1];
|
||||
|
||||
BKE_tracking_marker_clamp(cb->marker, CLAMP_SEARCH_DIM);
|
||||
BKE_tracking_marker_clamp_search_size(cb->marker);
|
||||
|
||||
ok = true;
|
||||
}
|
||||
|
|
|
@ -849,7 +849,7 @@ static int slide_marker_modal(bContext *C, wmOperator *op, const wmEvent *event)
|
|||
}
|
||||
}
|
||||
|
||||
BKE_tracking_marker_clamp(data->marker, CLAMP_SEARCH_DIM);
|
||||
BKE_tracking_marker_clamp_search_size(data->marker);
|
||||
}
|
||||
else if (data->action == SLIDE_ACTION_OFFSET) {
|
||||
const float d[2] = {dx, dy};
|
||||
|
@ -870,10 +870,8 @@ static int slide_marker_modal(bContext *C, wmOperator *op, const wmEvent *event)
|
|||
copy_v2_v2(data->pos, spos);
|
||||
}
|
||||
|
||||
/* Currently only patterns are allowed to have such
|
||||
* combination of event and data.
|
||||
*/
|
||||
BKE_tracking_marker_clamp(data->marker, CLAMP_SEARCH_DIM);
|
||||
/* Currently only patterns are allowed to have such combination of event and data. */
|
||||
BKE_tracking_marker_clamp_search_size(data->marker);
|
||||
}
|
||||
else if (data->action == SLIDE_ACTION_TILT_SIZE) {
|
||||
const float mouse_delta[2] = {dx, dy};
|
||||
|
@ -917,7 +915,7 @@ static int slide_marker_modal(bContext *C, wmOperator *op, const wmEvent *event)
|
|||
data->corners[a][1] = (vec[1] * cosf(angle) + vec[0] * sinf(angle)) / data->height;
|
||||
}
|
||||
|
||||
BKE_tracking_marker_clamp(data->marker, CLAMP_SEARCH_DIM);
|
||||
BKE_tracking_marker_clamp_search_size(data->marker);
|
||||
}
|
||||
}
|
||||
else if (data->area == TRACK_AREA_SEARCH) {
|
||||
|
@ -928,7 +926,7 @@ static int slide_marker_modal(bContext *C, wmOperator *op, const wmEvent *event)
|
|||
data->min[1] = data->old_search_min[1] + dy;
|
||||
data->max[1] = data->old_search_max[1] - dy;
|
||||
|
||||
BKE_tracking_marker_clamp(data->marker, CLAMP_SEARCH_DIM);
|
||||
BKE_tracking_marker_clamp_search_size(data->marker);
|
||||
}
|
||||
else if (data->area == TRACK_AREA_SEARCH) {
|
||||
const float d[2] = {dx, dy};
|
||||
|
@ -936,7 +934,7 @@ static int slide_marker_modal(bContext *C, wmOperator *op, const wmEvent *event)
|
|||
add_v2_v2v2(data->max, data->old_search_max, d);
|
||||
}
|
||||
|
||||
BKE_tracking_marker_clamp(data->marker, CLAMP_SEARCH_POS);
|
||||
BKE_tracking_marker_clamp_search_position(data->marker);
|
||||
}
|
||||
|
||||
data->marker->flag &= ~MARKER_TRACKED;
|
||||
|
|
|
@ -712,23 +712,23 @@ void recalcData_tracking(TransInfo *t)
|
|||
|
||||
if (t->mode == TFM_TRANSLATION) {
|
||||
if (TRACK_AREA_SELECTED(track, TRACK_AREA_PAT)) {
|
||||
BKE_tracking_marker_clamp(marker, CLAMP_PAT_POS);
|
||||
BKE_tracking_marker_clamp_pattern_position(marker);
|
||||
}
|
||||
if (TRACK_AREA_SELECTED(track, TRACK_AREA_SEARCH)) {
|
||||
BKE_tracking_marker_clamp(marker, CLAMP_SEARCH_POS);
|
||||
BKE_tracking_marker_clamp_search_position(marker);
|
||||
}
|
||||
}
|
||||
else if (t->mode == TFM_RESIZE) {
|
||||
if (TRACK_AREA_SELECTED(track, TRACK_AREA_PAT)) {
|
||||
BKE_tracking_marker_clamp(marker, CLAMP_SEARCH_DIM);
|
||||
BKE_tracking_marker_clamp_search_size(marker);
|
||||
}
|
||||
if (TRACK_AREA_SELECTED(track, TRACK_AREA_SEARCH)) {
|
||||
BKE_tracking_marker_clamp(marker, CLAMP_SEARCH_DIM);
|
||||
BKE_tracking_marker_clamp_search_size(marker);
|
||||
}
|
||||
}
|
||||
else if (t->mode == TFM_ROTATION) {
|
||||
if (TRACK_AREA_SELECTED(track, TRACK_AREA_PAT)) {
|
||||
BKE_tracking_marker_clamp(marker, CLAMP_PAT_POS);
|
||||
BKE_tracking_marker_clamp_pattern_position(marker);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -557,7 +557,7 @@ static void rna_tracking_markerPattern_update(Main *UNUSED(bmain),
|
|||
{
|
||||
MovieTrackingMarker *marker = (MovieTrackingMarker *)ptr->data;
|
||||
|
||||
BKE_tracking_marker_clamp(marker, CLAMP_SEARCH_DIM);
|
||||
BKE_tracking_marker_clamp_search_size(marker);
|
||||
}
|
||||
|
||||
static void rna_tracking_markerSearch_update(Main *UNUSED(bmain),
|
||||
|
@ -566,7 +566,7 @@ static void rna_tracking_markerSearch_update(Main *UNUSED(bmain),
|
|||
{
|
||||
MovieTrackingMarker *marker = (MovieTrackingMarker *)ptr->data;
|
||||
|
||||
BKE_tracking_marker_clamp(marker, CLAMP_SEARCH_DIM);
|
||||
BKE_tracking_marker_clamp_search_size(marker);
|
||||
}
|
||||
|
||||
static void rna_tracking_markerPattern_boundbox_get(PointerRNA *ptr, float *values)
|
||||
|
|
Loading…
Reference in New Issue