[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