[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [42652] branches/soc-2011-tomato: Object tracking: various fixes and improvements

Sergey Sharybin sergey.vfx at gmail.com
Thu Dec 15 17:10:50 CET 2011


Revision: 42652
          http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=42652
Author:   nazgul
Date:     2011-12-15 16:10:49 +0000 (Thu, 15 Dec 2011)
Log Message:
-----------
Object tracking: various fixes and improvements

- Bundles selection is now available for object's bundles
- If bundles selection wasn't changed in 3D viewport, fallback to regular
  object selection, so objects behind bundles can be selected
- Snap cursor to selection now respects object's bundle selection
- Object and rack name now can be selected from list in constraint settings
- Added preset for tracks used for object tracking

Modified Paths:
--------------
    branches/soc-2011-tomato/release/scripts/startup/bl_ui/properties_object_constraint.py
    branches/soc-2011-tomato/source/blender/blenkernel/BKE_tracking.h
    branches/soc-2011-tomato/source/blender/blenkernel/intern/tracking.c
    branches/soc-2011-tomato/source/blender/editors/object/object_constraint.c
    branches/soc-2011-tomato/source/blender/editors/space_view3d/drawobject.c
    branches/soc-2011-tomato/source/blender/editors/space_view3d/view3d_select.c
    branches/soc-2011-tomato/source/blender/editors/space_view3d/view3d_snap.c

Added Paths:
-----------
    branches/soc-2011-tomato/release/scripts/presets/tracking_track_color/object.py

Added: branches/soc-2011-tomato/release/scripts/presets/tracking_track_color/object.py
===================================================================
--- branches/soc-2011-tomato/release/scripts/presets/tracking_track_color/object.py	                        (rev 0)
+++ branches/soc-2011-tomato/release/scripts/presets/tracking_track_color/object.py	2011-12-15 16:10:49 UTC (rev 42652)
@@ -0,0 +1,5 @@
+import bpy
+track = bpy.context.edit_movieclip.tracking.tracks.active
+
+track.color = (1.0, 0.0, 1.0)
+track.use_custom_color = True

Modified: branches/soc-2011-tomato/release/scripts/startup/bl_ui/properties_object_constraint.py
===================================================================
--- branches/soc-2011-tomato/release/scripts/startup/bl_ui/properties_object_constraint.py	2011-12-15 16:10:13 UTC (rev 42651)
+++ branches/soc-2011-tomato/release/scripts/startup/bl_ui/properties_object_constraint.py	2011-12-15 16:10:49 UTC (rev 42652)
@@ -755,7 +755,16 @@
         col = layout.column()
         col.prop(con, "rotation_range", text="Pivot When")
 
+    @staticmethod
+    def _getConstraintClip(context, con):
+        if not con.use_active_clip:
+            return con.clip
+        else:
+            return context.scene.active_clip
+
     def FOLLOW_TRACK(self, context, layout, con):
+        clip = self._getConstraintClip(context, con)
+
         row = layout.row()
         row.prop(con, "use_active_clip")
         row.prop(con, "use_3d_position")
@@ -763,8 +772,9 @@
         if not con.use_active_clip:
             layout.prop(con, "clip")
 
-        layout.prop(con, "object")
-        layout.prop(con, "track")
+        if clip:
+            layout.prop_search(con, "object", clip.tracking, "objects", icon='OBJECT_DATA')
+            layout.prop_search(con, "track", clip.tracking, "tracks", icon='ANIMATION_DATA')
 
         layout.operator("clip.constraint_to_fcurve")
 
@@ -777,12 +787,16 @@
         layout.operator("clip.constraint_to_fcurve")
 
     def OBJECT_SOLVER(self, context, layout, con):
+        scene = context.scene
+        clip = self._getConstraintClip(context, con)
+
         layout.prop(con, "use_active_clip")
 
         if not con.use_active_clip:
             layout.prop(con, "clip")
 
-        layout.prop(con, "object")
+        if clip:
+            layout.prop_search(con, "object", clip.tracking, "objects", icon='OBJECT_DATA')
 
         row = layout.row()
         row.operator("constraint.objectsolver_set_inverse")

Modified: branches/soc-2011-tomato/source/blender/blenkernel/BKE_tracking.h
===================================================================
--- branches/soc-2011-tomato/source/blender/blenkernel/BKE_tracking.h	2011-12-15 16:10:13 UTC (rev 42651)
+++ branches/soc-2011-tomato/source/blender/blenkernel/BKE_tracking.h	2011-12-15 16:10:49 UTC (rev 42652)
@@ -77,7 +77,7 @@
 void BKE_track_unique_name(struct ListBase *tracksbase, struct MovieTrackingTrack *track);
 
 struct MovieTrackingTrack *BKE_tracking_named_track(struct MovieTracking *tracking, struct MovieTrackingObject *object, const char *name);
-struct MovieTrackingTrack *BKE_tracking_indexed_track(struct MovieTracking *tracking, int tracknr);
+struct MovieTrackingTrack *BKE_tracking_indexed_track(struct MovieTracking *tracking, int tracknr, struct ListBase **tracksbase_r);
 
 void BKE_tracking_camera_shift(struct MovieTracking *tracking, int winx, int winy, float *shiftx, float *shifty);
 void BKE_tracking_camera_to_blender(struct MovieTracking *tracking, struct Scene *scene, struct Camera *camera, int width, int height);

Modified: branches/soc-2011-tomato/source/blender/blenkernel/intern/tracking.c
===================================================================
--- branches/soc-2011-tomato/source/blender/blenkernel/intern/tracking.c	2011-12-15 16:10:13 UTC (rev 42651)
+++ branches/soc-2011-tomato/source/blender/blenkernel/intern/tracking.c	2011-12-15 16:10:49 UTC (rev 42652)
@@ -2257,23 +2257,34 @@
 #endif
 }
 
