option to have the view controls apply to the camera view (and camera object).
[blender.git] / source / blender / editors / space_view3d / view3d_view.c
index 5c54c32236b7483cc370aa9dc14cfe41258f418a..82945b425cfaa0d18823ef6b690c6d36e2159c4f 100644 (file)
@@ -161,7 +161,19 @@ void smooth_view(bContext *C, View3D *v3d, ARegion *ar, Object *oldcamera, Objec
        sms.new_dist= rv3d->dist;
        sms.new_lens= v3d->lens;
        sms.to_camera= 0;
-       
+
+       /* note on camera locking, this is a little confusing but works ok.
+        * we may be changing the view 'as if' there is no active camera, but infact
+        * there is an active camera which is locked to the view.
+        *
+        * In the case where smooth view is moving _to_ a camera we dont want that
+        * camera to be moved or changed, so only when the camera is not being set should
+        * we allow camera option locking to initialize the view settings from the camera.
+        */
+       if(camera == NULL && oldcamera == NULL) {
+               ED_view3d_camera_lock_init(v3d, rv3d);
+       }
+
        /* store the options we want to end with */
        if(ofs) copy_v3_v3(sms.new_ofs, ofs);
        if(quat) copy_qt_qt(sms.new_quat, quat);
@@ -325,6 +337,8 @@ static int view3d_smoothview_invoke(bContext *C, wmOperator *UNUSED(op), wmEvent
                
                rv3d->dist = sms->new_dist * step + sms->orig_dist*step_inv;
                v3d->lens = sms->new_lens * step + sms->orig_lens*step_inv;
+
+               ED_view3d_camera_lock_sync(v3d, rv3d);
        }
        
        if(rv3d->viewlock & RV3D_BOXVIEW)