From dd409399ec1db31589fede54dc89727d4a1bcaf0 Mon Sep 17 00:00:00 2001 From: Matt Ebb Date: Thu, 27 Oct 2005 11:28:43 +0000 Subject: [PATCH] Camera visualisation changes and features (from tuho) * Made the in-camera view dashed border lines less jarring and disturbing. We will give it some testing here, feedback is welcome. * Showing the title safe zone is now an option in the camera edit buttons. It's not very useful if you're not making stuff for video/broadcast so you can turn it off. * Passepartout is now a flag per camera, rather than per scene. It never really belonged in the render buttons or as Scene data, though it could be up for debate whether it's better as camera data or view data (i.e. in the view properties panel). Old files get converted over nicely with this so if you had passepartout on before, it stays on the cameras. * Added an option to show the current camera's name at the bottom of the in-camera view, to help keep track of which one you're seeing when using multiple cameras. * In the 3D View (non-camera view) the active camera is drawn with a solid line as before, while non-active cameras are drawn with a dashed line, to help visualise which one is active. --- source/blender/blenkernel/intern/object.c | 1 + source/blender/blenloader/intern/readfile.c | 18 +++++- source/blender/makesdna/DNA_camera_types.h | 6 +- source/blender/src/buttons_editing.c | 48 ++++++++++----- source/blender/src/buttons_scene.c | 1 - source/blender/src/drawobject.c | 7 +++ source/blender/src/drawview.c | 67 +++++++++++++-------- 7 files changed, 106 insertions(+), 42 deletions(-) diff --git a/source/blender/blenkernel/intern/object.c b/source/blender/blenkernel/intern/object.c index 6bdf6a7faa5..0cc09f9fac9 100644 --- a/source/blender/blenkernel/intern/object.c +++ b/source/blender/blenkernel/intern/object.c @@ -447,6 +447,7 @@ void *add_camera() cam->clipend= 100.0f; cam->drawsize= 0.5f; cam->ortho_scale= 6.0; + cam->flag |= CAM_SHOWTITLESAFE; return cam; } diff --git a/source/blender/blenloader/intern/readfile.c b/source/blender/blenloader/intern/readfile.c index 9fddd4212ea..7634ec5559c 100644 --- a/source/blender/blenloader/intern/readfile.c +++ b/source/blender/blenloader/intern/readfile.c @@ -4989,6 +4989,8 @@ static void do_versions(FileData *fd, Library *lib, Main *main) } if(main->versionfile <= 239) { Object *ob; + Scene *sce= main->scene.first; + Camera *cam= main->camera.first; /* deformflag is local in modifier now */ for(ob=main->object.first; ob; ob= ob->id.next) { @@ -5004,7 +5006,21 @@ static void do_versions(FileData *fd, Library *lib, Main *main) } } } - } + } + + while(sce) { + while(cam) { + /* convert the passepartout scene flag to a camera flag */ + if(sce->r.scemode & R_PASSEPARTOUT) + cam->flag |= CAM_SHOWPASSEPARTOUT; + + /* make sure old cameras have title safe on */ + if (!(cam->flag & CAM_SHOWTITLESAFE)) + cam->flag |= CAM_SHOWTITLESAFE; + cam= cam->id.next; + } + sce= sce->id.next; + } } /* WATCH IT!!!: pointers from libdata have not been converted yet here! */ diff --git a/source/blender/makesdna/DNA_camera_types.h b/source/blender/makesdna/DNA_camera_types.h index 2041aae3429..cc7ec27f815 100644 --- a/source/blender/makesdna/DNA_camera_types.h +++ b/source/blender/makesdna/DNA_camera_types.h @@ -69,8 +69,12 @@ typedef struct Camera { /* flag */ #define CAM_SHOWLIMITS 1 #define CAM_SHOWMIST 2 +#define CAM_SHOWPASSEPARTOUT 4 +#define CAM_SHOWTITLESAFE 8 +#define CAM_SHOWNAME 16 + /* yafray: dof sampling switch */ -#define CAM_YF_NO_QMC 4 +#define CAM_YF_NO_QMC 512 #ifdef __cplusplus diff --git a/source/blender/src/buttons_editing.c b/source/blender/src/buttons_editing.c index 5d4f0ad3dde..cc3aea42238 100644 --- a/source/blender/src/buttons_editing.c +++ b/source/blender/src/buttons_editing.c @@ -2261,23 +2261,43 @@ static void editing_panel_camera_type(Object *ob, Camera *cam) block= uiNewBlock(&curarea->uiblocks, "editing_panel_camera_type", UI_EMBOSS, UI_HELV, curarea->win); if(uiNewPanel(curarea, block, "Camera", "Editing", 320, 0, 318, 204)==0) return; - if(cam->type==CAM_ORTHO) - uiDefButF(block, NUM,REDRAWVIEW3D, "Scale:", 470,178,160,20, &cam->ortho_scale, 0.01, 1000.0, 50, 0, "Specify the ortho scaling of the used camera"); - else - uiDefButF(block, NUM,REDRAWVIEW3D, "Lens:", 470,178,160,20, &cam->lens, 1.0, 250.0, 100, 0, "Specify the lens of the camera"); +if(cam->type==CAM_ORTHO) { + uiDefButF(block, NUM,REDRAWVIEW3D, "Scale:", + 0, 145, 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:", + 0, 145, 150, 20, &cam->lens, 1.0, 250.0, 100, 0, "Specify the lens of the camera"); + } + + uiDefButS(block, TOG, REDRAWVIEW3D, "Orthographic", + 0, 120, 150, 20, &cam->type, 0, 0, 0, 0, "Render orthogonally"); + + uiDefBut(block, LABEL, 0, "Clipping:", 0, 90, 150, 20, 0, 0.0, 0.0, 0, 0, ""); + + uiBlockBeginAlign(block); + uiDefButF(block, NUM,REDRAWVIEW3D, "Start:", + 0, 70, 150, 20, &cam->clipsta, 0.001*grid, 100.0*grid, 10, 0, "Specify the startvalue of the the field of view"); + uiDefButF(block, NUM,REDRAWVIEW3D, "End:", + 0, 50, 150, 20, &cam->clipend, 1.0, 5000.0*grid, 100, 0, "Specify the endvalue of the the field of view"); + uiBlockEndAlign(block); + + uiDefBut(block, LABEL, 0, "Show:", 160, 155, 150, 20, 0, 0.0, 0.0, 0, 0, ""); uiBlockBeginAlign(block); - uiDefButF(block, NUM,REDRAWVIEW3D, "ClipSta:", 470,147,160,20, &cam->clipsta, 0.001*grid, 100.0*grid, 10, 0, "Specify the startvalue of the the field of view"); - uiDefButF(block, NUM,REDRAWVIEW3D, "ClipEnd:", 470,125,160,20, &cam->clipend, 1.0, 5000.0*grid, 100, 0, "Specify the endvalue of the the field of view"); - uiBlockEndAlign(block); - - uiDefButF(block, NUM,REDRAWVIEW3D, "DrawSize:", 470,90,160,20, &cam->drawsize, 0.1*grid, 10.0, 10, 0, "Specify the drawsize of the camera"); - - uiDefButS(block, TOG, REDRAWVIEW3D, "Ortho", 470,29,61,60, &cam->type, 0, 0, 0, 0, "Render orthogonally"); - uiBlockBeginAlign(block); - uiDefButBitS(block, TOG, CAM_SHOWLIMITS, REDRAWVIEW3D, "ShowLimits", 533,59,97,30, &cam->flag, 0, 0, 0, 0, "Draw the field of view"); - uiDefButBitS(block, TOG, CAM_SHOWMIST, REDRAWVIEW3D, "Show Mist", 533,29,97,30, &cam->flag, 0, 0, 0, 0, "Draw a line that indicates the mist area"); + uiDefButS(block, TOG|BIT|0,REDRAWVIEW3D, "Limits", + 160, 135, 150, 20, &cam->flag, 0, 0, 0, 0, "Draw the field of view"); + uiDefButS(block, TOG|BIT|1,REDRAWVIEW3D, "Mist", + 160, 115, 150, 20, &cam->flag, 0, 0, 0, 0, "Draw a line that indicates the mist area"); + uiDefButS(block, TOG|BIT|2,REDRAWVIEW3D, "Passepartout", + 160, 95, 150, 20, &cam->flag, 0, 0, 0, 0, "Draw a darkened passepartout over the off-screen area in camera view"); + uiDefButS(block, TOG|BIT|3,REDRAWVIEW3D, "Title Safe", + 160, 75, 150, 20, &cam->flag, 0, 0, 0, 0, "Draw a the title safe zone in camera view"); + uiDefButS(block, TOG|BIT|4,REDRAWVIEW3D, "Name", + 160, 55, 150, 20, &cam->flag, 0, 0, 0, 0, "Draw the active camera's name in camera view"); uiBlockEndAlign(block); + + uiDefButF(block, NUM,REDRAWVIEW3D, "Size:", + 160, 30, 150, 20, &cam->drawsize, 0.1*grid, 10.0, 10, 0, "Specify the drawsize of the camera"); } /* yafray: extra camera panel to set Depth-of-Field parameters */ diff --git a/source/blender/src/buttons_scene.c b/source/blender/src/buttons_scene.c index 01628cfeb1d..e9e8d2fb64a 100644 --- a/source/blender/src/buttons_scene.c +++ b/source/blender/src/buttons_scene.c @@ -1042,7 +1042,6 @@ static void render_panel_output(void) uiBlockEndAlign(block); uiBlockBeginAlign(block); - uiDefButBitS(block, TOG, R_PASSEPARTOUT, REDRAWVIEW3D, "Passepartout", 72, 30, 122, 20, &G.scene->r.scemode, 0.0, 0.0, 0, 0, "Draws darkened passepartout in camera view"); uiDefButS(block, ROW, B_REDR, "DispWin", 72, 10, 60, 20, &G.displaymode, 0.0, (float)R_DISPLAYWIN, 0, 0, "Sets render output to display in a seperate window"); uiDefButS(block, ROW, B_REDR, "DispView", 134, 10, 60, 20, &G.displaymode, 0.0, (float)R_DISPLAYVIEW, 0, 0, "Sets render output to display in 3D view"); uiBlockEndAlign(block); diff --git a/source/blender/src/drawobject.c b/source/blender/src/drawobject.c index 85c6eecbd4d..8933c2d7206 100644 --- a/source/blender/src/drawobject.c +++ b/source/blender/src/drawobject.c @@ -715,12 +715,16 @@ void drawcamera(Object *ob) vec[3][0]= -facx; vec[3][1]= -facy; vec[3][2]= depth; vec[4][0]= -facx; vec[4][1]= facy; vec[4][2]= depth; + /* draw inactive cameras with dashed lines */ + if (ob != G.vd->camera) setlinestyle(3); + glBegin(GL_LINE_LOOP); glVertex3fv(vec[1]); glVertex3fv(vec[2]); glVertex3fv(vec[3]); glVertex3fv(vec[4]); glEnd(); + if(G.vd->persp>=2 && ob==G.vd->camera) return; @@ -732,6 +736,9 @@ void drawcamera(Object *ob) glVertex3fv(vec[0]); glVertex3fv(vec[3]); glEnd(); + + /* make sure it's solid line again */ + setlinestyle(0); /* arrow on top */ diff --git a/source/blender/src/drawview.c b/source/blender/src/drawview.c index 390f8366b88..0902d87cce3 100644 --- a/source/blender/src/drawview.c +++ b/source/blender/src/drawview.c @@ -56,6 +56,7 @@ #include "DNA_action_types.h" #include "DNA_armature_types.h" +#include "DNA_camera_types.h" #include "DNA_constraint_types.h" #include "DNA_curve_types.h" #include "DNA_group_types.h" @@ -903,10 +904,15 @@ void view3d_set_1_to_1_viewborder(View3D *v3d) static void drawviewborder(void) { + extern void gl_round_box(int mode, float minx, float miny, float maxx, float maxy, float rad); // interface_panel.c float fac, a; float x1, x2, y1, y2; float x3, y3, x4, y4; rcti viewborder; + Camera *ca; + + ca = G.scene->camera->data; + if (ca==NULL) return; calc_viewborder(G.vd, &viewborder); x1= viewborder.xmin; @@ -915,7 +921,7 @@ static void drawviewborder(void) y2= viewborder.ymax; /* passepartout, in color of backdrop minus 50 */ - if(G.scene->r.scemode & R_PASSEPARTOUT) { + if (ca->flag & CAM_SHOWPASSEPARTOUT) { glBlendFunc( GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA ); glEnable(GL_BLEND); glColor4ub(0, 0, 0, 50); @@ -930,14 +936,26 @@ static void drawviewborder(void) } glDisable(GL_BLEND); } - /* edge */ - setlinestyle(3); - cpack(0); - glPolygonMode(GL_FRONT_AND_BACK, GL_LINE); - glRectf(x1+1, y1-1, x2+1, y2-1); - cpack(0xFFFFFF); - glRectf(x1, y1, x2, y2); + /* edge */ + glPolygonMode(GL_FRONT_AND_BACK, GL_LINE); + + setlinestyle(0); + BIF_ThemeColor(TH_BACK); + glRectf(x1, y1, x2, y2); + + setlinestyle(3); + BIF_ThemeColor(TH_WIRE); + glRectf(x1, y1, x2, y2); + + + /* camera name */ + if (ca->flag & CAM_SHOWNAME) { + glRasterPos2f(x1, y1-15); + + BMF_DrawString(G.font, G.scene->camera->id.name+2); + } + /* border */ if(G.scene->r.mode & R_BORDER) { @@ -948,29 +966,28 @@ static void drawviewborder(void) x4= x1+ G.scene->r.border.xmax*(x2-x1); y4= y1+ G.scene->r.border.ymax*(y2-y1); - glRectf(x3+1, y3-1, x4+1, y4-1); - cpack(0x4040FF); glRectf(x3, y3, x4, y4); } /* safety border */ - - fac= 0.1; + if (ca->flag & CAM_SHOWTITLESAFE) { + fac= 0.1; + + a= fac*(x2-x1); + x1+= a; + x2-= a; + + a= fac*(y2-y1); + y1+= a; + y2-= a; + + BIF_ThemeColorBlendShade(TH_WIRE, TH_BACK, 0.25, 0); + + uiSetRoundBox(15); + gl_round_box(GL_LINE_LOOP, x1, y1, x2, y2, 12.0); + } - a= fac*(x2-x1); - x1+= a; - x2-= a; - - a= fac*(y2-y1); - y1+= a; - y2-= a; - - cpack(0); - glRectf(x1+1, y1-1, x2+1, y2-1); - cpack(0xFFFFFF); - glRectf(x1, y1, x2, y2); - setlinestyle(0); glPolygonMode(GL_FRONT_AND_BACK, GL_FILL);