-MovieTrackingTrack *BKE_tracking_indexed_track(MovieTracking *tracking, int tracknr)
+MovieTrackingTrack *BKE_tracking_indexed_track(MovieTracking *tracking, int tracknr, ListBase **tracksbase_r)
 {
-	ListBase *tracksbase= &tracking->tracks;	/* XXX: need proper tracks base */
-	MovieTrackingTrack *track= tracksbase->first;
+	MovieTrackingObject *object;
 	int cur= 1;
 
-	while(track) {
-		if(track->flag&TRACK_HAS_BUNDLE) {
-			if(cur==tracknr)
-				return track;
+	object= tracking->objects.first;
+	while(object) {
+		ListBase *tracksbase= BKE_tracking_object_tracks(tracking, object);
+		MovieTrackingTrack *track= tracksbase->first;
 
-			cur++;
+		while(track) {
+			if(track->flag&TRACK_HAS_BUNDLE) {
+				if(cur==tracknr) {
+					*tracksbase_r= tracksbase;
+					return track;
+				}
+
+				cur++;
+			}
+
+			track= track->next;
 		}
 
-		track= track->next;
+		object= object->next;
 	}
 
+	*tracksbase_r= NULL;
+
 	return NULL;
 }
 

Modified: branches/soc-2011-tomato/source/blender/editors/object/object_constraint.c
===================================================================
--- branches/soc-2011-tomato/source/blender/editors/object/object_constraint.c	2011-12-15 16:10:13 UTC (rev 42651)
+++ branches/soc-2011-tomato/source/blender/editors/object/object_constraint.c	2011-12-15 16:10:49 UTC (rev 42652)
@@ -433,6 +433,12 @@
 				if((data->flag&CAMERASOLVER_ACTIVECLIP)==0 && data->clip == NULL)
 					curcon->flag |= CONSTRAINT_DISABLE;
 			}
+			else if (curcon->type == CONSTRAINT_TYPE_OBJECTSOLVER) {
+				bObjectSolverConstraint *data = curcon->data;
+
+				if((data->flag&CAMERASOLVER_ACTIVECLIP)==0 && data->clip == NULL)
+					curcon->flag |= CONSTRAINT_DISABLE;
+			}
 			
 			/* Check targets for constraints */
 			if (cti && cti->get_constraint_targets) {

Modified: branches/soc-2011-tomato/source/blender/editors/space_view3d/drawobject.c
===================================================================
--- branches/soc-2011-tomato/source/blender/editors/space_view3d/drawobject.c	2011-12-15 16:10:13 UTC (rev 42651)
+++ branches/soc-2011-tomato/source/blender/editors/space_view3d/drawobject.c	2011-12-15 16:10:49 UTC (rev 42652)
@@ -1459,13 +1459,13 @@
 }
 
 static void draw_viewport_object_reconstruction(Scene *scene, Base *base, View3D *v3d,
-			MovieClip *clip, MovieTrackingObject *tracking_object, int flag)
+			MovieClip *clip, MovieTrackingObject *tracking_object, int flag, int *global_track_index)
 {
 	MovieTracking *tracking= &clip->tracking;
 	MovieTrackingTrack *track;
 	float mat[4][4], imat[4][4];
 	unsigned char col[4], scol[4];
-	int bundlenr= 1;
+	int tracknr= *global_track_index;
 	ListBase *tracksbase= BKE_tracking_object_tracks(tracking, tracking_object);
 
 	UI_GetThemeColor4ubv(TH_TEXT, col);
@@ -1487,10 +1487,6 @@
 	else {
 		float obmat[4][4];
 
-		if(flag & DRAW_PICKING) {
-			return;
-		}
-
 		BKE_tracking_get_interpolated_camera(tracking, tracking_object, scene->r.cfra, obmat);
 
 		invert_m4_m4(imat, obmat);
@@ -1504,7 +1500,7 @@
 			continue;
 
 		if(flag&DRAW_PICKING)
-			glLoadName(base->selcol + (bundlenr<<16));
+			glLoadName(base->selcol + (tracknr<<16));
 
 		glPushMatrix();
 			glTranslatef(track->bundle_pos[0], track->bundle_pos[1], track->bundle_pos[2]);
@@ -1512,7 +1508,6 @@
 
 			if(v3d->drawtype==OB_WIRE) {
 				glDisable(GL_LIGHTING);
-				glDepthMask(0);
 
 				if(selected) {
 					if(base==BASACT) UI_ThemeColor(TH_ACTIVE);
@@ -1524,7 +1519,6 @@
 
 				drawaxes(0.05f, v3d->bundle_drawtype);
 
-				glDepthMask(1);
 				glEnable(GL_LIGHTING);
 			} else if(v3d->drawtype>OB_WIRE) {
 				if(v3d->bundle_drawtype==OB_EMPTY_SPHERE) {
@@ -1533,7 +1527,6 @@
 						if(base==BASACT) UI_ThemeColor(TH_ACTIVE);
 						else UI_ThemeColor(TH_SELECT);
 
-						glDepthMask(0);
 						glLineWidth(2.f);
 						glDisable(GL_LIGHTING);
 						glPolygonMode(GL_FRONT_AND_BACK, GL_LINE);
@@ -1543,7 +1536,6 @@
 						glPolygonMode(GL_FRONT_AND_BACK, GL_FILL);
 						glEnable(GL_LIGHTING);
 						glLineWidth(1.f);
-						glDepthMask(1);
 					}
 
 					if(track->flag&TRACK_CUSTOMCOLOR) glColor3fv(track->color);
@@ -1552,7 +1544,6 @@
 					draw_bundle_sphere();
 				} else {
 					glDisable(GL_LIGHTING);
-					glDepthMask(0);
 
 					if(selected) {
 						if(base==BASACT) UI_ThemeColor(TH_ACTIVE);
@@ -1564,7 +1555,6 @@
 
 					drawaxes(0.05f, v3d->bundle_drawtype);
 
-					glDepthMask(1);
 					glEnable(GL_LIGHTING);
 				}
 			}
@@ -1582,7 +1572,7 @@
 			view3d_cached_text_draw_add(pos, track->name, 10, V3D_CACHE_TEXT_GLOBALSPACE, tcol);
 		}
 
-		bundlenr++;
+		tracknr++;
 	}
 
 	if((flag & DRAW_PICKING)==0) {
@@ -1611,6 +1601,8 @@
 	}
 
 	glPopMatrix();
+
+	*global_track_index= tracknr;
 }
 
 static void draw_viewport_reconstruction(Scene *scene, Base *base, View3D *v3d, MovieClip *clip, int flag)
