[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [47684] trunk/blender/source/blender: Support for per-track Grease Pencil datablocks for motion tracking

Sergey Sharybin sergey.vfx at gmail.com
Sun Jun 10 17:26:51 CEST 2012


Revision: 47684
          http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=47684
Author:   nazgul
Date:     2012-06-10 15:26:50 +0000 (Sun, 10 Jun 2012)
Log Message:
-----------
Support for per-track Grease Pencil datablocks for motion tracking

Originally was needed to reach easy way of defining masks used for tracking
(do eliminate textures which doesn't belong to feature when tracking.

Implemented as alternative to GP datablock for clip and added switch between
per-clip and per-track GP datablocks -- internal limitations of GP doesn't
allow to display all GP datablocks easily.  So either you see.edit GP associated
with clip or with track.

GP strokes associated with track are relative to track's position, following
tracks during tracking and could be shared between several tracks.

Masking code presents in libmv and there's rasterizer of GP datablocks for
masks in blender's tracking module, but they still need to be glued together.

Some documentation cound be found at this page:

http://wiki.blender.org/index.php/Dev:Ref/Release_Notes/2.64/Motion_Tracker#Grease_Pencil

Modified Paths:
--------------
    trunk/blender/source/blender/blenloader/intern/readfile.c
    trunk/blender/source/blender/editors/gpencil/gpencil_buttons.c
    trunk/blender/source/blender/editors/gpencil/gpencil_edit.c
    trunk/blender/source/blender/editors/gpencil/gpencil_paint.c
    trunk/blender/source/blender/editors/space_clip/clip_draw.c
    trunk/blender/source/blender/editors/space_clip/space_clip.c
    trunk/blender/source/blender/makesdna/DNA_space_types.h
    trunk/blender/source/blender/makesdna/DNA_tracking_types.h
    trunk/blender/source/blender/makesrna/intern/rna_movieclip.c
    trunk/blender/source/blender/makesrna/intern/rna_space.c
    trunk/blender/source/blender/makesrna/intern/rna_tracking.c

Modified: trunk/blender/source/blender/blenloader/intern/readfile.c
===================================================================
--- trunk/blender/source/blender/blenloader/intern/readfile.c	2012-06-10 15:20:10 UTC (rev 47683)
+++ trunk/blender/source/blender/blenloader/intern/readfile.c	2012-06-10 15:26:50 UTC (rev 47684)
@@ -6164,17 +6164,35 @@
 	}
 }
 
