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