Index: source/blender/makesdna/DNA_scene_types.h =================================================================== --- source/blender/makesdna/DNA_scene_types.h (revision 11922) +++ source/blender/makesdna/DNA_scene_types.h (working copy) @@ -572,10 +572,12 @@ #define SCE_ADDSCENAME 1 /* sce->selectmode */ -#define SCE_SELECT_VERTEX 1 +#define SCE_SELECT_VERTEX 1 /* for mesh */ #define SCE_SELECT_EDGE 2 #define SCE_SELECT_FACE 4 +#define SCE_SELECT_CU_HANDLES_HIDE 8 /* for curve, when flagged hide handles */ + /* sce->recalc (now in use by previewrender) */ #define SCE_PRV_CHANGED 1 Index: source/blender/src/drawobject.c =================================================================== --- source/blender/src/drawobject.c (revision 11922) +++ source/blender/src/drawobject.c (working copy) @@ -1357,12 +1357,17 @@ BezTriple *bezt = &nu->bezt[i]; if(bezt->hide==0) { - view3d_project_short_clip(curarea, bezt->vec[0], s, pmat, vmat); - func(userData, nu, NULL, bezt, 0, s[0], s[1]); - view3d_project_short_clip(curarea, bezt->vec[1], s, pmat, vmat); - func(userData, nu, NULL, bezt, 1, s[0], s[1]); - view3d_project_short_clip(curarea, bezt->vec[2], s, pmat, vmat); - func(userData, nu, NULL, bezt, 2, s[0], s[1]); + if (G.scene->selectmode & SCE_SELECT_CU_HANDLES_HIDE) { + view3d_project_short_clip(curarea, bezt->vec[1], s, pmat, vmat); + func(userData, nu, NULL, bezt, 1, s[0], s[1]); + } else { + view3d_project_short_clip(curarea, bezt->vec[0], s, pmat, vmat); + func(userData, nu, NULL, bezt, 0, s[0], s[1]); + view3d_project_short_clip(curarea, bezt->vec[1], s, pmat, vmat); + func(userData, nu, NULL, bezt, 1, s[0], s[1]); + view3d_project_short_clip(curarea, bezt->vec[2], s, pmat, vmat); + func(userData, nu, NULL, bezt, 2, s[0], s[1]); + } } } } @@ -2851,9 +2856,9 @@ float *fp; unsigned int *col; int a; - - if(nu->hide) return; + if(nu->hide || (G.scene->selectmode & SCE_SELECT_CU_HANDLES_HIDE)) return; + glBegin(GL_LINES); if( (nu->type & 7)==1) { @@ -2919,9 +2924,13 @@ a= nu->pntsu; while(a--) { if(bezt->hide==0) { - if((bezt->f1 & 1)==sel) bglVertex3fv(bezt->vec[0]); - if((bezt->f2 & 1)==sel) bglVertex3fv(bezt->vec[1]); - if((bezt->f3 & 1)==sel) bglVertex3fv(bezt->vec[2]); + if (G.scene->selectmode & SCE_SELECT_CU_HANDLES_HIDE) { + if((bezt->f2 & 1)==sel) bglVertex3fv(bezt->vec[1]); + } else { + if((bezt->f1 & 1)==sel) bglVertex3fv(bezt->vec[0]); + if((bezt->f2 & 1)==sel) bglVertex3fv(bezt->vec[1]); + if((bezt->f3 & 1)==sel) bglVertex3fv(bezt->vec[2]); + } } bezt++; } Index: source/blender/src/header_view3d.c =================================================================== --- source/blender/src/header_view3d.c (revision 11922) +++ source/blender/src/header_view3d.c (working copy) @@ -5326,7 +5326,14 @@ } xco+= 20; } - + + if(G.obedit && (G.obedit->type == OB_CURVE)) { + uiBlockEndAlign(block); + uiDefIconButBitS(block, TOG, SCE_SELECT_CU_HANDLES_HIDE, B_REDR, ICON_CURVE, xco,0,XIC,YIC, &G.scene->selectmode, 1.0, 0.0, 0, 0, "Hide curve handles in 3D view"); + xco+= XIC + 20; + uiBlockEndAlign(block); + } + uiDefIconBut(block, BUT, B_VIEWRENDER, ICON_SCENE_DEHLT, xco,0,XIC,YIC, NULL, 0, 1.0, 0, 0, "Render this window (hold CTRL for anim)"); if (ob && (ob->flag & OB_POSEMODE)) {