+static void lib_link_movieTracks(FileData *fd, MovieClip *clip, ListBase *tracksbase)
+{
+	MovieTrackingTrack *track;
+
+	for (track = tracksbase->first; track; track = track->next) {
+		track->gpd = newlibadr_us(fd, clip->id.lib, track->gpd);
+	}
+}
+
 static void lib_link_movieclip(FileData *fd, Main *main)
 {
 	MovieClip *clip;
 	
 	for (clip = main->movieclip.first; clip; clip = clip->id.next) {
 		if (clip->id.flag & LIB_NEEDLINK) {
+			MovieTracking *tracking = &clip->tracking;
+			MovieTrackingObject *object;
+
 			if (clip->adt)
 				lib_link_animdata(fd, &clip->id, clip->adt);
 			
 			clip->gpd = newlibadr_us(fd, clip->id.lib, clip->gpd);
 			
+			lib_link_movieTracks(fd, clip, &tracking->tracks);
+
+			for (object = tracking->objects.first; object; object = object->next) {
+				lib_link_movieTracks(fd, clip, &object->tracks);
+			}
+
 			clip->id.flag -= LIB_NEEDLINK;
 		}
 	}

Modified: trunk/blender/source/blender/editors/gpencil/gpencil_buttons.c
===================================================================
--- trunk/blender/source/blender/editors/gpencil/gpencil_buttons.c	2012-06-10 15:20:10 UTC (rev 47683)
+++ trunk/blender/source/blender/editors/gpencil/gpencil_buttons.c	2012-06-10 15:26:50 UTC (rev 47684)
@@ -40,6 +40,7 @@
 
 #include "DNA_gpencil_types.h"
 #include "DNA_screen_types.h"
+#include "DNA_space_types.h"
 
 #include "BKE_context.h"
 #include "BKE_global.h"
@@ -236,6 +237,7 @@
 	PointerRNA gpd_ptr;
 	bGPDlayer *gpl;
 	uiLayout *col, *row;
+	SpaceClip *sc= CTX_wm_space_clip(C);
 	short v3d_stroke_opts = STROKE_OPTS_NORMAL;
 	const short is_v3d = CTX_wm_view3d(C) != NULL;
 	
@@ -244,6 +246,16 @@
 	
 	/* draw gpd settings first ------------------------------------- */
 	col = uiLayoutColumn(layout, 0);
+
+	if (sc) {
+		bScreen *screen = CTX_wm_screen(C);
+		PointerRNA sc_ptr;
+
+		RNA_pointer_create(&screen->id, &RNA_SpaceClipEditor, sc, &sc_ptr);
+		row = uiLayoutRow(col, 1);
+		uiItemR(row, &sc_ptr, "grease_pencil_source", UI_ITEM_R_EXPAND, NULL, ICON_NONE);
+	}
+
 	/* current Grease Pencil block */
 	/* TODO: show some info about who owns this? */
 	uiTemplateID(col, C, ctx_ptr, "grease_pencil", "GPENCIL_OT_data_add", NULL, "GPENCIL_OT_data_unlink");
@@ -281,14 +293,17 @@
 	row = uiLayoutRow(col, 1);
 	uiItemEnumR_string(row, &gpd_ptr, "draw_mode", "VIEW", NULL, ICON_NONE);
 	uiItemEnumR_string(row, &gpd_ptr, "draw_mode", "CURSOR", NULL, ICON_NONE);
-	row = uiLayoutRow(col, 1);
-	uiLayoutSetActive(row, v3d_stroke_opts);
-	uiItemEnumR_string(row, &gpd_ptr, "draw_mode", "SURFACE", NULL, ICON_NONE);
-	uiItemEnumR_string(row, &gpd_ptr, "draw_mode", "STROKE", NULL, ICON_NONE);
 
-	row = uiLayoutRow(col, 0);
-	uiLayoutSetActive(row, v3d_stroke_opts == STROKE_OPTS_V3D_ON);
-	uiItemR(row, &gpd_ptr, "use_stroke_endpoints", 0, NULL, ICON_NONE);
+	if (sc == NULL) {
+		row = uiLayoutRow(col, 1);
+		uiLayoutSetActive(row, v3d_stroke_opts);
+		uiItemEnumR_string(row, &gpd_ptr, "draw_mode", "SURFACE", NULL, ICON_NONE);
+		uiItemEnumR_string(row, &gpd_ptr, "draw_mode", "STROKE", NULL, ICON_NONE);
+
+		row = uiLayoutRow(col, 0);
+		uiLayoutSetActive(row, v3d_stroke_opts == STROKE_OPTS_V3D_ON);
+		uiItemR(row, &gpd_ptr, "use_stroke_endpoints", 0, NULL, ICON_NONE);
+	}
 }
 
 

Modified: trunk/blender/source/blender/editors/gpencil/gpencil_edit.c
===================================================================
--- trunk/blender/source/blender/editors/gpencil/gpencil_edit.c	2012-06-10 15:20:10 UTC (rev 47683)
+++ trunk/blender/source/blender/editors/gpencil/gpencil_edit.c	2012-06-10 15:26:50 UTC (rev 47684)
@@ -57,6 +57,7 @@
 #include "BKE_library.h"
 #include "BKE_object.h"
 #include "BKE_report.h"
+#include "BKE_tracking.h"
 
 
 #include "WM_api.h"
