[Bf-blender-cvs] [ff4487b] soc-2016-multiview: 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

Tianwei Shen noreply at git.blender.org
Fri Jul 1 18:53:50 CEST 2016


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;
 }




More information about the Bf-blender-cvs mailing list