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;

_______________________________________________
Bf-blender-cvs mailing list
[email protected]
https://lists.blender.org/mailman/listinfo/bf-blender-cvs

Reply via email to