@@ -144,9 +145,23 @@
 				MovieClip *clip = ED_space_clip(sc);
 
 				if (clip) {
-					/* for now, as long as there's a clip, default to using that in Clip Editor */
-					if (ptr) RNA_id_pointer_create(&clip->id, ptr);
-					return &clip->gpd;
+					if (sc->gpencil_src == SC_GPENCIL_SRC_TRACK) {
+						MovieTrackingTrack *track = BKE_tracking_active_track(&clip->tracking);
+
+						if (!track)
+							return NULL;
+
+						if (ptr)
+							RNA_pointer_create(&clip->id, &RNA_MovieTrackingTrack, track, ptr);
+
+						return &track->gpd;
+					}
+					else {
+						if (ptr)
+							RNA_id_pointer_create(&clip->id, ptr);
+
+						return &clip->gpd;
+					}
 				}
 			}
 			break;

Modified: trunk/blender/source/blender/editors/gpencil/gpencil_paint.c
===================================================================
--- trunk/blender/source/blender/editors/gpencil/gpencil_paint.c	2012-06-10 15:20:10 UTC (rev 47683)
+++ trunk/blender/source/blender/editors/gpencil/gpencil_paint.c	2012-06-10 15:26:50 UTC (rev 47684)
@@ -44,6 +44,7 @@
 #include "BKE_context.h"
 #include "BKE_global.h"
 #include "BKE_report.h"
+#include "BKE_tracking.h"
 
 #include "DNA_object_types.h"
 #include "DNA_scene_types.h"
@@ -1125,6 +1126,15 @@
 			p->custom_color[1] = 0.0f;
 			p->custom_color[2] = 0.5f;
 			p->custom_color[3] = 0.9f;
+
+			if (sc->gpencil_src == SC_GPENCIL_SRC_TRACK) {
+				int framenr = sc->user.framenr;
+				MovieTrackingTrack *track = BKE_tracking_active_track(&sc->clip->tracking);
+				MovieTrackingMarker *marker = BKE_tracking_exact_marker(track, framenr);
+
+				p->imat[3][0] -= marker->pos[0];
+				p->imat[3][1] -= marker->pos[1];
+			}
 		}
 		break;
 

Modified: trunk/blender/source/blender/editors/space_clip/clip_draw.c
===================================================================
--- trunk/blender/source/blender/editors/space_clip/clip_draw.c	2012-06-10 15:20:10 UTC (rev 47683)
+++ trunk/blender/source/blender/editors/space_clip/clip_draw.c	2012-06-10 15:26:50 UTC (rev 47684)
@@ -1203,8 +1203,10 @@
 	int i, j, a;
 	float pos[2], tpos[2], grid[11][11][2];
 	MovieTracking *tracking = &clip->tracking;
+	bGPdata *gpd = NULL;
 	float aspy = 1.0f / tracking->camera.pixel_aspect;
 	float dx = (float)width / n, dy = (float)height / n * aspy;
+	float offsx = 0.0f, offsy = 0.0f;
 
 	if (sc->mode != SC_MODE_DISTORTION)
 		return;
@@ -1312,9 +1314,27 @@
 		}
 	}
 