@@ -1618,6 +1610,7 @@
 	MovieTracking *tracking= &clip->tracking;
 	MovieTrackingObject *tracking_object;
 	float curcol[4];
+	int global_track_index= 1;
 
 	if((v3d->flag2&V3D_SHOW_RECONSTRUCTION)==0)
 		return;
@@ -1634,7 +1627,8 @@
 
 	tracking_object= tracking->objects.first;
 	while(tracking_object) {
-		draw_viewport_object_reconstruction(scene, base, v3d, clip, tracking_object, flag);
+		draw_viewport_object_reconstruction(scene, base, v3d, clip, tracking_object,
+					flag, &global_track_index);
 
 		tracking_object= tracking_object->next;
 	}

Modified: branches/soc-2011-tomato/source/blender/editors/space_view3d/view3d_select.c
===================================================================
--- branches/soc-2011-tomato/source/blender/editors/space_view3d/view3d_select.c	2011-12-15 16:10:13 UTC (rev 42651)
+++ branches/soc-2011-tomato/source/blender/editors/space_view3d/view3d_select.c	2011-12-15 16:10:49 UTC (rev 42652)
@@ -1320,6 +1320,25 @@
 	return basact;
 }
 
+static void deselect_all_tracks(MovieTracking *tracking)
+{
+	MovieTrackingObject *object;
+
+	object= tracking->objects.first;
+	while(object) {
+		ListBase *tracksbase= BKE_tracking_object_tracks(tracking, object);
+		MovieTrackingTrack *track= tracksbase->first;
+
+		while(track) {
+			BKE_tracking_deselect_track(track, TRACK_AREA_ALL);
+
+			track= track->next;
+		}
+
+		object= object->next;
+	}
+}
+
 /* mval is region coords */
 static int mouse_select(bContext *C, const int mval[2], short extend, short obcenter, short enumerate)
 {
@@ -1391,32 +1410,42 @@
 				if(basact->object->type==OB_CAMERA) {
 					if(BASACT==basact) {
 						int i, hitresult;
-						MovieTrackingTrack *track;
+						int changed= 0;
 

@@ Diff output truncated at 10240 characters. @@



More information about the Bf-blender-cvs mailing list