[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [37374] branches/soc-2011-tomato: Camera tracking integration

Sergey Sharybin g.ulairi at gmail.com
Fri Jun 10 19:06:37 CEST 2011


Revision: 37374
          http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=37374
Author:   nazgul
Date:     2011-06-10 17:06:37 +0000 (Fri, 10 Jun 2011)
Log Message:
-----------
Camera tracking integration
===========================

- Disallow moving pattern/search area in way when marker position is
  outside of pattern area.
- MoiveClip could be set as background for 3D view.
  Added background source property to BGPic to switch between image
  and movie. Movie is a bit more complicaated entity than clip (due to
  displaying bundles, test objects and so) that's why i've sliptted
  background into two sources.
- Added Layout.template_movieclip to display general clip settings.
  Used in Footage panel of SpaceClip and background image properties
  in 3d view.
- Display bundles in 3D view as spheres. Selection is synchronized to
  markers associated with this bundle.
  Bundle can't be selected in 3D view.
- Recoded internal DNA structures, RNA and operators to match libmv entities.
  Tracking data now consists of Tracks, each tracks consists of markers
  which are associated with frame number. Markers holds position only,
  pattern and search areas settings are stored in track. Such settings should
  be unified for all markers in track and marker should hold position and
  frame number only.

Modified Paths:
--------------
    branches/soc-2011-tomato/release/scripts/startup/bl_ui/space_clip.py
    branches/soc-2011-tomato/release/scripts/startup/bl_ui/space_view3d.py
    branches/soc-2011-tomato/source/blender/blenkernel/BKE_movieclip.h
    branches/soc-2011-tomato/source/blender/blenkernel/BKE_tracking.h
    branches/soc-2011-tomato/source/blender/blenkernel/intern/anim_sys.c
    branches/soc-2011-tomato/source/blender/blenkernel/intern/movieclip.c
    branches/soc-2011-tomato/source/blender/blenkernel/intern/tracking.c
    branches/soc-2011-tomato/source/blender/blenlib/BLI_math_vector.h
    branches/soc-2011-tomato/source/blender/blenlib/intern/math_vector_inline.c
    branches/soc-2011-tomato/source/blender/blenloader/intern/readfile.c
    branches/soc-2011-tomato/source/blender/blenloader/intern/writefile.c
    branches/soc-2011-tomato/source/blender/editors/include/UI_interface.h
    branches/soc-2011-tomato/source/blender/editors/include/UI_resources.h
    branches/soc-2011-tomato/source/blender/editors/interface/resources.c
    branches/soc-2011-tomato/source/blender/editors/space_clip/clip_buttons.c
    branches/soc-2011-tomato/source/blender/editors/space_clip/clip_draw.c
    branches/soc-2011-tomato/source/blender/editors/space_clip/clip_ops.c
    branches/soc-2011-tomato/source/blender/editors/space_clip/space_clip.c
    branches/soc-2011-tomato/source/blender/editors/space_clip/tracking_ops.c
    branches/soc-2011-tomato/source/blender/editors/space_view3d/view3d_draw.c
    branches/soc-2011-tomato/source/blender/editors/transform/transform_conversions.c
    branches/soc-2011-tomato/source/blender/editors/transform/transform_generics.c
    branches/soc-2011-tomato/source/blender/makesdna/DNA_movieclip_types.h
    branches/soc-2011-tomato/source/blender/makesdna/DNA_space_types.h
    branches/soc-2011-tomato/source/blender/makesdna/DNA_tracking_types.h
    branches/soc-2011-tomato/source/blender/makesdna/DNA_userdef_types.h
    branches/soc-2011-tomato/source/blender/makesdna/DNA_view3d_types.h
    branches/soc-2011-tomato/source/blender/makesrna/intern/rna_movieclip.c
    branches/soc-2011-tomato/source/blender/makesrna/intern/rna_space.c
    branches/soc-2011-tomato/source/blender/makesrna/intern/rna_tracking.c
    branches/soc-2011-tomato/source/blender/makesrna/intern/rna_ui_api.c
    branches/soc-2011-tomato/source/blender/makesrna/intern/rna_userdef.c

Modified: branches/soc-2011-tomato/release/scripts/startup/bl_ui/space_clip.py
===================================================================
--- branches/soc-2011-tomato/release/scripts/startup/bl_ui/space_clip.py	2011-06-10 16:59:15 UTC (rev 37373)
+++ branches/soc-2011-tomato/release/scripts/startup/bl_ui/space_clip.py	2011-06-10 17:06:37 UTC (rev 37374)
@@ -92,8 +92,7 @@
         clip = sc.clip
 
         if clip:
-            layout.label(text="File Path:")
-            layout.prop(clip, "filepath", text="")
+            layout.template_movieclip(sc, "clip", sc.clip_user, compact=True)
         else:
             layout.operator('clip.open', icon='FILESEL')
 

Modified: branches/soc-2011-tomato/release/scripts/startup/bl_ui/space_view3d.py
===================================================================
--- branches/soc-2011-tomato/release/scripts/startup/bl_ui/space_view3d.py	2011-06-10 16:59:15 UTC (rev 37373)
+++ branches/soc-2011-tomato/release/scripts/startup/bl_ui/space_view3d.py	2011-06-10 17:06:37 UTC (rev 37374)
@@ -2233,8 +2233,10 @@
             box = layout.box()
             row = box.row(align=True)
             row.prop(bg, "show_expanded", text="", emboss=False)
-            if bg.image:
+            if bg.source == 'IMAGE' and bg.image:
                 row.prop(bg.image, "name", text="", emboss=False)
+            if bg.source == 'MOVIE' and bg.clip:
+                row.prop(bg.clip, "name", text="", emboss=False)
             else:
                 row.label(text="Not Set")
             row.operator("view3d.background_image_remove", text="", emboss=False, icon='X').index = i
@@ -2243,10 +2245,25 @@
 
             if bg.show_expanded:
                 row = box.row()
-                row.template_ID(bg, "image", open="image.open")
-                if (bg.image):
-                    box.template_image(bg, "image", bg.image_user, compact=True)
+                row.prop(bg, "source", expand=True)
 
+                hasbg = False
+                if bg.source == 'IMAGE':
+                    row = box.row()
+                    row.template_ID(bg, "image", open="image.open")
+                    if (bg.image):
+                        box.template_image(bg, "image", bg.image_user, compact=True)
+                        hasbg = True
+
+                elif bg.source == 'MOVIE':
+                    row = box.row()
+                    row.template_ID(bg, "clip", open="clip.open")
+
+                    if bg.clip:
+                        box.template_movieclip(bg, "clip", bg.clip_user, compact=True)
+                        hasbg = True
+
+                if hasbg:
                     box.prop(bg, "opacity", slider=True)
                     if bg.view_axis != 'CAMERA':
                         box.prop(bg, "size")

Modified: branches/soc-2011-tomato/source/blender/blenkernel/BKE_movieclip.h
===================================================================
--- branches/soc-2011-tomato/source/blender/blenkernel/BKE_movieclip.h	2011-06-10 16:59:15 UTC (rev 37373)
+++ branches/soc-2011-tomato/source/blender/blenkernel/BKE_movieclip.h	2011-06-10 17:06:37 UTC (rev 37374)
@@ -38,7 +38,7 @@
 struct Main;
 struct MovieClip;
 struct MovieClipUser;
-struct MovieTrackingMarker;
+struct MovieTrackingTrack;
 
 void free_movieclip(struct MovieClip *clip);
 void unlink_movieclip(struct Main *bmain, struct MovieClip *clip);
@@ -50,8 +50,8 @@
 int BKE_movieclip_has_frame(struct MovieClip *clip, struct MovieClipUser *user);
 void BKE_movieclip_user_set_frame(struct MovieClipUser *user, int framenr);
 
-void BKE_movieclip_select_marker(struct MovieClip *clip, struct MovieTrackingMarker *marker, int area, int extend);
-void BKE_movieclip_deselect_marker(struct MovieClip *clip, struct MovieTrackingMarker *marker, int area);
+void BKE_movieclip_select_track(struct MovieClip *clip, struct MovieTrackingTrack *track, int area, int extend);
+void BKE_movieclip_deselect_track(struct MovieClip *clip, struct MovieTrackingTrack *track, int area);
 void BKE_movieclip_set_selection(struct MovieClip *clip, int type, void *sel);
 void BKE_movieclip_last_selection(struct MovieClip *clip, int *type, void **sel);
 

Modified: branches/soc-2011-tomato/source/blender/blenkernel/BKE_tracking.h
===================================================================
--- branches/soc-2011-tomato/source/blender/blenkernel/BKE_tracking.h	2011-06-10 16:59:15 UTC (rev 37373)
+++ branches/soc-2011-tomato/source/blender/blenkernel/BKE_tracking.h	2011-06-10 17:06:37 UTC (rev 37374)
@@ -34,23 +34,31 @@
  *  \author Sergey Sharybin
  */
 
+struct MovieTrackingTrack;
 struct MovieTrackingMarker;
+struct MovieTracking;
 
-void BKE_tracking_clamp_marker(struct MovieTrackingMarker *marker, int event);
-void BKE_tracking_marker_flag(struct MovieTrackingMarker *marker, int area, int flag, int clear);
+void BKE_tracking_clamp_track(struct MovieTrackingTrack *track, int event);
+void BKE_tracking_track_flag(struct MovieTrackingTrack *track, int area, int flag, int clear);
+void BKE_tracking_insert_marker(struct MovieTrackingTrack *track, struct MovieTrackingMarker *marker);
+struct MovieTrackingMarker *BKE_tracking_get_marker(struct MovieTrackingTrack *track, int framenr);
+int BKE_tracking_has_marker(struct MovieTrackingTrack *track, int framenr);
+void BKE_tracking_free_track(struct MovieTrackingTrack *track);
+void BKE_tracking_free(struct MovieTracking *tracking);
 
-#define MARKER_SELECTED(marker) ((marker)->flag&SELECT || (marker)->pat_flag&SELECT || (marker)->search_flag&SELECT)
-#define MARKER_AREA_SELECTED(marker, area) ((area)==MARKER_AREA_POINT?(marker)->flag&SELECT : ((area)==MARKER_AREA_PAT?(marker)->pat_flag&SELECT:(marker)->search_flag&SELECT))
+#define TRACK_SELECTED(track) ((track)->flag&SELECT || (track)->pat_flag&SELECT || (track)->search_flag&SELECT)
+#define TRACK_AREA_SELECTED(track, area) ((area)==TRACK_AREA_POINT?(track)->flag&SELECT : ((area)==TRACK_AREA_PAT?(track)->pat_flag&SELECT:(track)->search_flag&SELECT))
 
 #define CLAMP_PAT_DIM		1
 #define CLAMP_PAT_POS		2
 #define CLAMP_SEARCH_DIM	3
 #define CLAMP_SEARCH_POS	4
 
-#define MARKER_AREA_NONE	-1
-#define MARKER_AREA_ALL		0
-#define MARKER_AREA_POINT	1
-#define MARKER_AREA_PAT		2
-#define MARKER_AREA_SEARCH	3
+#define TRACK_AREA_NONE	-	1
+#define TRACK_AREA_POINT	1
+#define TRACK_AREA_PAT		2
+#define TRACK_AREA_SEARCH	4
 
+#define TRACK_AREA_ALL		(TRACK_AREA_POINT|TRACK_AREA_PAT|TRACK_AREA_SEARCH)
+
 #endif

Modified: branches/soc-2011-tomato/source/blender/blenkernel/intern/anim_sys.c
===================================================================
--- branches/soc-2011-tomato/source/blender/blenkernel/intern/anim_sys.c	2011-06-10 16:59:15 UTC (rev 37373)
+++ branches/soc-2011-tomato/source/blender/blenkernel/intern/anim_sys.c	2011-06-10 17:06:37 UTC (rev 37374)
@@ -85,6 +85,7 @@
 		case ID_MA: case ID_TE: case ID_NT:
 		case ID_LA: case ID_CA: case ID_WO:
 		case ID_SCE:
+		case ID_MC:
 		{
 			return 1;
 		}
@@ -2242,6 +2243,9 @@
 	
 	/* scenes */
 	EVAL_ANIM_NODETREE_IDS(main->scene.first, Scene, ADT_RECALC_ANIM);
+
+	/* movieclips */
+	EVAL_ANIM_IDS(main->movieclip.first, ADT_RECALC_ANIM);
 }
 
 /* ***************************************** */ 

