Revision: 16816
          
http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=16816
Author:   aligorith
Date:     2008-09-29 10:11:26 +0200 (Mon, 29 Sep 2008)

Log Message:
-----------
Bugfix:

Recoded pidhash's recent Pad0 (Lastview) commits (r.16802 and r.16810). It was 
causing major issues with Ortho perspective + rotating the view with the MMB. 
Setting G.vd->view to -1 was not such a valid way to do so (and also, this 
didn't play nicely with smoothview).

This feature should now work correctly, though there are still one or two 
places where it doesn't always seem totally correct yet. 
The basic idea of this feature, is that after going into camera mode (Pad0), 
pressing Pad0 again lets you go back to the view as you had it before entering 
camera mode.

Modified Paths:
--------------
    trunk/blender/source/blender/makesdna/DNA_view3d_types.h
    trunk/blender/source/blender/src/space.c
    trunk/blender/source/blender/src/toets.c
    trunk/blender/source/blender/src/view.c

Modified: trunk/blender/source/blender/makesdna/DNA_view3d_types.h
===================================================================
--- trunk/blender/source/blender/makesdna/DNA_view3d_types.h    2008-09-29 
08:00:38 UTC (rev 16815)
+++ trunk/blender/source/blender/makesdna/DNA_view3d_types.h    2008-09-29 
08:11:26 UTC (rev 16816)
@@ -147,8 +147,9 @@
 
        /* last view */
        float lviewquat[4];
-       short lpersp, pad4;
-       int pad5;
+       short lpersp, lview;
+       short lastview_set;
+       short pad5;
 } View3D;
 
 

Modified: trunk/blender/source/blender/src/space.c
===================================================================
--- trunk/blender/source/blender/src/space.c    2008-09-29 08:00:38 UTC (rev 
16815)
+++ trunk/blender/source/blender/src/space.c    2008-09-29 08:11:26 UTC (rev 
16816)
@@ -1709,7 +1709,6 @@
                                break;
                        case MIDDLEMOUSE:
                                handle_view_middlemouse();
-                               G.vd->view = -1; 
                                break;
                        case RIGHTMOUSE:
                                if((G.obedit) && (G.qual & LR_CTRLKEY)==0) {

Modified: trunk/blender/source/blender/src/toets.c
===================================================================
--- trunk/blender/source/blender/src/toets.c    2008-09-29 08:00:38 UTC (rev 
16815)
+++ trunk/blender/source/blender/src/toets.c    2008-09-29 08:11:26 UTC (rev 
16816)
@@ -289,9 +289,22 @@
                                if(G.vd->persp==V3D_PERSP) 
G.vd->persp=V3D_ORTHO;
                                else G.vd->persp=V3D_PERSP;
                        }
-                       G.vd->lpersp = G.vd->persp; 
                }
                else if(event==PAD0) {
+                       /* lastview -  */
+                       if(G.vd->lastview_set==0) {
+                               /* store settings of current view before 
allowing overwriting with camera view */
+                               QUATCOPY(G.vd->lviewquat, G.vd->viewquat);
+                               G.vd->lview= G.vd->view;
+                               G.vd->lpersp= G.vd->persp;
+                               G.vd->lastview_set= 1;
+                       }
+                       else if(G.vd->lastview_set) {
+                               /* return to settings of last view */
+                               axis_set_view(G.vd->lviewquat[0], 
G.vd->lviewquat[1], G.vd->lviewquat[2], G.vd->lviewquat[3], G.vd->lview, 
G.vd->lpersp);
+                               G.vd->lastview_set= 0;
+                       }
+                       
                        if(G.qual==LR_ALTKEY) {
                                if(oldcamera && is_an_active_object(oldcamera)) 
{
                                        G.vd->camera= oldcamera;
@@ -314,18 +327,12 @@
                                        handle_view3d_lock();
                                }
                        }
+                       
                        if(G.vd->camera==0) {
                                G.vd->camera= scene_find_camera(G.scene);
                                handle_view3d_lock();
                        }
-                       if(!G.vd->view) {
-                               QUATCOPY(G.vd->viewquat, G.vd->lviewquat);
-                               G.vd->persp = G.vd->lpersp;
-                       }
-                       else {
-                               QUATCOPY(G.vd->lviewquat, G.vd->viewquat);
-                               G.vd->lpersp = G.vd->persp;
-                       }       
+                       
                        if(G.vd->camera && (G.vd->camera != act_cam_orig)) {
                                G.vd->persp= V3D_CAMOB;
                                G.vd->view= 0;
@@ -350,8 +357,6 @@
                                        VECCOPY(G.vd->ofs, orig_ofs);
                                        G.vd->lens = orig_lens;
                                }
-                               
-                       
                        }
                }
                else if(event==PAD9) {
@@ -370,11 +375,6 @@
                                q1[1]= q1[2]= 0.0;
                                q1[3]= si;
                                QuatMul(G.vd->viewquat, G.vd->viewquat, q1);
-
-                               QUATCOPY(G.vd->lviewquat, G.vd->viewquat);
-                               G.vd->lpersp = G.vd->persp;
-
-                               G.vd->view= 0;
                        }
                        if(event==PAD2 || event==PAD8) {
                                /* horizontal axis */
@@ -389,11 +389,6 @@
                                q1[2]*= si;
                                q1[3]*= si;
                                QuatMul(G.vd->viewquat, G.vd->viewquat, q1);
-
-                               QUATCOPY(G.vd->lviewquat, G.vd->viewquat);
-                               G.vd->lpersp = G.vd->persp;
-
-                               G.vd->view= 0;
                        }
                }
 

Modified: trunk/blender/source/blender/src/view.c
===================================================================
--- trunk/blender/source/blender/src/view.c     2008-09-29 08:00:38 UTC (rev 
16815)
+++ trunk/blender/source/blender/src/view.c     2008-09-29 08:11:26 UTC (rev 
16816)
@@ -894,6 +894,11 @@
                return;
        }
        
+       /* clear lastview flag (used to return to previous view when 
+        * pressing Pad0 again after entering Camera view)
+        */
+       if (G.vd->lastview_set) G.vd->lastview_set= 0;
+       
        // dist correction from other movement devices  
        if((dz_flag)||G.vd->dist==0) {
                dz_flag = 0;


_______________________________________________
Bf-blender-cvs mailing list
Bf-blender-cvs@blender.org
http://lists.blender.org/mailman/listinfo/bf-blender-cvs

Reply via email to