[Bf-blender-cvs] [a9a1aaf] soc-2016-multiview: add correspondence data struct

Tianwei Shen noreply at git.blender.org
Mon May 30 21:08:17 CEST 2016


Commit: a9a1aaf7e4d911853d5368d406374cdc365d488b
Author: Tianwei Shen
Date:   Tue May 31 03:08:03 2016 +0800
Branches: soc-2016-multiview
https://developer.blender.org/rBa9a1aaf7e4d911853d5368d406374cdc365d488b

add correspondence data struct

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

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

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

diff --git a/source/blender/blenkernel/BKE_tracking.h b/source/blender/blenkernel/BKE_tracking.h
index 4366d00..36b4a81 100644
--- a/source/blender/blenkernel/BKE_tracking.h
+++ b/source/blender/blenkernel/BKE_tracking.h
@@ -37,6 +37,7 @@ struct ImBuf;
 struct ListBase;
 struct MovieReconstructContext;
 struct MovieTrackingTrack;
+struct MovieTrackingCorrespondence;
 struct MovieTrackingMarker;
 struct MovieTrackingPlaneTrack;
 struct MovieTrackingPlaneMarker;
@@ -288,6 +289,10 @@ void BKE_tracking_dopesheet_tag_update(struct MovieTracking *tracking);
 void BKE_tracking_dopesheet_update(struct MovieTracking *tracking);
 
 /* Correspondence */
+void BKE_tracking_correspondence_unique_name(struct ListBase *tracksbase, struct MovieTrackingCorrespondence *corr);
+struct MovieTrackingCorrespondence *BKE_tracking_correspondence_add(struct MovieTracking *tracking, struct ListBase *corr_base,
+                                                                    struct MovieTrackingTrack *primary_track,
+                                                                    struct MovieTrackingTrack *witness_track);
 
 #define TRACK_SELECTED(track)               ((track)->flag & SELECT || (track)->pat_flag & SELECT || (track)->search_flag & SELECT)
 
diff --git a/source/blender/editors/space_clip/tracking_ops_correspondence.c b/source/blender/editors/space_clip/tracking_ops_correspondence.c
index ca51b76..efc68a3 100644
--- a/source/blender/editors/space_clip/tracking_ops_correspondence.c
+++ b/source/blender/editors/space_clip/tracking_ops_correspondence.c
@@ -60,6 +60,36 @@
 #include "clip_intern.h"
 #include "tracking_ops_intern.h"
 
+// TODO(tianwei): may move these functions to tracking.c in the future
+/* Ensure specified correspondence has got unique name,
+ * if it's not name of specified correspondence will be changed
+ * keeping names of all other correspondence unchanged.
+ */
+void BKE_tracking_correspondence_unique_name(ListBase *tracksbase, MovieTrackingCorrespondence *corr)
+{
+	BLI_uniquename(tracksbase, corr, CTX_DATA_(BLT_I18NCONTEXT_ID_MOVIECLIP, "Correspondence"), '.',
+	               offsetof(MovieTrackingCorrespondence, name), sizeof(corr->name));
+}
+
+/* Add new correspondence to a specified correspondence base.
+ */
+MovieTrackingCorrespondence *BKE_tracking_correspondence_add(MovieTracking *tracking, ListBase *corr_base,
+                                                             MovieTrackingTrack *primary_track,
+                                                             MovieTrackingTrack *witness_track)
+{
+	MovieTrackingCorrespondence *corr;
+
+	corr = MEM_callocN(sizeof(MovieTrackingCorrespondence), "add correspondence");
+	strcpy(corr->name, "Correspondence");
+	corr->primary_track = primary_track;
+	corr->witness_track = witness_track;
+
+	BLI_addtail(corr_base, corr);
+	BKE_tracking_correspondence_unique_name(corr_base, corr);
+
+	return corr;
+}
+
 /********************** add correspondence operator *********************/
 
 static int add_correspondence_exec(bContext *C, wmOperator *op)
@@ -107,8 +137,10 @@ static int add_correspondence_exec(bContext *C, wmOperator *op)
 		return OPERATOR_CANCELLED;
 	}
 
-	// link two tracks, mark these two tracks in a different color
-	//ed_tracking_delect_all_tracks(tracksbase);
+	// TODO(tianwei): link two tracks, mark these two tracks in a different color
+
+	// add these correspondence
+	BKE_tracking_correspondence_add(tracking, &(tracking->correspondences), primary_track, witness_track);
 
 	return OPERATOR_FINISHED;
 }
diff --git a/source/blender/makesdna/DNA_tracking_types.h b/source/blender/makesdna/DNA_tracking_types.h
index c2117b1..df3ef6b 100644
--- a/source/blender/makesdna/DNA_tracking_types.h
+++ b/source/blender/makesdna/DNA_tracking_types.h
@@ -162,8 +162,12 @@ typedef struct MovieTrackingTrack {
 	float weight, pad;
 } MovieTrackingTrack;
 
+//TODO(tianwei): expand the fields, now only two tracks
 typedef struct MovieTrackingCorrespondence {
-	//TODO(tianwei): expand the fields, now only two tracks
+	struct MovieTrackingCorrespondence *next, *prev;
+
+	char name[64];  /* MAX_NAME */
+
 	MovieTrackingTrack *primary_track;
 	MovieTrackingTrack *witness_track;
 } MovieTrackingCorrespondence;
@@ -347,6 +351,7 @@ typedef struct MovieTracking {
 	MovieTrackingCamera camera;     /* camera intrinsics */
 	ListBase tracks;                /* list of tracks used for camera object */
 	ListBase plane_tracks;          /* list of plane tracks used by camera object */
+	ListBase correspondences;		/* list of correspondence for multi-view support */
 	MovieTrackingReconstruction reconstruction; /* reconstruction data for camera object */
 	MovieTrackingStabilization stabilization;   /* stabilization data */
 	MovieTrackingTrack *act_track;             /* active track */




More information about the Bf-blender-cvs mailing list