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. @@
_______________________________________________
Bf-blender-cvs mailing list
[email protected]
http://lists.blender.org/mailman/listinfo/bf-blender-cvs

Reply via email to