Revision: 38529
          
http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=38529
Author:   nazgul
Date:     2011-07-20 09:16:26 +0000 (Wed, 20 Jul 2011)
Log Message:
-----------
Camera tracking integration
===========================

- Fixed bug with bundle getting selected when clicking on camera.
- Bundles are now low-poly.
- Tweaked "Snap Cursor To Active" operator:
  If active object is camera and there's bundles wisible in viewport,
  snapping would happen to midpoint of selected bundles.

Modified Paths:
--------------
    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

Modified: 
branches/soc-2011-tomato/source/blender/editors/space_view3d/drawobject.c
===================================================================
--- branches/soc-2011-tomato/source/blender/editors/space_view3d/drawobject.c   
2011-07-20 08:10:01 UTC (rev 38528)
+++ branches/soc-2011-tomato/source/blender/editors/space_view3d/drawobject.c   
2011-07-20 09:16:26 UTC (rev 38529)
@@ -1391,7 +1391,7 @@
                qobj= gluNewQuadric();
                gluQuadricDrawStyle(qobj, GLU_FILL);
                glShadeModel(GL_SMOOTH);
-               gluSphere(qobj, 0.05, 16, 16);
+               gluSphere(qobj, 0.05, 8, 8);
                glShadeModel(GL_FLAT);
                gluDeleteQuadric(qobj);
 
@@ -1415,13 +1415,13 @@
 
                qobj= gluNewQuadric();
                gluQuadricDrawStyle(qobj, GLU_SILHOUETTE);
-               gluDisk(qobj, 0.0,  0.05, 16, 1);
+               gluDisk(qobj, 0.0,  0.05, 8, 1);
 
                glRotatef(90, 0, 1, 0);
-               gluDisk(qobj, 0.0,  0.05, 16, 1);
+               gluDisk(qobj, 0.0,  0.05, 8, 1);
 
                glRotatef(90, 1, 0, 0);
-               gluDisk(qobj, 0.0,  0.05, 16, 1);
+               gluDisk(qobj, 0.0,  0.05, 8, 1);
 
                gluDeleteQuadric(qobj);
 
@@ -1482,8 +1482,11 @@
                                glDisable(GL_LIGHTING);
                                glDepthMask(0);
 
-                               if(TRACK_SELECTED(track)) 
UI_ThemeColor(TH_SELECT);
-                               else UI_ThemeColor(TH_WIRE);
+                               if(TRACK_SELECTED(track)) {
+                                       if(base==BASACT) 
UI_ThemeColor(TH_ACTIVE);
+                                       else UI_ThemeColor(TH_SELECT);
+                               } else UI_ThemeColor(TH_WIRE);
+
                                draw_bundle_outline();
 
                                glDepthMask(1);
