Commit: ff4487b70cc883a1b2b836ead8f1aa764c23bbe3
Author: Tianwei Shen
Date:   Sat Jul 2 00:52:41 2016 +0800
Branches: soc-2016-multiview
https://developer.blender.org/rBff4487b70cc883a1b2b836ead8f1aa764c23bbe3

add robustness to correspondence adding:
- when the correspondence has been added, give an error message and
  return
- when a conflict correspondence is added, give an error message

===================================================================

M       source/blender/blenkernel/BKE_tracking.h
M       source/blender/editors/space_clip/tracking_ops_correspondence.c

===================================================================

diff --git a/source/blender/blenkernel/BKE_tracking.h 
b/source/blender/blenkernel/BKE_tracking.h
index e16e1ac..0d3487f 100644
--- a/source/blender/blenkernel/BKE_tracking.h
+++ b/source/blender/blenkernel/BKE_tracking.h
@@ -295,7 +295,8 @@ struct MovieTrackingCorrespondence 
*BKE_tracking_correspondence_add(struct ListB
                                                                     struct 
MovieTrackingTrack *self_track,
                                                                     struct 
MovieTrackingTrack *other_track,
                                                                     struct 
MovieClip *self_clip,
-                                                                    struct 
MovieClip *other_clip);
+                                                                    struct 
MovieClip *other_clip,
+                                                                    char 
*error_msg, int error_size);
 void BKE_tracking_multiview_reconstruction_solve(struct 
MovieMultiviewReconstructContext *context, short *stop, short *do_update,
                                                  float *progress, char 
*stats_message, int message_size);
 struct MovieMultiviewReconstructContext 
*BKE_tracking_multiview_reconstruction_context_new(struct MovieClip **clips,
diff --git a/source/blender/editors/space_clip/tracking_ops_correspondence.c 
b/source/blender/editors/space_clip/tracking_ops_correspondence.c
index 4759410..9be7201 100644
--- a/source/blender/editors/space_clip/tracking_ops_correspondence.c
+++ b/source/blender/editors/space_clip/tracking_ops_correspondence.c
@@ -81,9 +81,33 @@ MovieTrackingCorrespondence 
*BKE_tracking_correspondence_add(ListBase *corr_base
                                                              
MovieTrackingTrack *self_track,
                                                              
MovieTrackingTrack *other_track,
                                                              MovieClip* 
self_clip,
-                                                             MovieClip* 
other_clip)
+                                                             MovieClip* 
other_clip,
+                                                             char *error_msg, 
int error_size)
 {
-       MovieTrackingCorrespondence *corr;
+       MovieTrackingCorrespondence *corr = NULL;
+       // check duplicate correspondences or conflict correspondence
+       for(corr = corr_base->first; corr != NULL; corr = corr->next)
+       {
+               if (corr->self_clip == self_clip && corr->self_track == 
self_track)
+               {
+                       // duplicate correspondences
+                       if (corr->other_clip == other_clip && corr->other_track 
== other_track)
+                       {
+                               BLI_strncpy(error_msg,
+                                           N_("This correspondence has been 
added"),
+                                           error_size);
+                               return NULL;
+                       }
+                       // conflict correspondence
+                       else
+                       {
+                               BLI_strncpy(error_msg,
+                                           N_("Conflict correspondence, 
consider first deleting the old one"),
+                                           error_size);
+                               return NULL;
+                       }
+               }
+       }
 
        corr = MEM_callocN(sizeof(MovieTrackingCorrespondence), "add 
correspondence");
        strcpy(corr->name, "Correspondence");
@@ -150,8 +174,15 @@ static int add_correspondence_exec(bContext *C, wmOperator 
*op)
        // TODO(tianwei): link two tracks, mark these two tracks in a different 
color
 
        // add these correspondence
-       BKE_tracking_correspondence_add(&(tracking->correspondences), 
primary_track, witness_track,
-                                       clip, second_clip);
+       char error_msg[256] = "\0";
+       if(!BKE_tracking_correspondence_add(&(tracking->correspondences), 
primary_track, witness_track,
+                                       clip, second_clip, error_msg, 
sizeof(error_msg)))
+       {
+               if (error_msg[0]) {
+                       BKE_report(op->reports, RPT_ERROR, error_msg);
+               }
+               return OPERATOR_CANCELLED;
+       }
 
        return OPERATOR_FINISHED;
 }

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

Reply via email to