[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