patch 5341 by Juho
authorTon Roosendaal <ton@blender.org>
Fri, 23 Mar 2007 13:12:11 +0000 (13:12 +0000)
committerTon Roosendaal <ton@blender.org>
Fri, 23 Mar 2007 13:12:11 +0000 (13:12 +0000)
This adds option to show camera angle instead of camera lens value.
(Complete revised patch...)

source/blender/blenkernel/intern/object.c
source/blender/blenloader/intern/readfile.c
source/blender/makesdna/DNA_camera_types.h
source/blender/python/api2_2x/Camera.c
source/blender/src/buttons_editing.c

index 742b417b154fb244aa54e9739c9a31c030b79c1d..4d747e3c9423251fc27c734e2962dd780ec5dbc9 100644 (file)
@@ -496,6 +496,7 @@ void *add_camera(char *name)
        cam=  alloc_libblock(&G.main->camera, ID_CA, name);
 
        cam->lens= 35.0f;
+       cam->angle= 49.14f;
        cam->clipsta= 0.1f;
        cam->clipend= 100.0f;
        cam->drawsize= 0.5f;
@@ -2059,5 +2060,3 @@ void object_handle_update(Object *ob)
                // printf("set proxy pointer for later group stuff %s\n", ob->id.name);
        }
 }
-
-
index 9aebcd7511630eb232497dcc9ce20736df3a1cc2..5a5c4ab5591942e2e05247e0353e7cad08b5483d 100644 (file)
@@ -6368,6 +6368,14 @@ static void do_versions(FileData *fd, Library *lib, Main *main)
                        }
                }
        }
+       if(main->versionfile <= 243) {
+               Camera *cam = main->camera.first;
+               
+               for(; cam; cam= cam->id.next) {
+                       cam->angle= 360.0f * atan(16.0f/cam->lens) / M_PI;
+                       printf("cam angle %f lens %f\n", cam->angle, cam->lens);
+               }
+       }
 
        /* WATCH IT!!!: pointers from libdata have not been converted yet here! */
        /* WATCH IT 2!: Userdef struct init has to be in src/usiblender.c! */
index 8bf9d951f80f562402cf9b8139c63aeaccd4bb87..f25d8fd641293c1e50fc10124cb539915f2bc665 100644 (file)
@@ -47,7 +47,7 @@ typedef struct Camera {
        ID id;
        
        short type, flag;
-       float passepartalpha, pad1;
+       float passepartalpha, angle;
        float clipsta, clipend;
        float lens, ortho_scale, drawsize;
        float shiftx, shifty;
@@ -76,6 +76,7 @@ typedef struct Camera {
 #define CAM_SHOWPASSEPARTOUT   4
 #define CAM_SHOWTITLESAFE      8
 #define CAM_SHOWNAME           16
+#define CAM_ANGLETOGGLE                32
 
 /* yafray: dof sampling switch */
 #define CAM_YF_NO_QMC  512
@@ -86,4 +87,3 @@ typedef struct Camera {
 #endif
 
 #endif
-
index 04c94ef5dba1c0e0499ec182be00ffc4cd58773a..f77499b6c0339643c1f80aec682b248547beb195 100644 (file)
@@ -925,7 +925,11 @@ static PyGetSetDef BPy_Camera_getseters[] = {
         (getter)getFlagAttr, (setter)setFlagAttr,
         "toggle the passPartOut display flag",
         (void *)CAM_SHOWPASSEPARTOUT},
-       {NULL,NULL,NULL,NULL,NULL}  /* Sentinel */
+       {"angleToggle",
+        (getter)getFlagAttr, (setter)setFlagAttr,
+        "toggle the camera input unit flag",
+        (void *)CAM_ANGLETOGGLE},
+       {NULL,NULL,NULL,NULL}  /* Sentinel */
 };
 
 
index 6d6875e23d7b866b4bfbb092a427c42515223bbb..62e831a007ba64da6a3f2d4f0d33aacddcbcbdb2 100644 (file)
@@ -2969,10 +2969,40 @@ static void editing_panel_curve_type(Object *ob, Curve *cu)
 
 /* *************************** CAMERA ******************************** */
 
+/* callback to handle angle to lens conversion */
+static void do_angletolensconversion_cb(void *lens1, void *angle1) 
+{
+       float *lens= (float *)lens1;
+       float *angle= (float *)angle1;
+       float anglevalue= *angle;
+       
+       if(lens) {
+               *lens= 16.0f / tan(M_PI*anglevalue/360.0f);
+       } 
+
+       allqueue(REDRAWVIEW3D, 0);
+}
+
+/* callback to handle lens to angle conversion */
+static void do_lenstoangleconversion_cb(void *lens1, void *angle1) 
+{
+       float *lens= (float *)lens1;
+       float *angle= (float *)angle1;
+       float lensvalue= *lens;
+       
+       if(lens) {
+               *angle= 360.0f * atan(16.0f/lensvalue) / M_PI;
+               printf("cam angle %f lens %f\n", *angle, *lens);
+
+       } 
+
+       allqueue(REDRAWVIEW3D, 0);
+}
 
 static void editing_panel_camera_type(Object *ob, Camera *cam)
 {
        uiBlock *block;
+       uiBut *but;
        float grid=0.0;
 
        if(G.vd) grid= G.vd->grid;
@@ -2987,8 +3017,19 @@ static void editing_panel_camera_type(Object *ob, Camera *cam)
                uiDefButF(block, NUM,REDRAWVIEW3D, "Scale:",
                                  10, 160, 150, 20, &cam->ortho_scale, 0.01, 1000.0, 50, 0, "Specify the ortho scaling of the used camera");
        } else {
-               uiDefButF(block, NUM,REDRAWVIEW3D, "Lens:",
-                                 10, 160, 150, 20, &cam->lens, 1.0, 250.0, 100, 0, "Specify the lens of the camera");
+               if(cam->flag & CAM_ANGLETOGGLE) {
+                       but= uiDefButF(block, NUM,REDRAWVIEW3D, "Lens:",
+                                         10, 160, 130, 20, &cam->angle, 1.0, 250.0, 100, 0, "Specify the lens of the camera in degrees");              
+                       uiButSetFunc(but,do_angletolensconversion_cb, &cam->lens, &cam->angle);
+               }
+               else {
+                       but= uiDefButF(block, NUM,REDRAWVIEW3D, "Lens:",
+                                         10, 160, 130, 20, &cam->lens, 1.0, 250.0, 100, 0, "Specify the lens of the camera");
+                       uiButSetFunc(but,do_lenstoangleconversion_cb, &cam->lens, &cam->angle);
+               }
+               
+               uiDefButS(block, TOG|BIT|5, B_REDR, "D",
+                       140, 160, 20, 20, &cam->flag, 0, 0, 0, 0, "Use degree as the unit of the camera lens");
        }
 
 /* qdn: focal dist. param. from yafray now enabled for Blender as well, to use with defocus composit node */