Modified: branches/soc-2011-tomato/source/blender/blenkernel/intern/movieclip.c
===================================================================
--- branches/soc-2011-tomato/source/blender/blenkernel/intern/movieclip.c	2011-06-10 16:59:15 UTC (rev 37373)
+++ branches/soc-2011-tomato/source/blender/blenkernel/intern/movieclip.c	2011-06-10 17:06:37 UTC (rev 37374)
@@ -68,6 +68,7 @@
 #include "BKE_moviecache.h"
 #include "BKE_image.h"	/* openanim */
 #include "BKE_tracking.h"
+#include "BKE_animsys.h"
 
 #include "IMB_imbuf_types.h"
 #include "IMB_imbuf.h"
@@ -343,33 +344,38 @@
 	1 - only marker
 	2 - only pattern
 	3 - only search */
-void BKE_movieclip_select_marker(MovieClip *clip, MovieTrackingMarker *marker, int area, int extend)
+void BKE_movieclip_select_track(MovieClip *clip, MovieTrackingTrack *track, int area, int extend)
 {
 	if(extend) {
-		BKE_tracking_marker_flag(marker, area, SELECT, 0);
+		if(track->bundle) track->bundle->flag|= SELECT;
+		BKE_tracking_track_flag(track, area, SELECT, 0);
 	} else {
-		MovieTrackingMarker *cur= clip->tracking.markers.first;
+		MovieTrackingTrack *cur= clip->tracking.tracks.first;
 
 		while(cur) {
-			if(cur==marker) {
-				BKE_tracking_marker_flag(cur, MARKER_AREA_ALL, SELECT, 1);
-				BKE_tracking_marker_flag(cur, area, SELECT, 0);
+			if(cur==track) {
+				if(cur->bundle) cur->bundle->flag|= SELECT;
+				BKE_tracking_track_flag(cur, TRACK_AREA_ALL, SELECT, 1);
+				BKE_tracking_track_flag(cur, area, SELECT, 0);
 			}
-			else BKE_tracking_marker_flag(cur, MARKER_AREA_ALL, SELECT, 1);
+			else {
+				if(cur->bundle) cur->bundle->flag&= ~SELECT;
+				BKE_tracking_track_flag(cur, TRACK_AREA_ALL, SELECT, 1);
+			}
 
 			cur= cur->next;
 		}
 	}
 
-	if(!MARKER_SELECTED(marker))
+	if(!TRACK_SELECTED(track))
 		BKE_movieclip_set_selection(clip, MCLIP_SEL_NONE, NULL);
 }
 
-void BKE_movieclip_deselect_marker(MovieClip *clip, MovieTrackingMarker *marker, int area)
+void BKE_movieclip_deselect_track(MovieClip *clip, MovieTrackingTrack *track, int area)
 {
-	BKE_tracking_marker_flag(marker, area, SELECT, 1);
+	BKE_tracking_track_flag(track, area, SELECT, 1);
 
-	if(!MARKER_SELECTED(marker))
+	if(!TRACK_SELECTED(track))
 		BKE_movieclip_set_selection(clip, MCLIP_SEL_NONE, NULL);
 }
 
@@ -393,7 +399,9 @@
 {
 	free_buffers(clip);
 
-	BLI_freelistN(&clip->tracking.markers);
+	if(clip->adt) BKE_free_animdata((ID *)clip);
+
+	BKE_tracking_free(&clip->tracking);
 }
 
 void unlink_movieclip(Main *bmain, MovieClip *clip)

Modified: branches/soc-2011-tomato/source/blender/blenkernel/intern/tracking.c
===================================================================
--- branches/soc-2011-tomato/source/blender/blenkernel/intern/tracking.c	2011-06-10 16:59:15 UTC (rev 37373)
+++ branches/soc-2011-tomato/source/blender/blenkernel/intern/tracking.c	2011-06-10 17:06:37 UTC (rev 37374)
@@ -36,75 +36,131 @@
 
 #include "BLI_utildefines.h"
 #include "BLI_math.h"
+#include "BLI_listbase.h"
 
 #include "BKE_tracking.h"
 
-void BKE_tracking_clamp_marker(MovieTrackingMarker *marker, int event)
+void BKE_tracking_clamp_track(MovieTrackingTrack *track, int event)
 {
 	int a;
 
 	/* sort */
 	for(a= 0; a<2; a++) {
-		if(marker->pat_min[a]>marker->pat_max[a])

@@ Diff output truncated at 10240 characters. @@



More information about the Bf-blender-cvs mailing list