-	if (sc->flag & SC_MANUAL_CALIBRATION && clip->gpd) {
-		bGPDlayer *layer = clip->gpd->layers.first;
+	if (sc->gpencil_src == SC_GPENCIL_SRC_TRACK) {
+		MovieTrackingTrack *track = BKE_tracking_active_track(&sc->clip->tracking);
 
+		if (track) {
+			int framenr = sc->user.framenr;
+			MovieTrackingMarker *marker = BKE_tracking_exact_marker(track, framenr);
+
+			offsx = marker->pos[0];
+			offsy = marker->pos[1];
+
+			gpd = track->gpd;
+		}
+
+	}
+	else {
+		gpd = clip->gpd;
+	}
+
+	if (sc->flag & SC_MANUAL_CALIBRATION && gpd) {
+		bGPDlayer *layer = gpd->layers.first;
+
 		while (layer) {
 			bGPDframe *frame = layer->frames.first;
 
@@ -1338,11 +1358,11 @@
 									float npos[2], dpos[2], len;
 									int steps;
 
-									pos[0] = stroke->points[i].x * width;
-									pos[1] = stroke->points[i].y * height * aspy;
+									pos[0] = (stroke->points[i].x + offsx) * width;
+									pos[1] = (stroke->points[i].y + offsy) * height * aspy;
 
-									npos[0] = stroke->points[i + 1].x * width;
-									npos[1] = stroke->points[i + 1].y * height * aspy;
+									npos[0] = (stroke->points[i + 1].x + offsx) * width;
+									npos[1] = (stroke->points[i + 1].y + offsy) * height * aspy;
 
 									len = len_v2v2(pos, npos);
 									steps = ceil(len / 5.0f);
@@ -1367,7 +1387,7 @@
 						}
 						else if (stroke->totpoints == 1) {
 							glBegin(GL_POINTS);
-								glVertex2f(stroke->points[0].x, stroke->points[0].y);
+								glVertex2f(stroke->points[0].x + offsx, stroke->points[0].y + offsy);
 							glEnd();
 						}
 					}
@@ -1467,6 +1487,18 @@
 		if ((sc->flag & SC_MANUAL_CALIBRATION) == 0 || sc->mode != SC_MODE_DISTORTION) {
 			glPushMatrix();
 			glMultMatrixf(sc->unistabmat);
+
+			if (sc->gpencil_src == SC_GPENCIL_SRC_TRACK) {
+				MovieTrackingTrack *track = BKE_tracking_active_track(&sc->clip->tracking);
+
+				if (track) {
+					int framenr = sc->user.framenr;
+					MovieTrackingMarker *marker = BKE_tracking_exact_marker(track, framenr);
+
+					glTranslatef(marker->pos[0], marker->pos[1], 0.0f);
+				}
+			}
+
 			draw_gpencil_2dimage(C);
 
 			glPopMatrix();

Modified: trunk/blender/source/blender/editors/space_clip/space_clip.c
===================================================================
--- trunk/blender/source/blender/editors/space_clip/space_clip.c	2012-06-10 15:20:10 UTC (rev 47683)
+++ trunk/blender/source/blender/editors/space_clip/space_clip.c	2012-06-10 15:26:50 UTC (rev 47684)
@@ -393,8 +393,11 @@
 			}
 			break;
 		case NC_SCREEN:
-			if (wmn->data == ND_ANIMPLAY) {
-				ED_area_tag_redraw(sa);
+			 switch (wmn->data) {
+				case ND_ANIMPLAY:
+				case ND_GPENCIL:
+					ED_area_tag_redraw(sa);
+					break;
 			}
 			break;
 		case NC_SPACE:

Modified: trunk/blender/source/blender/makesdna/DNA_space_types.h
===================================================================
--- trunk/blender/source/blender/makesdna/DNA_space_types.h	2012-06-10 15:20:10 UTC (rev 47683)
+++ trunk/blender/source/blender/makesdna/DNA_space_types.h	2012-06-10 15:26:50 UTC (rev 47684)
@@ -999,8 +999,11 @@
 	                                         * defined when drawing and used for mouse position calculation */
 
 	/* movie postprocessing */
-	int postproc_flag, pad2;
+	int postproc_flag;
 
+	/* grease pencil */
+	short gpencil_src, pad2;
+
 	void *draw_context;
 
 	/* dopesheet */
@@ -1068,6 +1071,12 @@
 	SC_DOPE_SORT_INVERSE    = (1 << 0),
 } eSpaceClip_Dopesheet_Flag;
 
+/* SpaceClip->gpencil_src */
+typedef enum eSpaceClip_GPencil_Source {
+	SC_GPENCIL_SRC_CLIP = 0,
+	SC_GPENCIL_SRC_TRACK = 1,
+} eSpaceClip_GPencil_Source;
+
 /* **************** SPACE DEFINES ********************* */
 
 /* headerbuttons: 450-499 */

Modified: trunk/blender/source/blender/makesdna/DNA_tracking_types.h
===================================================================
--- trunk/blender/source/blender/makesdna/DNA_tracking_types.h	2012-06-10 15:20:10 UTC (rev 47683)
+++ trunk/blender/source/blender/makesdna/DNA_tracking_types.h	2012-06-10 15:26:50 UTC (rev 47684)

@@ Diff output truncated at 10240 characters. @@



More information about the Bf-blender-cvs mailing list