@@ -1491,7 +1494,8 @@
                        } else if(v3d->drawtype>OB_WIRE) {
                                /* selection outline */
                                if(TRACK_SELECTED(track)) {
-                                       UI_ThemeColor(TH_SELECT);
+                                       if(base==BASACT) 
UI_ThemeColor(TH_ACTIVE);
+                                       else UI_ThemeColor(TH_SELECT);
 
                                        glDepthMask(0);
                                        glLineWidth(2.f);
@@ -1555,6 +1559,9 @@
        glDisable(GL_LIGHTING);
 
        glColor4fv(curcol);
+
+       if(flag&DRAW_PICKING)
+               glLoadName(base->selcol);
 }
 
 /* flag similar to draw_object() */

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-07-20 08:10:01 UTC (rev 38528)
+++ 
branches/soc-2011-tomato/source/blender/editors/space_view3d/view3d_select.c    
    2011-07-20 09:16:26 UTC (rev 38529)
@@ -1282,33 +1282,37 @@
                        }
                        
                        if(has_bones && basact) {
-                               int is_cam= basact->object->type==OB_CAMERA;
+                               if(basact->object->type==OB_CAMERA) {
+                                       if(BASACT==basact) {
+                                               int i, hitresult;
+                                               MovieTrackingTrack *track;
 
-                               if(is_cam) {
-                                       int i, hitresult;
-                                       MovieTrackingTrack *track;
+                                               for (i=0; i< hits; i++) {
+                                                       hitresult= 
buffer[3+(i*4)];
 
-                                       for (i=0; i< hits; i++) {
-                                               hitresult= buffer[3+(i*4)];
+                                                       /* if there's bundles 
in buffer select bundles first,
+                                                          so non-camera 
elements should be ignored in buffer */
+                                                       if(basact->selcol != 
(hitresult & 0xFFFF))
+                                                               continue;
 
-                                               /* if there's bundles in buffer 
select bundles first,
-                                                  so non-camera elements 
should be ignored in buffer */
-                                               if(basact->selcol != (hitresult 
& 0xFFFF))
-                                                       continue;
+                                                       /* index of bundle is 
1<<16-based. if there's no "bone" index
+                                                          in hight word, this 
buffer value belongs to camera,. not to bundle */
+                                                       if(buffer[4*i+3] & 
0xFFFF0000) {
+                                                               track= 
BKE_tracking_indexed_bundle(&scene->clip->tracking, hitresult >> 16);
 
-                                               /* index of bundle is 
1<<16-based. if there's no "bone" index
-                                                  in hight word, this buffer 
value belongs to camera,. not to bundle */
-                                               if(buffer[4*i+3] & 0xFFFF0000) {
-                                                       track= 
BKE_tracking_indexed_bundle(&scene->clip->tracking, hitresult >> 16);
-                                                       
BKE_movieclip_select_track(scene->clip, track, TRACK_AREA_ALL, extend);
+                                                               
if(TRACK_SELECTED(track) && extend) BKE_movieclip_deselect_track(scene->clip, 
track, TRACK_AREA_ALL);
+                                                               else 
BKE_movieclip_select_track(scene->clip, track, TRACK_AREA_ALL, extend);
 
-                                                       basact->flag|= SELECT;
-                                                       basact->object->flag= 
basact->flag;
+                                                               basact->flag|= 
SELECT;
+                                                               
basact->object->flag= basact->flag;
 
-                                                       retval= 1;
-                                                       
WM_event_add_notifier(C, NC_MOVIECLIP|ND_SELECT, basact->object);
+                                                               retval= 1;
 
-                                                       break;
+                                                               
WM_event_add_notifier(C, NC_MOVIECLIP|ND_SELECT, track);
+                                                               
WM_event_add_notifier(C, NC_SCENE|ND_OB_SELECT, scene);
+
+                                                               break;
+                                                       }
                                                }
                                        }
                                }
@@ -1331,7 +1335,7 @@
 
                                }
                                /* prevent bone selecting to pass on to object 
selecting */
-                               if(!is_cam && basact==BASACT)
+                               if(basact==BASACT)
                                        basact= NULL;
                        }
                }

Modified: 
branches/soc-2011-tomato/source/blender/editors/space_view3d/view3d_snap.c
===================================================================
--- branches/soc-2011-tomato/source/blender/editors/space_view3d/view3d_snap.c  
2011-07-20 08:10:01 UTC (rev 38528)
+++ branches/soc-2011-tomato/source/blender/editors/space_view3d/view3d_snap.c  
2011-07-20 09:16:26 UTC (rev 38529)
@@ -57,6 +57,7 @@
 #include "BKE_lattice.h"
 #include "BKE_main.h"
 #include "BKE_object.h"
+#include "BKE_tracking.h"
 
 #include "WM_api.h"
 #include "WM_types.h"
@@ -852,6 +853,32 @@
 
 /* ********************************************** */
 
+static void snap_to_bundle(Scene *scene, float *curs)
+{
+       MovieTrackingTrack *track;
+       int ok= 0;
+       float min[3], max[3], mat[4][4], pos[3];
+
+       BKE_get_tracking_mat(scene, mat);
+
+       INIT_MINMAX(min, max);
+
+       track= scene->clip->tracking.tracks.first;
+       while(track) {
+               if(track->flag&TRACK_HAS_BUNDLE && TRACK_SELECTED(track)) {
+                       ok= 1;
+                       mul_v3_m4v3(pos, mat, track->bundle_pos);
+                       DO_MINMAX(pos, min, max);
+               }
+
+               track= track->next;
+       }
+
+       if(ok) {
+               interp_v3_v3v3(curs, min, max, 0.5);
+       }
+}
+
 static int snap_curs_to_active(bContext *C, wmOperator *UNUSED(op))
 {
        Object *obedit= CTX_data_edit_object(C);
@@ -878,6 +905,14 @@
        else {
                if (obact) {
                        VECCOPY(curs, obact->obmat[3]);
+
+                       /* special case for camera -- snap to bundles */
+                       if(obact->type==OB_CAMERA) {
+                               /* snap to bundles should happen only when 
bundles are visible */
+                               if(scene->clip && 
v3d->flag2&V3D_SHOW_RECONSTRUCTION) {
+                                       snap_to_bundle(scene, curs);
+                               }
+                       }
                }
        }
        

_______________________________________________
Bf-blender-cvs mailing list
[email protected]
http://lists.blender.org/mailman/listinfo/bf-blender-cvs

Reply via email to