[Bf-blender-cvs] [ce2f81e] soc-2016-multiview: fix checking SC_VIEW_CLIP error
Tianwei Shen
noreply at git.blender.org
Tue Jul 26 17:33:38 CEST 2016
Commit: ce2f81e4359e869ba334e21b35b3b41112963564
Author: Tianwei Shen
Date: Tue Jul 26 20:31:07 2016 +0800
Branches: soc-2016-multiview
https://developer.blender.org/rBce2f81e4359e869ba334e21b35b3b41112963564
fix checking SC_VIEW_CLIP error
- should check sc->view rather than sc->mode
- de-duplicate counting tracking code, by making it get_single_track
===================================================================
M source/blender/editors/space_clip/tracking_ops_correspondence.c
===================================================================
diff --git a/source/blender/editors/space_clip/tracking_ops_correspondence.c b/source/blender/editors/space_clip/tracking_ops_correspondence.c
index da8db32..9d041ee 100644
--- a/source/blender/editors/space_clip/tracking_ops_correspondence.c
+++ b/source/blender/editors/space_clip/tracking_ops_correspondence.c
@@ -66,6 +66,23 @@
/********************** add correspondence operator *********************/
+/* return the pointer to a single selected track, if more than one is selected, return NULL */
+static MovieTrackingTrack *get_single_track(SpaceClip *sc, ListBase *tracksbase)
+{
+ int num_selected_tracks = 0;
+ MovieTrackingTrack *selected_track;
+ for (MovieTrackingTrack *track = tracksbase->first; track; track = track->next) {
+ if (TRACK_VIEW_SELECTED(sc, track)) {
+ selected_track = track;
+ num_selected_tracks++;
+ }
+ }
+ if (num_selected_tracks == 1) {
+ return selected_track;
+ }
+ return NULL;
+}
+
static int add_correspondence_exec(bContext *C, wmOperator *op)
{
SpaceClip *sc = CTX_wm_space_clip(C);
@@ -75,39 +92,27 @@ static int add_correspondence_exec(bContext *C, wmOperator *op)
// get one track from each clip and link them
MovieTrackingTrack *primary_track = NULL, *witness_track = NULL;
- MovieTrackingTrack *track;
- int num_primary_selected = 0, num_witness_selected = 0;
- // get number of selected tracks in the primary camera
- for (track = tracksbase->first; track; track = track->next) {
- if (TRACK_VIEW_SELECTED(sc, track)) {
- primary_track = track;
- num_primary_selected++;
- }
- }
+ // get a single selected tracks in the primary camera
+ primary_track = get_single_track(sc, tracksbase);
- // get number of selected tracks in the witness camera, only one witness camera is allowed
+ // get a single selected tracks in the witness camera, only one witness camera is allowed
wmWindow *window = CTX_wm_window(C);
- MovieClip *second_clip;
+ MovieClip *second_clip = NULL;
for (ScrArea *sa = window->screen->areabase.first; sa != NULL; sa = sa->next) {
if (sa->spacetype == SPACE_CLIP) {
SpaceClip *second_sc = sa->spacedata.first;
- if (second_sc != sc && second_sc->mode == SC_VIEW_CLIP) {
+ if (second_sc != sc && second_sc->view == SC_VIEW_CLIP) {
second_clip = ED_space_clip_get_clip(second_sc);
MovieTracking *second_tracking = &second_clip->tracking;
ListBase *second_tracksbase = BKE_tracking_get_active_tracks(second_tracking);
- for (track = second_tracksbase->first; track; track = track->next) {
- if (TRACK_VIEW_SELECTED(second_sc, track)) {
- witness_track = track;
- num_witness_selected++;
- }
- }
+ witness_track = get_single_track(second_sc, second_tracksbase);
break;
}
}
}
- if (!primary_track || !witness_track || num_primary_selected != 1 || num_witness_selected != 1) {
+ if (!primary_track || !witness_track) {
BKE_report(op->reports, RPT_ERROR, "Select exactly one track in each clip");
return OPERATOR_CANCELLED;
}
@@ -222,7 +227,7 @@ static bool solve_multiview_initjob(bContext *C,
for (ScrArea *sa = window->screen->areabase.first; sa != NULL; sa = sa->next) {
if (sa->spacetype == SPACE_CLIP) {
SpaceClip *other_sc = sa->spacedata.first;
- if (other_sc != sc && other_sc->mode == SC_VIEW_CLIP) {
+ if (other_sc != sc && other_sc->view == SC_VIEW_CLIP) {
smj->clip_num++;
}
}
@@ -237,7 +242,7 @@ static bool solve_multiview_initjob(bContext *C,
for (ScrArea *sa = window->screen->areabase.first; sa != NULL; sa = sa->next) {
if (sa->spacetype == SPACE_CLIP) {
SpaceClip *other_sc = sa->spacedata.first;
- if (other_sc != sc && other_sc->mode == SC_VIEW_CLIP) {
+ if (other_sc != sc && other_sc->view == SC_VIEW_CLIP) {
MovieClip *other_clip;
other_clip = ED_space_clip_get_clip(other_sc);
smj->clips[count++] = other_clip;
More information about the Bf-blender-cvs
mailing list