From 6b45d94c9965daecda970322548c550b7f2ef3c0 Mon Sep 17 00:00:00 2001 From: Campbell Barton Date: Wed, 25 Aug 2010 00:58:15 +0000 Subject: bugfix [#23487] Lasso select does not update selected object count --- source/blender/editors/space_view3d/view3d_select.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) (limited to 'source/blender/editors/space_view3d') diff --git a/source/blender/editors/space_view3d/view3d_select.c b/source/blender/editors/space_view3d/view3d_select.c index 0b1bdf00078..b3d4e513d43 100644 --- a/source/blender/editors/space_view3d/view3d_select.c +++ b/source/blender/editors/space_view3d/view3d_select.c @@ -724,8 +724,10 @@ void view3d_lasso_select(bContext *C, ViewContext *vc, short mcords[][2], short ; else if(ob && ob->mode & OB_MODE_PARTICLE_EDIT) PE_lasso_select(C, mcords, moves, select); - else + else { do_lasso_select_objects(vc, mcords, moves, select); + WM_event_add_notifier(C, NC_SCENE|ND_OB_SELECT, vc->scene); + } } else { /* Edit Mode */ if(vc->obedit->type==OB_MESH) -- cgit v1.2.3 From 81d5e4f8dfe4d4d6bffd719006da96167383a743 Mon Sep 17 00:00:00 2001 From: Campbell Barton Date: Wed, 25 Aug 2010 08:31:52 +0000 Subject: bugfix [#22819] Grease Pencil: OpenGL render incorrect if view mode, OK with cursor mode also made drawing in camera view stick to the camera border (belated durian request), useful for animation review without worrying about screensize moving the overlay about. --- source/blender/editors/space_view3d/view3d_draw.c | 23 +++++++++++++++------- source/blender/editors/space_view3d/view3d_edit.c | 2 +- .../blender/editors/space_view3d/view3d_intern.h | 1 - source/blender/editors/space_view3d/view3d_view.c | 2 +- 4 files changed, 18 insertions(+), 10 deletions(-) (limited to 'source/blender/editors/space_view3d') diff --git a/source/blender/editors/space_view3d/view3d_draw.c b/source/blender/editors/space_view3d/view3d_draw.c index 048a0d95617..e48aef2a12c 100644 --- a/source/blender/editors/space_view3d/view3d_draw.c +++ b/source/blender/editors/space_view3d/view3d_draw.c @@ -862,7 +862,7 @@ static void view3d_get_viewborder_size(Scene *scene, ARegion *ar, float size_r[2 } } -void calc_viewborder(Scene *scene, ARegion *ar, RegionView3D *rv3d, View3D *v3d, rctf *viewborder_r) +void view3d_calc_camera_border(Scene *scene, ARegion *ar, RegionView3D *rv3d, View3D *v3d, rctf *viewborder_r) { float zoomfac, size[2]; float dx= 0.0f, dy= 0.0f; @@ -988,7 +988,7 @@ static void drawviewborder(Scene *scene, ARegion *ar, View3D *v3d) if(v3d->camera->type==OB_CAMERA) ca = v3d->camera->data; - calc_viewborder(scene, ar, rv3d, v3d, &viewborder); + view3d_calc_camera_border(scene, ar, rv3d, v3d, &viewborder); /* the offsets */ x1= viewborder.xmin; y1= viewborder.ymin; @@ -1325,7 +1325,7 @@ static void draw_bgpic(Scene *scene, ARegion *ar, View3D *v3d) if(rv3d->persp==RV3D_CAMOB) { rctf vb; - calc_viewborder(scene, ar, rv3d, v3d, &vb); + view3d_calc_camera_border(scene, ar, rv3d, v3d, &vb); x1= vb.xmin; y1= vb.ymin; @@ -1672,7 +1672,7 @@ void draw_depth_gpencil(Scene *scene, ARegion *ar, View3D *v3d) v3d->zbuf= TRUE; glEnable(GL_DEPTH_TEST); - draw_gpencil_view3d_ext(scene, ar, 1); + draw_gpencil_view3d_ext(scene, v3d, ar, 1); v3d->zbuf= zbuf; @@ -1976,14 +1976,22 @@ void ED_view3d_draw_offscreen(Scene *scene, View3D *v3d, ARegion *ar, int winx, Base *base; float backcol[3]; int bwinx, bwiny; + rcti brect; glPushMatrix(); /* set temporary new size */ bwinx= ar->winx; bwiny= ar->winy; + brect= ar->winrct; + ar->winx= winx; - ar->winy= winy; + ar->winy= winy; + ar->winrct.xmin= 0; + ar->winrct.ymin= 0; + ar->winrct.xmax= winx; + ar->winrct.ymax= winy; + /* set flags */ G.f |= G_RENDER_OGL; @@ -2052,12 +2060,12 @@ void ED_view3d_draw_offscreen(Scene *scene, View3D *v3d, ARegion *ar, int winx, } /* draw grease-pencil stuff */ - draw_gpencil_view3d_ext(scene, ar, 1); + draw_gpencil_view3d_ext(scene, v3d, ar, 1); ED_region_pixelspace(ar); /* draw grease-pencil stuff - needed to get paint-buffer shown too (since it's 2D) */ - draw_gpencil_view3d_ext(scene, ar, 0); + draw_gpencil_view3d_ext(scene, v3d, ar, 0); /* freeing the images again here could be done after the operator runs, leaving for now */ GPU_free_images_anim(); @@ -2065,6 +2073,7 @@ void ED_view3d_draw_offscreen(Scene *scene, View3D *v3d, ARegion *ar, int winx, /* restore size */ ar->winx= bwinx; ar->winy= bwiny; + ar->winrct = brect; glPopMatrix(); diff --git a/source/blender/editors/space_view3d/view3d_edit.c b/source/blender/editors/space_view3d/view3d_edit.c index d1c5429c1a8..132f43ff327 100644 --- a/source/blender/editors/space_view3d/view3d_edit.c +++ b/source/blender/editors/space_view3d/view3d_edit.c @@ -1604,7 +1604,7 @@ static int render_border_exec(bContext *C, wmOperator *op) rect.ymax= RNA_int_get(op->ptr, "ymax"); /* calculate range */ - calc_viewborder(scene, ar, rv3d, v3d, &vb); + view3d_calc_camera_border(scene, ar, rv3d, v3d, &vb); scene->r.border.xmin= ((float)rect.xmin-vb.xmin)/(vb.xmax-vb.xmin); scene->r.border.ymin= ((float)rect.ymin-vb.ymin)/(vb.ymax-vb.ymin); diff --git a/source/blender/editors/space_view3d/view3d_intern.h b/source/blender/editors/space_view3d/view3d_intern.h index 173d8256269..d51a45f92ad 100644 --- a/source/blender/editors/space_view3d/view3d_intern.h +++ b/source/blender/editors/space_view3d/view3d_intern.h @@ -126,7 +126,6 @@ void draw_depth_gpencil(Scene *scene, ARegion *ar, View3D *v3d); void view3d_clr_clipping(void); void view3d_set_clipping(RegionView3D *rv3d); void add_view3d_after(View3D *v3d, Base *base, int type, int flag); -void calc_viewborder(Scene *scene, struct ARegion *ar, struct RegionView3D *rv3d, View3D *v3d, rctf *viewborder_r); void circf(float x, float y, float rad); void circ(float x, float y, float rad); diff --git a/source/blender/editors/space_view3d/view3d_view.c b/source/blender/editors/space_view3d/view3d_view.c index 334b72ee1ed..45d099cbb4d 100644 --- a/source/blender/editors/space_view3d/view3d_view.c +++ b/source/blender/editors/space_view3d/view3d_view.c @@ -1784,7 +1784,7 @@ static int game_engine_exec(bContext *C, wmOperator *op) if(rv3d->persp==RV3D_CAMOB && startscene->gm.framing.type == SCE_GAMEFRAMING_BARS && startscene->gm.stereoflag != STEREO_DOME) { /* Letterbox */ rctf cam_framef; - calc_viewborder(startscene, ar, rv3d, CTX_wm_view3d(C), &cam_framef); + view3d_calc_camera_border(startscene, ar, rv3d, CTX_wm_view3d(C), &cam_framef); cam_frame.xmin = cam_framef.xmin + ar->winrct.xmin; cam_frame.xmax = cam_framef.xmax + ar->winrct.xmin; cam_frame.ymin = cam_framef.ymin + ar->winrct.ymin; -- cgit v1.2.3 From 967154497dea50b75771b5ae3df630d8f739ac13 Mon Sep 17 00:00:00 2001 From: Campbell Barton Date: Wed, 25 Aug 2010 12:01:15 +0000 Subject: patch [#23376] Fix for Bug[[#23351] X-Ray + Transparency removes X-Ray effect from Phil Gosch (saphires) minor edit on the patch, was adding V3D_XRAY and V3D_XRAYTRANSP lists, only add to one. --- source/blender/editors/space_view3d/drawobject.c | 9 +++++++-- source/blender/editors/space_view3d/drawvolume.c | 2 ++ source/blender/editors/space_view3d/view3d_draw.c | 11 ++++++++++- source/blender/editors/space_view3d/view3d_intern.h | 1 + 4 files changed, 20 insertions(+), 3 deletions(-) (limited to 'source/blender/editors/space_view3d') diff --git a/source/blender/editors/space_view3d/drawobject.c b/source/blender/editors/space_view3d/drawobject.c index 967b800b97f..df3bc3d479d 100644 --- a/source/blender/editors/space_view3d/drawobject.c +++ b/source/blender/editors/space_view3d/drawobject.c @@ -5537,8 +5537,13 @@ void draw_object(Scene *scene, ARegion *ar, View3D *v3d, Base *base, int flag) /* don't do xray in particle mode, need the z-buffer */ if(!(ob->mode & OB_MODE_PARTICLE_EDIT)) { /* xray and transp are set when it is drawing the 2nd/3rd pass */ - if(!v3d->xray && !v3d->transp && (ob->dtx & OB_DRAWXRAY) && !(ob->dtx & OB_DRAWTRANSP)) { - add_view3d_after(v3d, base, V3D_XRAY, flag); + if(!v3d->xray && !v3d->transp && (ob->dtx & OB_DRAWXRAY)) { + if(ob->dtx & OB_DRAWTRANSP) { + add_view3d_after(v3d, base, V3D_XRAYTRANSP, flag); + } + else { + add_view3d_after(v3d, base, V3D_XRAY, flag); + } return; } } diff --git a/source/blender/editors/space_view3d/drawvolume.c b/source/blender/editors/space_view3d/drawvolume.c index 65786901868..678920f8173 100644 --- a/source/blender/editors/space_view3d/drawvolume.c +++ b/source/blender/editors/space_view3d/drawvolume.c @@ -116,6 +116,7 @@ static void tend ( void ) { gettimeofday ( &_tend,&tz ); } + #if 0 static double tval() { double t1, t2; @@ -123,6 +124,7 @@ static double tval() t2 = ( double ) _tend.tv_sec*1000 + ( double ) _tend.tv_usec/ ( 1000 ); return t2-t1; } + #endif #endif struct GPUTexture; diff --git a/source/blender/editors/space_view3d/view3d_draw.c b/source/blender/editors/space_view3d/view3d_draw.c index e48aef2a12c..db6127210f7 100644 --- a/source/blender/editors/space_view3d/view3d_draw.c +++ b/source/blender/editors/space_view3d/view3d_draw.c @@ -1440,7 +1440,7 @@ static void view3d_draw_xray(Scene *scene, ARegion *ar, View3D *v3d, int clear) int doit= 0; for(v3da= v3d->afterdraw.first; v3da; v3da= v3da->next) - if(v3da->type==V3D_XRAY) doit= 1; + if(v3da->type==V3D_XRAY || v3da->type==V3D_XRAYTRANSP) doit= 1; if(doit) { if(clear && v3d->zbuf) glClear(GL_DEPTH_BUFFER_BIT); @@ -1453,6 +1453,13 @@ static void view3d_draw_xray(Scene *scene, ARegion *ar, View3D *v3d, int clear) BLI_remlink(&v3d->afterdraw, v3da); MEM_freeN(v3da); } + else if(v3da->type==V3D_XRAYTRANSP){ + v3d->transp= TRUE; + draw_object(scene, ar, v3d, v3da->base, v3da->flag); + BLI_remlink(&v3d->afterdraw, v3da); + MEM_freeN(v3da); + v3d->transp= FALSE; + } } v3d->xray= FALSE; } @@ -1767,6 +1774,8 @@ void draw_depth(Scene *scene, ARegion *ar, View3D *v3d, int (* func)(void *)) v3d->xray= TRUE; v3d->transp= FALSE; } else if (v3da->type==V3D_TRANSP) { v3d->xray= FALSE; v3d->transp= TRUE; + } else if (v3da->type == V3D_XRAYTRANSP) { + v3d->xray= TRUE; v3d->transp= TRUE; } draw_object(scene, ar, v3d, v3da->base, 0); /* Draw Xray or Transp objects normally */ diff --git a/source/blender/editors/space_view3d/view3d_intern.h b/source/blender/editors/space_view3d/view3d_intern.h index d51a45f92ad..5042411183f 100644 --- a/source/blender/editors/space_view3d/view3d_intern.h +++ b/source/blender/editors/space_view3d/view3d_intern.h @@ -56,6 +56,7 @@ struct bMotionPath; #define V3D_XRAY 1 #define V3D_TRANSP 2 +#define V3D_XRAYTRANSP 4 #define V3D_SELECT_MOUSE 1 -- cgit v1.2.3 From 7d0e4ac889af1fcd35f0398651d7fbcf67eaf32c Mon Sep 17 00:00:00 2001 From: Campbell Barton Date: Wed, 25 Aug 2010 14:23:02 +0000 Subject: simplify pass drawing, give each pass its own list, avoids some context switching. - also fixes a problem where xray+transp+alpha1.0 objects wouldnt draw at all. - the patch worked by adding twice but this leaked memory. - solve by adding the xraytransp object to the xray list if the alpha is 1.0 --- source/blender/editors/space_view3d/drawobject.c | 26 ++-- source/blender/editors/space_view3d/space_view3d.c | 1 - source/blender/editors/space_view3d/view3d_draw.c | 160 ++++++++++++--------- .../blender/editors/space_view3d/view3d_intern.h | 2 +- 4 files changed, 110 insertions(+), 79 deletions(-) (limited to 'source/blender/editors/space_view3d') diff --git a/source/blender/editors/space_view3d/drawobject.c b/source/blender/editors/space_view3d/drawobject.c index df3bc3d479d..d3162c44463 100644 --- a/source/blender/editors/space_view3d/drawobject.c +++ b/source/blender/editors/space_view3d/drawobject.c @@ -901,7 +901,7 @@ static void drawlamp(Scene *scene, View3D *v3d, RegionView3D *rv3d, Base *base, if(drawcone && !v3d->transp) { /* in this case we need to draw delayed */ - add_view3d_after(v3d, base, V3D_TRANSP, flag); + add_view3d_after(&v3d->afterdraw_transp, base, flag); return; } @@ -2769,7 +2769,20 @@ static int draw_mesh_object(Scene *scene, ARegion *ar, View3D *v3d, RegionView3D } /* GPU_begin_object_materials checked if this is needed */ - if(do_alpha_pass) add_view3d_after(v3d, base, V3D_TRANSP, flag); + if(do_alpha_pass) { + if(ob->dtx & OB_DRAWXRAY) { + add_view3d_after(&v3d->afterdraw_xraytransp, base, flag); + } + else { + add_view3d_after(&v3d->afterdraw_transp, base, flag); + } + } + else if(ob->dtx & OB_DRAWXRAY && ob->dtx & OB_DRAWTRANSP) { + /* special case xray+transp when alpha is 1.0, without this the object vanishes */ + if(v3d->xray == 0 && v3d->transp == 0) { + add_view3d_after(&v3d->afterdraw_xray, base, flag); + } + } return retval; } @@ -5537,13 +5550,8 @@ void draw_object(Scene *scene, ARegion *ar, View3D *v3d, Base *base, int flag) /* don't do xray in particle mode, need the z-buffer */ if(!(ob->mode & OB_MODE_PARTICLE_EDIT)) { /* xray and transp are set when it is drawing the 2nd/3rd pass */ - if(!v3d->xray && !v3d->transp && (ob->dtx & OB_DRAWXRAY)) { - if(ob->dtx & OB_DRAWTRANSP) { - add_view3d_after(v3d, base, V3D_XRAYTRANSP, flag); - } - else { - add_view3d_after(v3d, base, V3D_XRAY, flag); - } + if(!v3d->xray && !v3d->transp && (ob->dtx & OB_DRAWXRAY) && !(ob->dtx & OB_DRAWTRANSP)) { + add_view3d_after(&v3d->afterdraw_xray, base, flag); return; } } diff --git a/source/blender/editors/space_view3d/space_view3d.c b/source/blender/editors/space_view3d/space_view3d.c index ac845ec7ea3..c49f4f48e10 100644 --- a/source/blender/editors/space_view3d/space_view3d.c +++ b/source/blender/editors/space_view3d/space_view3d.c @@ -270,7 +270,6 @@ static void view3d_free(SpaceLink *sl) if(vd->localvd) MEM_freeN(vd->localvd); if(vd->properties_storage) MEM_freeN(vd->properties_storage); - } diff --git a/source/blender/editors/space_view3d/view3d_draw.c b/source/blender/editors/space_view3d/view3d_draw.c index db6127210f7..5f88a1b8b62 100644 --- a/source/blender/editors/space_view3d/view3d_draw.c +++ b/source/blender/editors/space_view3d/view3d_draw.c @@ -1419,52 +1419,18 @@ static void draw_bgpic(Scene *scene, ARegion *ar, View3D *v3d) typedef struct View3DAfter { struct View3DAfter *next, *prev; struct Base *base; - int type, flag; + int flag; } View3DAfter; /* temp storage of Objects that need to be drawn as last */ -void add_view3d_after(View3D *v3d, Base *base, int type, int flag) +void add_view3d_after(ListBase *lb, Base *base, int flag) { View3DAfter *v3da= MEM_callocN(sizeof(View3DAfter), "View 3d after"); - - BLI_addtail(&v3d->afterdraw, v3da); + BLI_addtail(lb, v3da); v3da->base= base; - v3da->type= type; v3da->flag= flag; } -/* clears zbuffer and draws it over */ -static void view3d_draw_xray(Scene *scene, ARegion *ar, View3D *v3d, int clear) -{ - View3DAfter *v3da, *next; - int doit= 0; - - for(v3da= v3d->afterdraw.first; v3da; v3da= v3da->next) - if(v3da->type==V3D_XRAY || v3da->type==V3D_XRAYTRANSP) doit= 1; - - if(doit) { - if(clear && v3d->zbuf) glClear(GL_DEPTH_BUFFER_BIT); - v3d->xray= TRUE; - - for(v3da= v3d->afterdraw.first; v3da; v3da= next) { - next= v3da->next; - if(v3da->type==V3D_XRAY) { - draw_object(scene, ar, v3d, v3da->base, v3da->flag); - BLI_remlink(&v3d->afterdraw, v3da); - MEM_freeN(v3da); - } - else if(v3da->type==V3D_XRAYTRANSP){ - v3d->transp= TRUE; - draw_object(scene, ar, v3d, v3da->base, v3da->flag); - BLI_remlink(&v3d->afterdraw, v3da); - MEM_freeN(v3da); - v3d->transp= FALSE; - } - } - v3d->xray= FALSE; - } -} - /* disables write in zbuffer and draws it over */ static void view3d_draw_transp(Scene *scene, ARegion *ar, View3D *v3d) { @@ -1473,13 +1439,11 @@ static void view3d_draw_transp(Scene *scene, ARegion *ar, View3D *v3d) glDepthMask(0); v3d->transp= TRUE; - for(v3da= v3d->afterdraw.first; v3da; v3da= next) { + for(v3da= v3d->afterdraw_transp.first; v3da; v3da= next) { next= v3da->next; - if(v3da->type==V3D_TRANSP) { - draw_object(scene, ar, v3d, v3da->base, v3da->flag); - BLI_remlink(&v3d->afterdraw, v3da); - MEM_freeN(v3da); - } + draw_object(scene, ar, v3d, v3da->base, v3da->flag); + BLI_remlink(&v3d->afterdraw_transp, v3da); + MEM_freeN(v3da); } v3d->transp= FALSE; @@ -1487,6 +1451,48 @@ static void view3d_draw_transp(Scene *scene, ARegion *ar, View3D *v3d) } +/* clears zbuffer and draws it over */ +static void view3d_draw_xray(Scene *scene, ARegion *ar, View3D *v3d, int clear) +{ + View3DAfter *v3da, *next; + + if(clear && v3d->zbuf) + glClear(GL_DEPTH_BUFFER_BIT); + + v3d->xray= TRUE; + for(v3da= v3d->afterdraw_xray.first; v3da; v3da= next) { + next= v3da->next; + draw_object(scene, ar, v3d, v3da->base, v3da->flag); + BLI_remlink(&v3d->afterdraw_xray, v3da); + MEM_freeN(v3da); + } + v3d->xray= FALSE; +} + + +/* clears zbuffer and draws it over */ +static void view3d_draw_xraytransp(Scene *scene, ARegion *ar, View3D *v3d, int clear) +{ + View3DAfter *v3da, *next; + + if(clear && v3d->zbuf) + glClear(GL_DEPTH_BUFFER_BIT); + + v3d->xray= TRUE; + v3d->transp= TRUE; + + for(v3da= v3d->afterdraw_xraytransp.first; v3da; v3da= next) { + next= v3da->next; + draw_object(scene, ar, v3d, v3da->base, v3da->flag); + BLI_remlink(&v3d->afterdraw_xraytransp, v3da); + MEM_freeN(v3da); + } + + v3d->transp= FALSE; + v3d->xray= FALSE; + +} + /* *********************** */ /* @@ -1747,41 +1753,57 @@ void draw_depth(Scene *scene, ARegion *ar, View3D *v3d, int (* func)(void *)) } /* this isnt that nice, draw xray objects as if they are normal */ - if (v3d->afterdraw.first) { + if ( v3d->afterdraw_transp.first || + v3d->afterdraw_xray.first || + v3d->afterdraw_xraytransp.first + ) { View3DAfter *v3da, *next; - int num = 0; int mask_orig; + v3d->xray= TRUE; /* transp materials can change the depth mask, see #21388 */ glGetIntegerv(GL_DEPTH_WRITEMASK, &mask_orig); - glDepthFunc(GL_ALWAYS); /* always write into the depth bufer, overwriting front z values */ - for(v3da= v3d->afterdraw.first; v3da; v3da= next) { - next= v3da->next; - if(v3da->type==V3D_XRAY) { + + if(v3d->afterdraw_xray.first || v3d->afterdraw_xraytransp.first) { + glDepthFunc(GL_ALWAYS); /* always write into the depth bufer, overwriting front z values */ + for(v3da= v3d->afterdraw_xray.first; v3da; v3da= next) { + next= v3da->next; draw_object(scene, ar, v3d, v3da->base, 0); - num++; } - /* dont remove this time */ + glDepthFunc(GL_LEQUAL); /* Now write the depth buffer normally */ } + + /* draw 3 passes, transp/xray/xraytransp */ v3d->xray= FALSE; - - glDepthFunc(GL_LEQUAL); /* Now write the depth buffer normally */ - for(v3da= v3d->afterdraw.first; v3da; v3da= next) { + v3d->transp= TRUE; + for(v3da= v3d->afterdraw_transp.first; v3da; v3da= next) { next= v3da->next; - if(v3da->type==V3D_XRAY) { - v3d->xray= TRUE; v3d->transp= FALSE; - } else if (v3da->type==V3D_TRANSP) { - v3d->xray= FALSE; v3d->transp= TRUE; - } else if (v3da->type == V3D_XRAYTRANSP) { - v3d->xray= TRUE; v3d->transp= TRUE; - } - - draw_object(scene, ar, v3d, v3da->base, 0); /* Draw Xray or Transp objects normally */ - BLI_remlink(&v3d->afterdraw, v3da); + draw_object(scene, ar, v3d, v3da->base, 0); + BLI_remlink(&v3d->afterdraw_transp, v3da); + MEM_freeN(v3da); + } + + v3d->xray= TRUE; + v3d->transp= FALSE; + for(v3da= v3d->afterdraw_xray.first; v3da; v3da= next) { + next= v3da->next; + draw_object(scene, ar, v3d, v3da->base, 0); + BLI_remlink(&v3d->afterdraw_xray, v3da); + MEM_freeN(v3da); + } + + v3d->xray= TRUE; + v3d->transp= TRUE; + for(v3da= v3d->afterdraw_xraytransp.first; v3da; v3da= next) { + next= v3da->next; + draw_object(scene, ar, v3d, v3da->base, 0); + BLI_remlink(&v3d->afterdraw_xraytransp, v3da); MEM_freeN(v3da); } + + v3d->xray= FALSE; v3d->transp= FALSE; @@ -2059,8 +2081,9 @@ void ED_view3d_draw_offscreen(Scene *scene, View3D *v3d, ARegion *ar, int winx, } /* transp and X-ray afterdraw stuff */ - view3d_draw_transp(scene, ar, v3d); - view3d_draw_xray(scene, ar, v3d, 1); // clears zbuffer if it is used! + if(v3d->afterdraw_transp.first) view3d_draw_transp(scene, ar, v3d); + if(v3d->afterdraw_xray.first) view3d_draw_xray(scene, ar, v3d, 1); // clears zbuffer if it is used! + if(v3d->afterdraw_xraytransp.first) view3d_draw_xraytransp(scene, ar, v3d, 1); /* cleanup */ if(v3d->zbuf) { @@ -2378,8 +2401,9 @@ void view3d_main_area_draw(const bContext *C, ARegion *ar) // REEB_draw(); /* Transp and X-ray afterdraw stuff */ - view3d_draw_transp(scene, ar, v3d); - view3d_draw_xray(scene, ar, v3d, 1); // clears zbuffer if it is used! + if(v3d->afterdraw_transp.first) view3d_draw_transp(scene, ar, v3d); + if(v3d->afterdraw_xray.first) view3d_draw_xray(scene, ar, v3d, 1); // clears zbuffer if it is used! + if(v3d->afterdraw_xraytransp.first) view3d_draw_xraytransp(scene, ar, v3d, 1); ED_region_draw_cb_draw(C, ar, REGION_DRAW_POST_VIEW); diff --git a/source/blender/editors/space_view3d/view3d_intern.h b/source/blender/editors/space_view3d/view3d_intern.h index 5042411183f..7a45a43ddd4 100644 --- a/source/blender/editors/space_view3d/view3d_intern.h +++ b/source/blender/editors/space_view3d/view3d_intern.h @@ -126,7 +126,7 @@ void draw_depth(Scene *scene, struct ARegion *ar, View3D *v3d, int (* func)(void void draw_depth_gpencil(Scene *scene, ARegion *ar, View3D *v3d); void view3d_clr_clipping(void); void view3d_set_clipping(RegionView3D *rv3d); -void add_view3d_after(View3D *v3d, Base *base, int type, int flag); +void add_view3d_after(ListBase *lb, Base *base, int flag); void circf(float x, float y, float rad); void circ(float x, float y, float rad); -- cgit v1.2.3 From ea3be03743c8e066b2ef2ffff8f38371ea553fd3 Mon Sep 17 00:00:00 2001 From: Campbell Barton Date: Thu, 26 Aug 2010 23:30:15 +0000 Subject: ED_view3d_draw_offscreen_imbuf_simple and ED_view3d_draw_offscreen_imbuf now accept the imbuf flag so they can get the float buffer from opengl directly. --- source/blender/editors/space_view3d/view3d_draw.c | 17 ++++++++++++----- 1 file changed, 12 insertions(+), 5 deletions(-) (limited to 'source/blender/editors/space_view3d') diff --git a/source/blender/editors/space_view3d/view3d_draw.c b/source/blender/editors/space_view3d/view3d_draw.c index 5f88a1b8b62..f0aa54248da 100644 --- a/source/blender/editors/space_view3d/view3d_draw.c +++ b/source/blender/editors/space_view3d/view3d_draw.c @@ -2115,7 +2115,7 @@ void ED_view3d_draw_offscreen(Scene *scene, View3D *v3d, ARegion *ar, int winx, } /* utility func for ED_view3d_draw_offscreen */ -ImBuf *ED_view3d_draw_offscreen_imbuf(Scene *scene, View3D *v3d, ARegion *ar, int sizex, int sizey) +ImBuf *ED_view3d_draw_offscreen_imbuf(Scene *scene, View3D *v3d, ARegion *ar, int sizex, int sizey, unsigned int flag) { RegionView3D *rv3d= ar->regiondata; ImBuf *ibuf; @@ -2143,9 +2143,13 @@ ImBuf *ED_view3d_draw_offscreen_imbuf(Scene *scene, View3D *v3d, ARegion *ar, in } /* read in pixels & stamp */ - ibuf= IMB_allocImBuf(sizex, sizey, 24, IB_rect, 0); - glReadPixels(0, 0, sizex, sizey, GL_RGBA, GL_UNSIGNED_BYTE, ibuf->rect); + ibuf= IMB_allocImBuf(sizex, sizey, 32, flag, 0); + if(ibuf->rect_float) + glReadPixels(0, 0, sizex, sizey, GL_RGBA, GL_FLOAT, ibuf->rect_float); + else if(ibuf->rect) + glReadPixels(0, 0, sizex, sizey, GL_RGBA, GL_UNSIGNED_BYTE, ibuf->rect); + //if((scene->r.stamp & R_STAMP_ALL) && (scene->r.stamp & R_STAMP_DRAW)) // BKE_stamp_buf(scene, NULL, rr->rectf, rr->rectx, rr->recty, 4); @@ -2153,11 +2157,14 @@ ImBuf *ED_view3d_draw_offscreen_imbuf(Scene *scene, View3D *v3d, ARegion *ar, in GPU_offscreen_unbind(ofs); GPU_offscreen_free(ofs); + if(ibuf->rect_float && ibuf->rect) + IMB_rect_from_float(ibuf); + return ibuf; } /* creates own 3d views, used by the sequencer */ -ImBuf *ED_view3d_draw_offscreen_imbuf_simple(Scene *scene, int width, int height, int drawtype) +ImBuf *ED_view3d_draw_offscreen_imbuf_simple(Scene *scene, int width, int height, unsigned int flag, int drawtype) { View3D v3d; ARegion ar; @@ -2192,7 +2199,7 @@ ImBuf *ED_view3d_draw_offscreen_imbuf_simple(Scene *scene, int width, int height mul_m4_m4m4(rv3d.persmat, rv3d.viewmat, rv3d.winmat); invert_m4_m4(rv3d.persinv, rv3d.viewinv); - return ED_view3d_draw_offscreen_imbuf(scene, &v3d, &ar, width, height); + return ED_view3d_draw_offscreen_imbuf(scene, &v3d, &ar, width, height, flag); // seq_view3d_cb(scene, cfra, render_size, seqrectx, seqrecty); } -- cgit v1.2.3 From 0d530c3ddbff61ff0b566bc59b0f433961b38937 Mon Sep 17 00:00:00 2001 From: Sergey Sharybin Date: Sat, 28 Aug 2010 07:07:02 +0000 Subject: Fix #23363: Layer buttons do not update when last object deleted This happend because of incorrect order of calculating used layer mask and drawing header. Added layer content changed notifier to recalc used layers when needed. This also fixes header redrawing in "Move to layer" operator and when user changes Object.layers in properties view --- source/blender/editors/space_view3d/space_view3d.c | 37 ++++++++++++++++++++++ source/blender/editors/space_view3d/view3d_draw.c | 5 --- 2 files changed, 37 insertions(+), 5 deletions(-) (limited to 'source/blender/editors/space_view3d') diff --git a/source/blender/editors/space_view3d/space_view3d.c b/source/blender/editors/space_view3d/space_view3d.c index c49f4f48e10..1e035797bea 100644 --- a/source/blender/editors/space_view3d/space_view3d.c +++ b/source/blender/editors/space_view3d/space_view3d.c @@ -513,6 +513,37 @@ static void *view3d_main_area_duplicate(void *poin) return NULL; } +static void view3d_recalc_used_layers(ARegion *ar, wmNotifier *wmn) +{ + wmWindow *win= wmn->wm->winactive; + ScrArea *sa; + + if (!win) return; + + sa= win->screen->areabase.first; + + while(sa) { + if(sa->spacetype == SPACE_VIEW3D) + if(BLI_findindex(&sa->regionbase, ar) >= 0) { + View3D *v3d= sa->spacedata.first; + Scene *scene= wmn->reference; + Base *base; + + v3d->lay_used= 0; + base= scene->base.first; + while(base) { + v3d->lay_used|= base->lay; + + base= base->next; + } + + break; + } + + sa= sa->next; + } +} + static void view3d_main_area_listener(ARegion *ar, wmNotifier *wmn) { /* context changes */ @@ -536,6 +567,10 @@ static void view3d_main_area_listener(ARegion *ar, wmNotifier *wmn) break; case NC_SCENE: switch(wmn->data) { + case ND_LAYER_CONTENT: + view3d_recalc_used_layers(ar, wmn); + ED_region_tag_redraw(ar); + break; case ND_FRAME: case ND_TRANSFORM: case ND_OB_ACTIVE: @@ -677,6 +712,7 @@ static void view3d_header_area_listener(ARegion *ar, wmNotifier *wmn) case ND_MODE: case ND_LAYER: case ND_TOOLSETTINGS: + case ND_LAYER_CONTENT: ED_region_tag_redraw(ar); break; } @@ -728,6 +764,7 @@ static void view3d_buttons_area_listener(ARegion *ar, wmNotifier *wmn) case ND_OB_SELECT: case ND_MODE: case ND_LAYER: + case ND_LAYER_CONTENT: ED_region_tag_redraw(ar); break; } diff --git a/source/blender/editors/space_view3d/view3d_draw.c b/source/blender/editors/space_view3d/view3d_draw.c index f0aa54248da..56e66e21a72 100644 --- a/source/blender/editors/space_view3d/view3d_draw.c +++ b/source/blender/editors/space_view3d/view3d_draw.c @@ -2367,14 +2367,9 @@ void view3d_main_area_draw(const bContext *C, ARegion *ar) /* Transp and X-ray afterdraw stuff for sets is done later */ } - - /* extra service in layerbuttons, showing used layers */ - v3d->lay_used = 0; /* then draw not selected and the duplis, but skip editmode object */ for(base= scene->base.first; base; base= base->next) { - v3d->lay_used |= base->lay; - if(v3d->lay & base->lay) { /* dupli drawing */ -- cgit v1.2.3 From 6c113b54b3566966b5ab2b731a59fa39b79aacd2 Mon Sep 17 00:00:00 2001 From: Nathan Letwory Date: Sun, 29 Aug 2010 20:52:05 +0000 Subject: Finally change SConscript tabs to spaces. --- source/blender/editors/space_view3d/SConscript | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'source/blender/editors/space_view3d') diff --git a/source/blender/editors/space_view3d/SConscript b/source/blender/editors/space_view3d/SConscript index 1d8e01f2b1b..d9074113ba9 100644 --- a/source/blender/editors/space_view3d/SConscript +++ b/source/blender/editors/space_view3d/SConscript @@ -12,8 +12,8 @@ incs += ' #/intern/smoke/extern' incs += ' #source/kernel/gen_system' if env['WITH_BF_GAMEENGINE']: - defs.append('GAMEBLENDER=1') + defs.append('GAMEBLENDER=1') if env['OURPLATFORM'] in ('win32-vc', 'win32-mingw', 'linuxcross', 'win64-vc'): - incs += ' ' + env['BF_PTHREADS_INC'] + incs += ' ' + env['BF_PTHREADS_INC'] env.BlenderLib ( 'bf_editors_space_view3d', sources, Split(incs), defines = defs, libtype=['core'], priority=[40] ) -- cgit v1.2.3 From 4a427fa4ff7cc2bebbbe9b9be3d89e947752fc29 Mon Sep 17 00:00:00 2001 From: Janne Karhu Date: Wed, 1 Sep 2010 10:29:03 +0000 Subject: Particle billboards weren't created properly --- source/blender/editors/space_view3d/drawobject.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'source/blender/editors/space_view3d') diff --git a/source/blender/editors/space_view3d/drawobject.c b/source/blender/editors/space_view3d/drawobject.c index d3162c44463..513b0e891dc 100644 --- a/source/blender/editors/space_view3d/drawobject.c +++ b/source/blender/editors/space_view3d/drawobject.c @@ -3375,7 +3375,7 @@ static void draw_particle(ParticleKey *state, int draw_as, short draw, float pix add_v3_v3v3(pdd->vd, bb_center, xvec); add_v3_v3(pdd->vd, yvec); pdd->vd+=3; - sub_v3_v3v3(pdd->vd, bb_center, vec); + sub_v3_v3v3(pdd->vd, bb_center, xvec); add_v3_v3(pdd->vd, yvec); pdd->vd+=3; sub_v3_v3v3(pdd->vd, bb_center, xvec); -- cgit v1.2.3 From b49bd51bc827e39e5d02606ccaedbc037dd4896f Mon Sep 17 00:00:00 2001 From: Matt Ebb Date: Wed, 1 Sep 2010 13:41:53 +0000 Subject: Quicky - allow dragging an image on a 3d view background to set it as the background image. Dragging on an object still sets it to face-mapped texture. --- source/blender/editors/space_view3d/space_view3d.c | 36 ++++++++++---- source/blender/editors/space_view3d/view3d_edit.c | 55 ++++++++++++++++++++-- 2 files changed, 76 insertions(+), 15 deletions(-) (limited to 'source/blender/editors/space_view3d') diff --git a/source/blender/editors/space_view3d/space_view3d.c b/source/blender/editors/space_view3d/space_view3d.c index 1e035797bea..a85881dd76b 100644 --- a/source/blender/editors/space_view3d/space_view3d.c +++ b/source/blender/editors/space_view3d/space_view3d.c @@ -408,17 +408,32 @@ static int view3d_mat_drop_poll(bContext *C, wmDrag *drag, wmEvent *event) } static int view3d_ima_drop_poll(bContext *C, wmDrag *drag, wmEvent *event) +{ + if(drag->type==WM_DRAG_ID) { + ID *id= (ID *)drag->poin; + if( GS(id->name)==ID_IM ) + return 1; + } + else if(drag->type==WM_DRAG_PATH){ + if(ELEM(drag->icon, 0, ICON_FILE_IMAGE)) /* rule might not work? */ + return 1; + } + return 0; +} + + +static int view3d_ima_bg_drop_poll(bContext *C, wmDrag *drag, wmEvent *event) { if( ED_view3d_give_base_under_cursor(C, event->mval) ) { - if(drag->type==WM_DRAG_ID) { - ID *id= (ID *)drag->poin; - if( GS(id->name)==ID_IM ) - return 1; - } - else if(drag->type==WM_DRAG_PATH){ - if(ELEM(drag->icon, 0, ICON_FILE_IMAGE)) /* rule might not work? */ - return 1; - } + return 0; + } + return view3d_ima_drop_poll(C, drag, event); +} + +static int view3d_ima_ob_drop_poll(bContext *C, wmDrag *drag, wmEvent *event) +{ + if( ED_view3d_give_base_under_cursor(C, event->mval) ) { + return view3d_ima_drop_poll(C, drag, event); } return 0; } @@ -461,7 +476,8 @@ static void view3d_dropboxes(void) WM_dropbox_add(lb, "OBJECT_OT_add_named_cursor", view3d_ob_drop_poll, view3d_ob_drop_copy); WM_dropbox_add(lb, "OBJECT_OT_drop_named_material", view3d_mat_drop_poll, view3d_id_drop_copy); - WM_dropbox_add(lb, "MESH_OT_drop_named_image", view3d_ima_drop_poll, view3d_id_path_drop_copy); + WM_dropbox_add(lb, "MESH_OT_drop_named_image", view3d_ima_ob_drop_poll, view3d_id_path_drop_copy); + WM_dropbox_add(lb, "VIEW3D_OT_add_background_image", view3d_ima_bg_drop_poll, view3d_id_path_drop_copy); } diff --git a/source/blender/editors/space_view3d/view3d_edit.c b/source/blender/editors/space_view3d/view3d_edit.c index 132f43ff327..c2770d2eb8c 100644 --- a/source/blender/editors/space_view3d/view3d_edit.c +++ b/source/blender/editors/space_view3d/view3d_edit.c @@ -42,6 +42,8 @@ #include "BLI_rand.h" #include "BKE_context.h" +#include "BKE_image.h" +#include "BKE_library.h" #include "BKE_object.h" #include "BKE_paint.h" #include "BKE_report.h" @@ -2199,27 +2201,64 @@ void VIEW3D_OT_view_persportho(wmOperatorType *ot) /* ******************** add background image operator **************** */ -static int add_background_image_exec(bContext *C, wmOperator *op) +static BGpic *add_background_image(bContext *C) { View3D *v3d= CTX_wm_view3d(C); - + BGpic *bgpic= MEM_callocN(sizeof(BGpic), "Background Image"); bgpic->size= 5.0; bgpic->blend= 0.5; bgpic->iuser.fie_ima= 2; bgpic->iuser.ok= 1; bgpic->view= 0; /* 0 for all */ - + BLI_addtail(&v3d->bgpicbase, bgpic); + + return bgpic; +} - //ED_region_tag_redraw(v3d); +static int add_background_image_exec(bContext *C, wmOperator *op) +{ + add_background_image(C); return OPERATOR_FINISHED; } static int add_background_image_invoke(bContext *C, wmOperator *op, wmEvent *event) { - return add_background_image_exec(C, op); + Scene *scene= CTX_data_scene(C); + View3D *v3d= CTX_wm_view3d(C); + Image *ima= NULL; + BGpic *bgpic; + char name[32]; + + /* check input variables */ + if(RNA_property_is_set(op->ptr, "filepath")) { + char path[FILE_MAX]; + + RNA_string_get(op->ptr, "filepath", path); + ima= BKE_add_image_file(path, scene ? scene->r.cfra : 1); + } + else if(RNA_property_is_set(op->ptr, "name")) { + RNA_string_get(op->ptr, "name", name); + ima= (Image *)find_id("IM", name); + } + + bgpic = add_background_image(C); + + if (ima) { + bgpic->ima = ima; + + if(ima->id.us==0) id_us_plus(&ima->id); + else id_lib_extern(&ima->id); + + if (!(v3d->flag & V3D_DISPBGPICS)) + v3d->flag |= V3D_DISPBGPICS; + } + + WM_event_add_notifier(C, NC_SPACE|ND_SPACE_VIEW3D, v3d); + + return OPERATOR_FINISHED; } void VIEW3D_OT_add_background_image(wmOperatorType *ot) @@ -2236,8 +2275,13 @@ void VIEW3D_OT_add_background_image(wmOperatorType *ot) /* flags */ ot->flag = 0; + + /* properties */ + RNA_def_string(ot->srna, "name", "Image", 24, "Name", "Image name to assign."); + RNA_def_string(ot->srna, "filepath", "Path", FILE_MAX, "Filepath", "Path to image file"); } + /* ***** remove image operator ******* */ static int remove_background_image_exec(bContext *C, wmOperator *op) { @@ -2273,6 +2317,7 @@ void VIEW3D_OT_remove_background_image(wmOperatorType *ot) RNA_def_int(ot->srna, "index", 0, 0, INT_MAX, "Index", "Background image index to remove ", 0, INT_MAX); } + /* ********************* set clipping operator ****************** */ static void calc_clipping_plane(float clip[6][4], BoundBox *clipbb) -- cgit v1.2.3 From 6e1e6383135689091d9d43462d86a8090ab5b82b Mon Sep 17 00:00:00 2001 From: Nathan Letwory Date: Thu, 2 Sep 2010 00:24:33 +0000 Subject: Fix [#23613] Align active camera to view vs toggle camera acts odd Reported by Reiner Prokein After aligning active camera toggling between last view and camera worked wrong in such a way that the view previous to the one to which was aligned was rotated to. In some cases rotation to last view seemed incomplete and ortho was used. Thanks to M.G. Kishalmi (lmg) for showing through a Skype screen share. This is now fixed by copying the current view info before active camera is aligned. --- source/blender/editors/space_view3d/view3d_view.c | 4 ++++ 1 file changed, 4 insertions(+) (limited to 'source/blender/editors/space_view3d') diff --git a/source/blender/editors/space_view3d/view3d_view.c b/source/blender/editors/space_view3d/view3d_view.c index 45d099cbb4d..6c35b8a7bea 100644 --- a/source/blender/editors/space_view3d/view3d_view.c +++ b/source/blender/editors/space_view3d/view3d_view.c @@ -403,6 +403,10 @@ static int view3d_setcameratoview_exec(bContext *C, wmOperator *op) View3D *v3d = CTX_wm_view3d(C); RegionView3D *rv3d= CTX_wm_region_view3d(C); + copy_qt_qt(rv3d->lviewquat, rv3d->viewquat); + rv3d->lview= rv3d->view; + rv3d->lpersp= rv3d->persp; + setcameratoview3d(v3d, rv3d, v3d->camera); rv3d->persp = RV3D_CAMOB; -- cgit v1.2.3 From 0106b00a2a531705574f4bc38d840fd275dbb27f Mon Sep 17 00:00:00 2001 From: Campbell Barton Date: Mon, 6 Sep 2010 05:20:05 +0000 Subject: rename '3D View' keymap, since its know as 'View 3D' for other areas of the keymap editor. --- source/blender/editors/space_view3d/space_view3d.c | 10 +++++----- source/blender/editors/space_view3d/view3d_ops.c | 4 ++-- 2 files changed, 7 insertions(+), 7 deletions(-) (limited to 'source/blender/editors/space_view3d') diff --git a/source/blender/editors/space_view3d/space_view3d.c b/source/blender/editors/space_view3d/space_view3d.c index a85881dd76b..d9cb521b774 100644 --- a/source/blender/editors/space_view3d/space_view3d.c +++ b/source/blender/editors/space_view3d/space_view3d.c @@ -374,10 +374,10 @@ static void view3d_main_area_init(wmWindowManager *wm, ARegion *ar) WM_event_add_keymap_handler(&ar->handlers, keymap); /* own keymap, last so modes can override it */ - keymap= WM_keymap_find(wm->defaultconf, "3D View Generic", SPACE_VIEW3D, 0); + keymap= WM_keymap_find(wm->defaultconf, "View 3D Generic", SPACE_VIEW3D, 0); WM_event_add_keymap_handler(&ar->handlers, keymap); - keymap= WM_keymap_find(wm->defaultconf, "3D View", SPACE_VIEW3D, 0); + keymap= WM_keymap_find(wm->defaultconf, "View 3D", SPACE_VIEW3D, 0); WM_event_add_keymap_handler(&ar->handlers, keymap); /* add drop boxes */ @@ -704,7 +704,7 @@ static void view3d_main_area_cursor(wmWindow *win, ScrArea *sa, ARegion *ar) /* add handlers, stuff you only do once or on area/region changes */ static void view3d_header_area_init(wmWindowManager *wm, ARegion *ar) { - wmKeyMap *keymap= WM_keymap_find(wm->defaultconf, "3D View Generic", SPACE_VIEW3D, 0); + wmKeyMap *keymap= WM_keymap_find(wm->defaultconf, "View 3D Generic", SPACE_VIEW3D, 0); WM_event_add_keymap_handler(&ar->handlers, keymap); @@ -747,7 +747,7 @@ static void view3d_buttons_area_init(wmWindowManager *wm, ARegion *ar) ED_region_panels_init(wm, ar); - keymap= WM_keymap_find(wm->defaultconf, "3D View Generic", SPACE_VIEW3D, 0); + keymap= WM_keymap_find(wm->defaultconf, "View 3D Generic", SPACE_VIEW3D, 0); WM_event_add_keymap_handler(&ar->handlers, keymap); } @@ -843,7 +843,7 @@ static void view3d_tools_area_init(wmWindowManager *wm, ARegion *ar) ED_region_panels_init(wm, ar); - keymap= WM_keymap_find(wm->defaultconf, "3D View Generic", SPACE_VIEW3D, 0); + keymap= WM_keymap_find(wm->defaultconf, "View 3D Generic", SPACE_VIEW3D, 0); WM_event_add_keymap_handler(&ar->handlers, keymap); } diff --git a/source/blender/editors/space_view3d/view3d_ops.c b/source/blender/editors/space_view3d/view3d_ops.c index 9ee12a8ef1e..a8931365adb 100644 --- a/source/blender/editors/space_view3d/view3d_ops.c +++ b/source/blender/editors/space_view3d/view3d_ops.c @@ -103,13 +103,13 @@ void view3d_keymap(wmKeyConfig *keyconf) wmKeyMap *keymap; wmKeyMapItem *kmi; - keymap= WM_keymap_find(keyconf, "3D View Generic", SPACE_VIEW3D, 0); + keymap= WM_keymap_find(keyconf, "View 3D Generic", SPACE_VIEW3D, 0); WM_keymap_add_item(keymap, "VIEW3D_OT_properties", NKEY, KM_PRESS, 0, 0); WM_keymap_add_item(keymap, "VIEW3D_OT_toolshelf", TKEY, KM_PRESS, 0, 0); /* only for region 3D window */ - keymap= WM_keymap_find(keyconf, "3D View", SPACE_VIEW3D, 0); + keymap= WM_keymap_find(keyconf, "View 3D", SPACE_VIEW3D, 0); kmi = WM_keymap_verify_item(keymap, "VIEW3D_OT_manipulator", LEFTMOUSE, KM_PRESS, KM_ANY, 0); RNA_boolean_set(kmi->ptr, "release_confirm", 1); -- cgit v1.2.3 From 27fff49335c4601db12ba25693961b94beb2c254 Mon Sep 17 00:00:00 2001 From: Campbell Barton Date: Mon, 6 Sep 2010 05:40:52 +0000 Subject: revert keymap name commit, matt says everything should be '2D View', '3D View...' etc, so for now just go back to what we had. reverse merge: svn merge -r31774:31773 . --- source/blender/editors/space_view3d/space_view3d.c | 10 +++++----- source/blender/editors/space_view3d/view3d_ops.c | 4 ++-- 2 files changed, 7 insertions(+), 7 deletions(-) (limited to 'source/blender/editors/space_view3d') diff --git a/source/blender/editors/space_view3d/space_view3d.c b/source/blender/editors/space_view3d/space_view3d.c index d9cb521b774..a85881dd76b 100644 --- a/source/blender/editors/space_view3d/space_view3d.c +++ b/source/blender/editors/space_view3d/space_view3d.c @@ -374,10 +374,10 @@ static void view3d_main_area_init(wmWindowManager *wm, ARegion *ar) WM_event_add_keymap_handler(&ar->handlers, keymap); /* own keymap, last so modes can override it */ - keymap= WM_keymap_find(wm->defaultconf, "View 3D Generic", SPACE_VIEW3D, 0); + keymap= WM_keymap_find(wm->defaultconf, "3D View Generic", SPACE_VIEW3D, 0); WM_event_add_keymap_handler(&ar->handlers, keymap); - keymap= WM_keymap_find(wm->defaultconf, "View 3D", SPACE_VIEW3D, 0); + keymap= WM_keymap_find(wm->defaultconf, "3D View", SPACE_VIEW3D, 0); WM_event_add_keymap_handler(&ar->handlers, keymap); /* add drop boxes */ @@ -704,7 +704,7 @@ static void view3d_main_area_cursor(wmWindow *win, ScrArea *sa, ARegion *ar) /* add handlers, stuff you only do once or on area/region changes */ static void view3d_header_area_init(wmWindowManager *wm, ARegion *ar) { - wmKeyMap *keymap= WM_keymap_find(wm->defaultconf, "View 3D Generic", SPACE_VIEW3D, 0); + wmKeyMap *keymap= WM_keymap_find(wm->defaultconf, "3D View Generic", SPACE_VIEW3D, 0); WM_event_add_keymap_handler(&ar->handlers, keymap); @@ -747,7 +747,7 @@ static void view3d_buttons_area_init(wmWindowManager *wm, ARegion *ar) ED_region_panels_init(wm, ar); - keymap= WM_keymap_find(wm->defaultconf, "View 3D Generic", SPACE_VIEW3D, 0); + keymap= WM_keymap_find(wm->defaultconf, "3D View Generic", SPACE_VIEW3D, 0); WM_event_add_keymap_handler(&ar->handlers, keymap); } @@ -843,7 +843,7 @@ static void view3d_tools_area_init(wmWindowManager *wm, ARegion *ar) ED_region_panels_init(wm, ar); - keymap= WM_keymap_find(wm->defaultconf, "View 3D Generic", SPACE_VIEW3D, 0); + keymap= WM_keymap_find(wm->defaultconf, "3D View Generic", SPACE_VIEW3D, 0); WM_event_add_keymap_handler(&ar->handlers, keymap); } diff --git a/source/blender/editors/space_view3d/view3d_ops.c b/source/blender/editors/space_view3d/view3d_ops.c index a8931365adb..9ee12a8ef1e 100644 --- a/source/blender/editors/space_view3d/view3d_ops.c +++ b/source/blender/editors/space_view3d/view3d_ops.c @@ -103,13 +103,13 @@ void view3d_keymap(wmKeyConfig *keyconf) wmKeyMap *keymap; wmKeyMapItem *kmi; - keymap= WM_keymap_find(keyconf, "View 3D Generic", SPACE_VIEW3D, 0); + keymap= WM_keymap_find(keyconf, "3D View Generic", SPACE_VIEW3D, 0); WM_keymap_add_item(keymap, "VIEW3D_OT_properties", NKEY, KM_PRESS, 0, 0); WM_keymap_add_item(keymap, "VIEW3D_OT_toolshelf", TKEY, KM_PRESS, 0, 0); /* only for region 3D window */ - keymap= WM_keymap_find(keyconf, "View 3D", SPACE_VIEW3D, 0); + keymap= WM_keymap_find(keyconf, "3D View", SPACE_VIEW3D, 0); kmi = WM_keymap_verify_item(keymap, "VIEW3D_OT_manipulator", LEFTMOUSE, KM_PRESS, KM_ANY, 0); RNA_boolean_set(kmi->ptr, "release_confirm", 1); -- cgit v1.2.3 From 2406ebe1a47c388df8b1ea003d7f768df947460f Mon Sep 17 00:00:00 2001 From: Campbell Barton Date: Tue, 7 Sep 2010 01:13:10 +0000 Subject: - added back zlib include (needed for win32). - use list append in more places. - remove non existing include dir. --- source/blender/editors/space_view3d/CMakeLists.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'source/blender/editors/space_view3d') diff --git a/source/blender/editors/space_view3d/CMakeLists.txt b/source/blender/editors/space_view3d/CMakeLists.txt index a6945bbe9bb..ca9ad001a40 100644 --- a/source/blender/editors/space_view3d/CMakeLists.txt +++ b/source/blender/editors/space_view3d/CMakeLists.txt @@ -42,7 +42,7 @@ IF(WITH_GAMEENGINE) ENDIF(WITH_GAMEENGINE) IF(WIN32) - SET(INC ${INC} ${PTHREADS_INC}) + LIST(APPEND INC ${PTHREADS_INC}) ENDIF(WIN32) ADD_DEFINITIONS(-DGLEW_STATIC) -- cgit v1.2.3 From ea95d71067ec3abc392d69321c35dd1b78b65712 Mon Sep 17 00:00:00 2001 From: Campbell Barton Date: Tue, 7 Sep 2010 09:15:59 +0000 Subject: bugfix [#23189] Num-0 swtich to Camera view and back doesn't respect UserPerspective view. also fix for recent cmake edits. --- source/blender/editors/space_view3d/view3d_edit.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'source/blender/editors/space_view3d') diff --git a/source/blender/editors/space_view3d/view3d_edit.c b/source/blender/editors/space_view3d/view3d_edit.c index c2770d2eb8c..3614717e9e0 100644 --- a/source/blender/editors/space_view3d/view3d_edit.c +++ b/source/blender/editors/space_view3d/view3d_edit.c @@ -1902,14 +1902,14 @@ static void axis_set_view(bContext *C, float q1, float q2, float q3, float q4, s if (rv3d->persp==RV3D_CAMOB && v3d->camera) { - if (U.uiflag & USER_AUTOPERSP) rv3d->persp= RV3D_ORTHO; + if (U.uiflag & USER_AUTOPERSP) rv3d->persp= view ? RV3D_ORTHO : RV3D_PERSP; else if(rv3d->persp==RV3D_CAMOB) rv3d->persp= perspo; smooth_view(C, v3d->camera, NULL, rv3d->ofs, new_quat, NULL, NULL); } else { - if (U.uiflag & USER_AUTOPERSP) rv3d->persp= RV3D_ORTHO; + if (U.uiflag & USER_AUTOPERSP) rv3d->persp= view ? RV3D_ORTHO : RV3D_PERSP; else if(rv3d->persp==RV3D_CAMOB) rv3d->persp= perspo; smooth_view(C, NULL, NULL, NULL, new_quat, NULL, NULL); -- cgit v1.2.3 From 28d18d59a314f3579fcf272e0b9b5c5ea03a1513 Mon Sep 17 00:00:00 2001 From: Campbell Barton Date: Tue, 7 Sep 2010 10:24:12 +0000 Subject: bugfix [#22831] transform problem with hidden parent object dont allow selecting of hidden objects or restrict selected object by using the BASE_SELECTABLE macro. --- source/blender/editors/space_view3d/view3d_select.c | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) (limited to 'source/blender/editors/space_view3d') diff --git a/source/blender/editors/space_view3d/view3d_select.c b/source/blender/editors/space_view3d/view3d_select.c index b3d4e513d43..966fac1a3bd 100644 --- a/source/blender/editors/space_view3d/view3d_select.c +++ b/source/blender/editors/space_view3d/view3d_select.c @@ -1055,7 +1055,7 @@ static Base *mouse_select_eval_buffer(ViewContext *vc, unsigned int *buffer, int base= FIRSTBASE; while(base) { - if(base->lay & v3d->lay) { + if(BASE_SELECTABLE(v3d, base)) { if(base->selcol==selcol) break; } base= base->next; @@ -1074,7 +1074,7 @@ static Base *mouse_select_eval_buffer(ViewContext *vc, unsigned int *buffer, int if(base==startbase) break; } - if(base->lay & v3d->lay) { + if(BASE_SELECTABLE(v3d, base)) { for(a=0; anext; - if(base->lay & v3d->lay) { + if(BASE_SELECTABLE(v3d, base)) { ED_base_object_select(base, BA_DESELECT); } base= next; @@ -1652,7 +1652,7 @@ static int view3d_borderselect_exec(bContext *C, wmOperator *op) while(base && hits) { Base *next = base->next; - if(base->lay & v3d->lay) { + if(BASE_SELECTABLE(v3d, base)) { while (base->selcol == (*col & 0xFFFF)) { /* we got an object */ if(*col & 0xFFFF0000) { /* we got a bone */ @@ -2092,7 +2092,7 @@ static int view3d_circle_select_exec(bContext *C, wmOperator *op) Base *base; selecting= selecting?BA_SELECT:BA_DESELECT; for(base= FIRSTBASE; base; base= base->next) { - if(base->lay & v3d->lay) { + if(BASE_SELECTABLE(v3d, base)) { project_short(ar, base->object->obmat[3], &base->sx); if(base->sx!=IS_CLIPPED) { int dx= base->sx-x; -- cgit v1.2.3 From 8737dcfc7b248894ee1556b74a388463dc9af92d Mon Sep 17 00:00:00 2001 From: Campbell Barton Date: Wed, 8 Sep 2010 02:55:48 +0000 Subject: bugfix [#23722] Artifact in 3D View with empties saved to default .blend. --- source/blender/editors/space_view3d/drawobject.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) (limited to 'source/blender/editors/space_view3d') diff --git a/source/blender/editors/space_view3d/drawobject.c b/source/blender/editors/space_view3d/drawobject.c index 513b0e891dc..321281299ee 100644 --- a/source/blender/editors/space_view3d/drawobject.c +++ b/source/blender/editors/space_view3d/drawobject.c @@ -4772,7 +4772,7 @@ static void draw_empty_sphere (float size) GLUquadricObj *qobj; displist= glGenLists(1); - glNewList(displist, GL_COMPILE_AND_EXECUTE); + glNewList(displist, GL_COMPILE); glPushMatrix(); @@ -4793,8 +4793,8 @@ static void draw_empty_sphere (float size) } glScalef(size, size, size); - glCallList(displist); - glScalef(1/size, 1/size, 1/size); + glCallList(displist); + glScalef(1.0f/size, 1.0f/size, 1.0f/size); } /* draw a cone for use as an empty drawtype */ -- cgit v1.2.3 From b2b08692124cac0571e40f8bbf2b92fde857e8b9 Mon Sep 17 00:00:00 2001 From: Campbell Barton Date: Sat, 11 Sep 2010 04:39:00 +0000 Subject: - camera max zoom limit was inconsistent - camera pan now follows the mouse --- source/blender/editors/space_view3d/view3d_draw.c | 2 +- source/blender/editors/space_view3d/view3d_edit.c | 11 ++++++----- 2 files changed, 7 insertions(+), 6 deletions(-) (limited to 'source/blender/editors/space_view3d') diff --git a/source/blender/editors/space_view3d/view3d_draw.c b/source/blender/editors/space_view3d/view3d_draw.c index 56e66e21a72..17516f6a40c 100644 --- a/source/blender/editors/space_view3d/view3d_draw.c +++ b/source/blender/editors/space_view3d/view3d_draw.c @@ -923,7 +923,7 @@ void view3d_set_1_to_1_viewborder(Scene *scene, ARegion *ar) view3d_get_viewborder_size(scene, ar, size); rv3d->camzoom= (sqrt(4.0*im_width/size[0]) - M_SQRT2)*50.0; - rv3d->camzoom= CLAMPIS(rv3d->camzoom, -30, 300); + rv3d->camzoom= CLAMPIS(rv3d->camzoom, RV3D_CAMZOOM_MIN, RV3D_CAMZOOM_MAX); } diff --git a/source/blender/editors/space_view3d/view3d_edit.c b/source/blender/editors/space_view3d/view3d_edit.c index 3614717e9e0..e2c12386dd3 100644 --- a/source/blender/editors/space_view3d/view3d_edit.c +++ b/source/blender/editors/space_view3d/view3d_edit.c @@ -854,10 +854,11 @@ void viewmove_modal_keymap(wmKeyConfig *keyconf) static void viewmove_apply(ViewOpsData *vod, int x, int y) { if(vod->rv3d->persp==RV3D_CAMOB) { - float max= (float)MAX2(vod->ar->winx, vod->ar->winy); + float zoomfac= (M_SQRT2 + vod->rv3d->camzoom/50.0); + zoomfac= (zoomfac*zoomfac)*0.5; - vod->rv3d->camdx += (vod->oldx - x)/(max); - vod->rv3d->camdy += (vod->oldy - y)/(max); + vod->rv3d->camdx += (vod->oldx - x)/(vod->ar->winx * zoomfac); + vod->rv3d->camdy += (vod->oldy - y)/(vod->ar->winy * zoomfac); CLAMP(vod->rv3d->camdx, -1.0f, 1.0f); CLAMP(vod->rv3d->camdy, -1.0f, 1.0f); // XXX preview3d_event= 0; @@ -1165,7 +1166,7 @@ static int viewzoom_exec(bContext *C, wmOperator *op) /* this min and max is also in viewmove() */ if(rv3d->persp==RV3D_CAMOB) { rv3d->camzoom-= 10; - if(rv3d->camzoom<-30) rv3d->camzoom= -30; + if(rv3d->camzoom < RV3D_CAMZOOM_MIN) rv3d->camzoom= RV3D_CAMZOOM_MIN; } else if(rv3d->dist<10.0*v3d->far) { view_zoom_mouseloc(CTX_wm_region(C), 1.2f, mx, my); @@ -1174,7 +1175,7 @@ static int viewzoom_exec(bContext *C, wmOperator *op) else { if(rv3d->persp==RV3D_CAMOB) { rv3d->camzoom+= 10; - if(rv3d->camzoom>600) rv3d->camzoom= 600; + if(rv3d->camzoom > RV3D_CAMZOOM_MAX) rv3d->camzoom= RV3D_CAMZOOM_MAX; } else if(rv3d->dist> 0.001*v3d->grid) { view_zoom_mouseloc(CTX_wm_region(C), .83333f, mx, my); -- cgit v1.2.3 From 2ac0a5637ce43e5f812e2b9ee1e03fb7adefb71b Mon Sep 17 00:00:00 2001 From: Nathan Letwory Date: Wed, 15 Sep 2010 12:18:50 +0000 Subject: Apply patch [#23779] Small cleanup with gl_roundbox* By Luca Bonavita (mindrones) The patch renames and moves gl_round_box, gl_round_box_shade and gl_round_box_vertical_shade to UI_interface.h, so the extern usages are not needed anymore. --- source/blender/editors/space_view3d/view3d_draw.c | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) (limited to 'source/blender/editors/space_view3d') diff --git a/source/blender/editors/space_view3d/view3d_draw.c b/source/blender/editors/space_view3d/view3d_draw.c index 17516f6a40c..fa394ff708a 100644 --- a/source/blender/editors/space_view3d/view3d_draw.c +++ b/source/blender/editors/space_view3d/view3d_draw.c @@ -974,7 +974,6 @@ static void drawviewborder_flymode(ARegion *ar) static void drawviewborder(Scene *scene, ARegion *ar, View3D *v3d) { - 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 x1i, x2i, y1i, y2i; @@ -1061,7 +1060,7 @@ static void drawviewborder(Scene *scene, ARegion *ar, View3D *v3d) UI_ThemeColorBlendShade(TH_WIRE, TH_BACK, 0.25, 0); uiSetRoundBox(15); - gl_round_box(GL_LINE_LOOP, x1, y1, x2, y2, 12.0); + uiDrawBox(GL_LINE_LOOP, x1, y1, x2, y2, 12.0); } setlinestyle(0); -- cgit v1.2.3 From 4828d0cba0e621d8e8b1cf3f3b3d00e8d83b861a Mon Sep 17 00:00:00 2001 From: Campbell Barton Date: Wed, 15 Sep 2010 13:07:36 +0000 Subject: bugfix [#23830] Border selecting bones in editmode bug was missing a call to glLoadName(-1); so drawing commands after the bone were taken into account with the selection. made some other minor changes that dont change functionality. --- source/blender/editors/space_view3d/drawarmature.c | 44 +++++++++++----------- 1 file changed, 22 insertions(+), 22 deletions(-) (limited to 'source/blender/editors/space_view3d') diff --git a/source/blender/editors/space_view3d/drawarmature.c b/source/blender/editors/space_view3d/drawarmature.c index adff6ffdc65..50798429801 100644 --- a/source/blender/editors/space_view3d/drawarmature.c +++ b/source/blender/editors/space_view3d/drawarmature.c @@ -310,7 +310,7 @@ static void drawsolidcube_size(float xsize, float ysize, float zsize) if(displist==0) { displist= glGenLists(1); - glNewList(displist, GL_COMPILE_AND_EXECUTE); + glNewList(displist, GL_COMPILE); glBegin(GL_QUADS); n[0]= -1.0; @@ -340,19 +340,17 @@ static void drawsolidcube_size(float xsize, float ysize, float zsize) glEndList(); } - else glCallList(displist); - + + glCallList(displist); } static void drawcube_size(float xsize, float ysize, float zsize) { static GLuint displist=0; - glScalef(xsize, ysize, zsize); - if(displist == 0) { displist= glGenLists(1); - glNewList(displist, GL_COMPILE_AND_EXECUTE); + glNewList(displist, GL_COMPILE); glBegin(GL_LINE_STRIP); glVertex3fv(cube[0]); glVertex3fv(cube[1]);glVertex3fv(cube[2]); glVertex3fv(cube[3]); @@ -368,7 +366,9 @@ static void drawcube_size(float xsize, float ysize, float zsize) glEndList(); } - else glCallList(displist); + + glScalef(xsize, ysize, zsize); + glCallList(displist); } @@ -381,7 +381,7 @@ static void draw_bonevert(void) GLUquadricObj *qobj; displist= glGenLists(1); - glNewList(displist, GL_COMPILE_AND_EXECUTE); + glNewList(displist, GL_COMPILE); glPushMatrix(); @@ -400,8 +400,8 @@ static void draw_bonevert(void) glPopMatrix(); glEndList(); } - else - glCallList(displist); + + glCallList(displist); } static void draw_bonevert_solid(void) @@ -412,7 +412,7 @@ static void draw_bonevert_solid(void) GLUquadricObj *qobj; displist= glGenLists(1); - glNewList(displist, GL_COMPILE_AND_EXECUTE); + glNewList(displist, GL_COMPILE); qobj = gluNewQuadric(); gluQuadricDrawStyle(qobj, GLU_FILL); @@ -423,8 +423,8 @@ static void draw_bonevert_solid(void) glEndList(); } - else - glCallList(displist); + + glCallList(displist); } static void draw_bone_octahedral() @@ -435,7 +435,7 @@ static void draw_bone_octahedral() float vec[6][3]; displist= glGenLists(1); - glNewList(displist, GL_COMPILE_AND_EXECUTE); + glNewList(displist, GL_COMPILE); vec[0][0]= vec[0][1]= vec[0][2]= 0.0f; vec[5][0]= vec[5][2]= 0.0f; vec[5][1]= 1.0f; @@ -467,8 +467,8 @@ static void draw_bone_octahedral() glEndList(); } - else - glCallList(displist); + + glCallList(displist); } static void draw_bone_solid_octahedral(void) @@ -479,7 +479,7 @@ static void draw_bone_solid_octahedral(void) float vec[6][3], nor[3]; displist= glGenLists(1); - glNewList(displist, GL_COMPILE_AND_EXECUTE); + glNewList(displist, GL_COMPILE); vec[0][0]= vec[0][1]= vec[0][2]= 0.0f; vec[5][0]= vec[5][2]= 0.0f; vec[5][1]= 1.0f; @@ -529,8 +529,8 @@ static void draw_bone_solid_octahedral(void) glEndList(); } - else - glCallList(displist); + + glCallList(displist); } /* *************** Armature drawing, bones ******************* */ @@ -1933,7 +1933,7 @@ static void draw_ebones(View3D *v3d, ARegion *ar, Object *ob, int dt) if (v3d->zbuf) glDisable(GL_DEPTH_TEST); - for (eBone=arm->edbo->first, index=0; eBone; eBone=eBone->next, index++) { + for (eBone=arm->edbo->first; eBone; eBone=eBone->next) { if (eBone->layer & arm->layer) { if ((eBone->flag & (BONE_HIDDEN_A|BONE_NO_DEFORM))==0) { if (eBone->flag & (BONE_SELECTED|BONE_TIPSEL|BONE_ROOTSEL)) @@ -1949,7 +1949,6 @@ static void draw_ebones(View3D *v3d, ARegion *ar, Object *ob, int dt) /* if solid we draw it first */ if ((dt > OB_WIRE) && (arm->drawtype!=ARM_LINE)) { - index= 0; for (eBone=arm->edbo->first, index=0; eBone; eBone=eBone->next, index++) { if (eBone->layer & arm->layer) { if ((eBone->flag & BONE_HIDDEN_A)==0) { @@ -2043,6 +2042,7 @@ static void draw_ebones(View3D *v3d, ARegion *ar, Object *ob, int dt) } /* restore */ + if(index!=-1) glLoadName(-1); if (arm->drawtype==ARM_LINE); else if (dt>OB_WIRE) bglPolygonOffset(rv3d->dist, 0.0f); @@ -2054,7 +2054,7 @@ static void draw_ebones(View3D *v3d, ARegion *ar, Object *ob, int dt) if (v3d->zbuf) glDisable(GL_DEPTH_TEST); - for (eBone=arm->edbo->first, index=0; eBone; eBone=eBone->next, index++) { + for (eBone=arm->edbo->first; eBone; eBone=eBone->next) { if(eBone->layer & arm->layer) { if ((eBone->flag & BONE_HIDDEN_A)==0) { -- cgit v1.2.3 From 1e291017ca5a8831bbdc5714c54573bb6de3fcf1 Mon Sep 17 00:00:00 2001 From: Campbell Barton Date: Wed, 15 Sep 2010 13:22:36 +0000 Subject: add missing notifiers for bone circle/border/lasso select. --- source/blender/editors/space_view3d/view3d_select.c | 20 +++++++++++++++++--- 1 file changed, 17 insertions(+), 3 deletions(-) (limited to 'source/blender/editors/space_view3d') diff --git a/source/blender/editors/space_view3d/view3d_select.c b/source/blender/editors/space_view3d/view3d_select.c index 966fac1a3bd..cc1d26b136e 100644 --- a/source/blender/editors/space_view3d/view3d_select.c +++ b/source/blender/editors/space_view3d/view3d_select.c @@ -630,6 +630,7 @@ static void do_lasso_select_armature(ViewContext *vc, short mcords[][2], short m EditBone *ebone; float vec[3]; short sco1[2], sco2[2], didpoint; + int change= FALSE; /* set editdata in vc */ @@ -645,20 +646,27 @@ static void do_lasso_select_armature(ViewContext *vc, short mcords[][2], short m if(select) ebone->flag |= BONE_ROOTSEL; else ebone->flag &= ~BONE_ROOTSEL; didpoint= 1; + change= TRUE; } if(lasso_inside(mcords, moves, sco2[0], sco2[1])) { if(select) ebone->flag |= BONE_TIPSEL; else ebone->flag &= ~BONE_TIPSEL; didpoint= 1; + change= TRUE; } /* if one of points selected, we skip the bone itself */ if(didpoint==0 && lasso_inside_edge(mcords, moves, sco1[0], sco1[1], sco2[0], sco2[1])) { if(select) ebone->flag |= BONE_TIPSEL|BONE_ROOTSEL|BONE_SELECTED; else ebone->flag &= ~(BONE_SELECTED|BONE_TIPSEL|BONE_ROOTSEL); + change= TRUE; } } - ED_armature_sync_selection(arm->edbo); - ED_armature_validate_active(arm); + + if(change) { + ED_armature_sync_selection(arm->edbo); + ED_armature_validate_active(arm); + WM_main_add_notifier(NC_OBJECT|ND_BONE_SELECT, vc->obedit); + } } static void do_lasso_select_facemode(ViewContext *vc, short mcords[][2], short moves, short select) @@ -1593,6 +1601,7 @@ static int view3d_borderselect_exec(bContext *C, wmOperator *op) } ED_armature_sync_selection(arm->edbo); + WM_event_add_notifier(C, NC_OBJECT|ND_BONE_SELECT, vc.obedit); } else if(obedit->type==OB_LATTICE) { do_lattice_box_select(&vc, &rect, selecting, extend); @@ -1985,6 +1994,7 @@ static void armature_circle_select(ViewContext *vc, int selecting, short *mval, struct {ViewContext *vc; short select, mval[2]; float radius; } data; bArmature *arm= vc->obedit->data; EditBone *ebone; + int change= FALSE; /* set vc->edit data */ data.select = selecting; @@ -2023,10 +2033,14 @@ static void armature_circle_select(ViewContext *vc, int selecting, short *mval, ebone->flag |= BONE_TIPSEL|BONE_ROOTSEL|BONE_SELECTED; else ebone->flag &= ~(BONE_SELECTED|BONE_TIPSEL|BONE_ROOTSEL); + change= TRUE; } } - ED_armature_validate_active(arm); + if(change) { + ED_armature_validate_active(arm); + WM_main_add_notifier(NC_OBJECT|ND_BONE_SELECT, vc->obedit); + } } /** Callbacks for circle selection in Editmode */ -- cgit v1.2.3 From 26b41bd0b527b91374c1884dd1d541fabc3f04b3 Mon Sep 17 00:00:00 2001 From: Campbell Barton Date: Thu, 16 Sep 2010 06:04:47 +0000 Subject: bugfix [#23841] Bone envelope draws funky --- source/blender/editors/space_view3d/drawarmature.c | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) (limited to 'source/blender/editors/space_view3d') diff --git a/source/blender/editors/space_view3d/drawarmature.c b/source/blender/editors/space_view3d/drawarmature.c index 50798429801..c6aa4656191 100644 --- a/source/blender/editors/space_view3d/drawarmature.c +++ b/source/blender/editors/space_view3d/drawarmature.c @@ -655,6 +655,26 @@ static void draw_sphere_bone_dist(float smat[][4], float imat[][4], int boneflag mul_mat3_m4_v3(smat, dirvec); /* clear zcomp */ dirvec[2]= 0.0f; + + if(head != tail) { + /* correcyion when viewing along the bones axis + * it pops in and out but better then artifacts, [#23841] */ + float view_dist= len_v2(dirvec); + + if(head - view_dist > tail) { + tailvec= headvec; + tail = head; + zero_v3(dirvec); + dirvec[0]= 0.00001; // XXX. weak but ok + } + else if(tail - view_dist > head) { + headvec= tailvec; + head = tail; + zero_v3(dirvec); + dirvec[0]= 0.00001; // XXX. weak but ok + } + } + /* move vector back */ mul_mat3_m4_v3(imat, dirvec); -- cgit v1.2.3 From dea59cc5eb6562272df361c062f7ed226c2b7a36 Mon Sep 17 00:00:00 2001 From: Campbell Barton Date: Sat, 18 Sep 2010 03:55:56 +0000 Subject: warning fixes and minor cmake changes. --- source/blender/editors/space_view3d/CMakeLists.txt | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) (limited to 'source/blender/editors/space_view3d') diff --git a/source/blender/editors/space_view3d/CMakeLists.txt b/source/blender/editors/space_view3d/CMakeLists.txt index ca9ad001a40..48747898981 100644 --- a/source/blender/editors/space_view3d/CMakeLists.txt +++ b/source/blender/editors/space_view3d/CMakeLists.txt @@ -28,16 +28,16 @@ SET(INC ../../blenlib ../../gpu ../../imbuf - ../../../../intern/guardedalloc - ../../../../intern/smoke/extern ../../makesdna ../../makesrna - ../../render/extern/include ../../windowmanager + ../../render/extern/include + ../../../../intern/guardedalloc + ../../../../intern/smoke/extern ) IF(WITH_GAMEENGINE) - SET(INC ${INC} ../../../kernel/gen_system) + LIST(APPEND INC ../../../kernel/gen_system) ADD_DEFINITIONS(-DGAMEBLENDER) ENDIF(WITH_GAMEENGINE) -- cgit v1.2.3 From ce639f18d6cf87fa92b80b61b9a411c53516f4a0 Mon Sep 17 00:00:00 2001 From: Campbell Barton Date: Sun, 19 Sep 2010 06:41:44 +0000 Subject: fix for object centers size flickering when the view is far from the center (1000 or more units). --- source/blender/editors/space_view3d/view3d_draw.c | 20 +++++++++----------- source/blender/editors/space_view3d/view3d_intern.h | 1 + source/blender/editors/space_view3d/view3d_view.c | 4 ++++ 3 files changed, 14 insertions(+), 11 deletions(-) (limited to 'source/blender/editors/space_view3d') diff --git a/source/blender/editors/space_view3d/view3d_draw.c b/source/blender/editors/space_view3d/view3d_draw.c index fa394ff708a..801baae78c3 100644 --- a/source/blender/editors/space_view3d/view3d_draw.c +++ b/source/blender/editors/space_view3d/view3d_draw.c @@ -1979,20 +1979,18 @@ static void view3d_main_area_setup_view(Scene *scene, View3D *v3d, ARegion *ar, /* calculate pixelsize factor once, is used for lamps and obcenters */ { - float len1, len2, vec[3]; - - copy_v3_v3(vec, rv3d->persinv[0]); - len1= normalize_v3(vec); - copy_v3_v3(vec, rv3d->persinv[1]); - len2= normalize_v3(vec); - - rv3d->pixsize= 2.0f*(len1>len2?len1:len2); + rv3d->pixsize= 2.0f; + if(view3d_is_ortho(v3d, rv3d)) { + float len1= len_v3(rv3d->persinv[0]); + float len2= len_v3(rv3d->persinv[1]); + rv3d->pixsize *= MAX2(len1, len2); + } + /* correct for window size */ - if(ar->winx > ar->winy) rv3d->pixsize/= (float)ar->winx; - else rv3d->pixsize/= (float)ar->winy; + rv3d->pixsize/= (float)MAX2(ar->winx, ar->winy); } - + /* set for opengl */ glMatrixMode(GL_PROJECTION); glLoadMatrixf(rv3d->winmat); diff --git a/source/blender/editors/space_view3d/view3d_intern.h b/source/blender/editors/space_view3d/view3d_intern.h index 7a45a43ddd4..4065b159ccf 100644 --- a/source/blender/editors/space_view3d/view3d_intern.h +++ b/source/blender/editors/space_view3d/view3d_intern.h @@ -141,6 +141,7 @@ void VIEW3D_OT_select_lasso(struct wmOperatorType *ot); /* view3d_view.c */ void view3d_settings_from_ob(struct Object *ob, float *ofs, float *quat, float *dist, float *lens); +int view3d_is_ortho(View3D *v3d, RegionView3D *rv3d); void VIEW3D_OT_smoothview(struct wmOperatorType *ot); void VIEW3D_OT_setcameratoview(struct wmOperatorType *ot); diff --git a/source/blender/editors/space_view3d/view3d_view.c b/source/blender/editors/space_view3d/view3d_view.c index 6c35b8a7bea..6a3c121ce4b 100644 --- a/source/blender/editors/space_view3d/view3d_view.c +++ b/source/blender/editors/space_view3d/view3d_view.c @@ -2722,3 +2722,7 @@ void view3d_align_axis_to_vector(View3D *v3d, RegionView3D *rv3d, int axisidx, f } } +int view3d_is_ortho(View3D *v3d, RegionView3D *rv3d) +{ + return (rv3d->persp == RV3D_ORTHO || (v3d->camera && ((Camera *)v3d->camera->data)->type == CAM_ORTHO)); +} -- cgit v1.2.3 From a523ec4b8b6b7ebf3233bb52ee854b4565f3db74 Mon Sep 17 00:00:00 2001 From: Campbell Barton Date: Mon, 20 Sep 2010 11:54:54 +0000 Subject: fix for own recent commit, pixel size for lamp/object center needs to use the view matrix for perspective and ortho. --- source/blender/editors/space_view3d/view3d_draw.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'source/blender/editors/space_view3d') diff --git a/source/blender/editors/space_view3d/view3d_draw.c b/source/blender/editors/space_view3d/view3d_draw.c index 801baae78c3..a44f2b15d11 100644 --- a/source/blender/editors/space_view3d/view3d_draw.c +++ b/source/blender/editors/space_view3d/view3d_draw.c @@ -1981,7 +1981,7 @@ static void view3d_main_area_setup_view(Scene *scene, View3D *v3d, ARegion *ar, { rv3d->pixsize= 2.0f; - if(view3d_is_ortho(v3d, rv3d)) { + if(rv3d->persp == RV3D_ORTHO || v3d->camera) { /* camera view needs with for ortho & persp */ float len1= len_v3(rv3d->persinv[0]); float len2= len_v3(rv3d->persinv[1]); rv3d->pixsize *= MAX2(len1, len2); -- cgit v1.2.3 From efbda5c53e85f60221dcec8b0d8ec85da6f86bcc Mon Sep 17 00:00:00 2001 From: Brecht Van Lommel Date: Mon, 20 Sep 2010 21:57:29 +0000 Subject: Fix #23754: glsl + constructive curve modifier not drawing correct. --- source/blender/editors/space_view3d/drawobject.c | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) (limited to 'source/blender/editors/space_view3d') diff --git a/source/blender/editors/space_view3d/drawobject.c b/source/blender/editors/space_view3d/drawobject.c index 321281299ee..44fa0c7b181 100644 --- a/source/blender/editors/space_view3d/drawobject.c +++ b/source/blender/editors/space_view3d/drawobject.c @@ -3075,12 +3075,15 @@ static int drawCurveDerivedMesh(Scene *scene, View3D *v3d, RegionView3D *rv3d, B int glsl = draw_glsl_material(scene, ob, v3d, dt); GPU_begin_object_materials(v3d, rv3d, scene, ob, glsl, NULL); - if (!glsl) + if(!glsl) { glLightModeli(GL_LIGHT_MODEL_TWO_SIDE, 0); + glEnable(GL_LIGHTING); + dm->drawFacesSolid(dm, NULL, 0, GPU_enable_material); + glDisable(GL_LIGHTING); + } + else + dm->drawFacesGLSL(dm, GPU_enable_material); - glEnable(GL_LIGHTING); - dm->drawFacesSolid(dm, NULL, 0, GPU_enable_material); - glDisable(GL_LIGHTING); GPU_end_object_materials(); } else { if((v3d->flag2 & V3D_RENDER_OVERRIDE && v3d->drawtype >= OB_SOLID)==0) -- cgit v1.2.3 From 0bbc2cf88248485151b9dbaa90425dc3e2b1f4c4 Mon Sep 17 00:00:00 2001 From: Nathan Letwory Date: Wed, 22 Sep 2010 13:42:20 +0000 Subject: After discussion with Campbell (ideasman) on IRC I reorganized notifiers and created new one for visibility toggling (epilogue to r32052, fixing [#23944]). --- source/blender/editors/space_view3d/space_view3d.c | 1 + 1 file changed, 1 insertion(+) (limited to 'source/blender/editors/space_view3d') diff --git a/source/blender/editors/space_view3d/space_view3d.c b/source/blender/editors/space_view3d/space_view3d.c index a85881dd76b..c6b92fae1c0 100644 --- a/source/blender/editors/space_view3d/space_view3d.c +++ b/source/blender/editors/space_view3d/space_view3d.c @@ -591,6 +591,7 @@ static void view3d_main_area_listener(ARegion *ar, wmNotifier *wmn) case ND_TRANSFORM: case ND_OB_ACTIVE: case ND_OB_SELECT: + case ND_OB_VISIBLE: case ND_LAYER: case ND_RENDER_OPTIONS: case ND_MODE: -- cgit v1.2.3 From cc4e2dfa5994e3e152159dcf4f94c1c5bcfd5a97 Mon Sep 17 00:00:00 2001 From: Brecht Van Lommel Date: Thu, 23 Sep 2010 18:58:26 +0000 Subject: UI: for operator macro's, don't show internal ID name but UI name in redo panel. --- source/blender/editors/space_view3d/view3d_toolbar.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'source/blender/editors/space_view3d') diff --git a/source/blender/editors/space_view3d/view3d_toolbar.c b/source/blender/editors/space_view3d/view3d_toolbar.c index e47a3af19f1..6e2624cb60b 100644 --- a/source/blender/editors/space_view3d/view3d_toolbar.c +++ b/source/blender/editors/space_view3d/view3d_toolbar.c @@ -129,7 +129,7 @@ static void view3d_panel_operator_redo_operator(const bContext *C, Panel *pa, wm { if(op->type->flag & OPTYPE_MACRO) { for(op= op->macro.first; op; op= op->next) { - uiItemL(pa->layout, op->idname, 0); + uiItemL(pa->layout, op->type->name, 0); view3d_panel_operator_redo_operator(C, pa, op); } } -- cgit v1.2.3 From 3b17b7545149e504d31f99ffe23a692753860f6b Mon Sep 17 00:00:00 2001 From: Brecht Van Lommel Date: Thu, 23 Sep 2010 21:01:12 +0000 Subject: Fix #23005: circle select not working paint modes with face select. --- .../blender/editors/space_view3d/view3d_select.c | 93 ++++++++++++---------- 1 file changed, 49 insertions(+), 44 deletions(-) (limited to 'source/blender/editors/space_view3d') diff --git a/source/blender/editors/space_view3d/view3d_select.c b/source/blender/editors/space_view3d/view3d_select.c index cc1d26b136e..cc4defacb35 100644 --- a/source/blender/editors/space_view3d/view3d_select.c +++ b/source/blender/editors/space_view3d/view3d_select.c @@ -1833,61 +1833,61 @@ static void mesh_circle_select(ViewContext *vc, int selecting, short *mval, floa { ToolSettings *ts= vc->scene->toolsettings; int bbsel; - Object *ob= vc->obact; + struct {ViewContext *vc; short select, mval[2]; float radius; } data; - if(vc->obedit==NULL && paint_facesel_test(ob)) { - Mesh *me = ob?ob->data:NULL; + bbsel= EM_init_backbuf_circle(vc, mval[0], mval[1], (short)(rad+1.0)); + ED_view3d_init_mats_rv3d(vc->obedit, vc->rv3d); /* for foreach's screen/vert projection */ - if (me) { - em_vertoffs= me->totface+1; /* max index array */ + vc->em= ((Mesh *)vc->obedit->data)->edit_mesh; - bbsel= EM_init_backbuf_circle(vc, mval[0], mval[1], (short)(rad+1.0)); - EM_backbuf_checkAndSelectTFaces(me, selecting==LEFTMOUSE); - EM_free_backbuf(); + data.vc = vc; + data.select = selecting; + data.mval[0] = mval[0]; + data.mval[1] = mval[1]; + data.radius = rad; -// XXX object_tface_flags_changed(OBACT, 0); + if(ts->selectmode & SCE_SELECT_VERTEX) { + if(bbsel) { + EM_backbuf_checkAndSelectVerts(vc->em, selecting==LEFTMOUSE); + } else { + mesh_foreachScreenVert(vc, mesh_circle_doSelectVert, &data, 1); } } - else { - struct {ViewContext *vc; short select, mval[2]; float radius; } data; - - bbsel= EM_init_backbuf_circle(vc, mval[0], mval[1], (short)(rad+1.0)); - ED_view3d_init_mats_rv3d(vc->obedit, vc->rv3d); /* for foreach's screen/vert projection */ - vc->em= ((Mesh *)vc->obedit->data)->edit_mesh; + if(ts->selectmode & SCE_SELECT_EDGE) { + if (bbsel) { + EM_backbuf_checkAndSelectEdges(vc->em, selecting==LEFTMOUSE); + } else { + mesh_foreachScreenEdge(vc, mesh_circle_doSelectEdge, &data, 0); + } + } + + if(ts->selectmode & SCE_SELECT_FACE) { + if(bbsel) { + EM_backbuf_checkAndSelectFaces(vc->em, selecting==LEFTMOUSE); + } else { + mesh_foreachScreenFace(vc, mesh_circle_doSelectFace, &data); + } + } - data.vc = vc; - data.select = selecting; - data.mval[0] = mval[0]; - data.mval[1] = mval[1]; - data.radius = rad; + EM_free_backbuf(); + EM_selectmode_flush(vc->em); +} - if(ts->selectmode & SCE_SELECT_VERTEX) { - if(bbsel) { - EM_backbuf_checkAndSelectVerts(vc->em, selecting==LEFTMOUSE); - } else { - mesh_foreachScreenVert(vc, mesh_circle_doSelectVert, &data, 1); - } - } +static void paint_facesel_circle_select(ViewContext *vc, int selecting, short *mval, float rad) +{ + Object *ob= vc->obact; + Mesh *me = ob?ob->data:NULL; + int bbsel; - if(ts->selectmode & SCE_SELECT_EDGE) { - if (bbsel) { - EM_backbuf_checkAndSelectEdges(vc->em, selecting==LEFTMOUSE); - } else { - mesh_foreachScreenEdge(vc, mesh_circle_doSelectEdge, &data, 0); - } - } - - if(ts->selectmode & SCE_SELECT_FACE) { - if(bbsel) { - EM_backbuf_checkAndSelectFaces(vc->em, selecting==LEFTMOUSE); - } else { - mesh_foreachScreenFace(vc, mesh_circle_doSelectFace, &data); - } - } + if (me) { + em_vertoffs= me->totface+1; /* max index array */ + bbsel= EM_init_backbuf_circle(vc, mval[0], mval[1], (short)(rad+1.0)); + EM_backbuf_checkAndSelectTFaces(me, selecting==LEFTMOUSE); EM_free_backbuf(); - EM_selectmode_flush(vc->em); + +// XXX object_tface_flags_changed(OBACT, 0); } } @@ -2082,7 +2082,8 @@ static int view3d_circle_select_exec(bContext *C, wmOperator *op) selecting= (gesture_mode==GESTURE_MODAL_SELECT); - if(CTX_data_edit_object(C) || (obact && obact->mode & OB_MODE_PARTICLE_EDIT)) { + if(CTX_data_edit_object(C) || paint_facesel_test(obact) || + (obact && obact->mode & OB_MODE_PARTICLE_EDIT)) { ViewContext vc; short mval[2]; @@ -2096,6 +2097,10 @@ static int view3d_circle_select_exec(bContext *C, wmOperator *op) obedit_circle_select(&vc, selecting, mval, (float)radius); WM_event_add_notifier(C, NC_GEOM|ND_SELECT, obact->data); } + else if(paint_facesel_test(obact)) { + paint_facesel_circle_select(&vc, selecting, mval, (float)radius); + WM_event_add_notifier(C, NC_GEOM|ND_SELECT, obact->data); + } else return PE_circle_select(C, selecting, mval, (float)radius); } -- cgit v1.2.3 From 468e48982b9e3a5d37e1af80aa1cf9ff9e1a3b08 Mon Sep 17 00:00:00 2001 From: Sergey Sharybin Date: Sat, 25 Sep 2010 06:45:28 +0000 Subject: - Ignore selected handles if control point is selected when snapping cursor to selection (fixes #23966: Cursor to selected: incorrect behaviour in curves) - Keep handles' of selected vectors if control point is selected when snapping selection to grid/cursor - Added definitions to hard-coded numeric flags for make_trans_verts and removed unused proportional flag --- source/blender/editors/space_view3d/view3d_snap.c | 78 ++++++++++++++++------- 1 file changed, 55 insertions(+), 23 deletions(-) (limited to 'source/blender/editors/space_view3d') diff --git a/source/blender/editors/space_view3d/view3d_snap.c b/source/blender/editors/space_view3d/view3d_snap.c index a4e893a6181..5ee87db6b68 100644 --- a/source/blender/editors/space_view3d/view3d_snap.c +++ b/source/blender/editors/space_view3d/view3d_snap.c @@ -99,6 +99,37 @@ static void special_transvert_update(Scene *scene, Object *obedit) Nurb *nu= nurbs->first; while(nu) { + /* keep handles' vectors unchanged */ + if(nu->bezt) { + int a= nu->pntsu; + TransVert *tv= transvmain; + BezTriple *bezt= nu->bezt; + + while(a--) { + if(bezt->f1 & SELECT) tv++; + + if(bezt->f2 & SELECT) { + float v[3]; + + if(bezt->f1 & SELECT) { + sub_v3_v3v3(v, (tv-1)->oldloc, tv->oldloc); + add_v3_v3v3(bezt->vec[0], bezt->vec[1], v); + } + + if(bezt->f3 & SELECT) { + sub_v3_v3v3(v, (tv+1)->oldloc, tv->oldloc); + add_v3_v3v3(bezt->vec[2], bezt->vec[1], v); + } + + tv++; + } + + if(bezt->f3 & SELECT) tv++; + + bezt++; + } + } + test2DNurb(nu); testhandlesNurb(nu); /* test for bezier too */ nu= nu->next; @@ -152,7 +183,9 @@ static void special_transvert_update(Scene *scene, Object *obedit) } /* copied from editobject.c, needs to be replaced with new transform code still */ -/* mode: 1 = proportional, 2 = all joints (for bones only) */ +/* mode flags: */ +#define TM_ALL_JOINTS 1 /* all joints (for bones only) */ +#define TM_SKIP_HANDLES 2 /* skip handles when control point is selected (for curves only) */ static void make_trans_verts(Object *obedit, float *min, float *max, int mode) { Nurb *nu; @@ -173,7 +206,6 @@ static void make_trans_verts(Object *obedit, float *min, float *max, int mode) if(obedit->type==OB_MESH) { Mesh *me= obedit->data; EditMesh *em= me->edit_mesh; - int proptrans= 0; // transform now requires awareness for select mode, so we tag the f1 flags in verts tottrans= 0; @@ -206,17 +238,6 @@ static void make_trans_verts(Object *obedit, float *min, float *max, int mode) for(eve= em->verts.first; eve; eve= eve->next) if(eve->f1) tottrans++; } - /* proportional edit exception... */ - if((mode & 1) && tottrans) { - for(eve= em->verts.first; eve; eve= eve->next) { - if(eve->h==0) { - eve->f1 |= 2; - proptrans++; - } - } - if(proptrans>tottrans) tottrans= proptrans; - } - /* and now make transverts */ if(tottrans) { tv=transvmain= MEM_callocN(tottrans*sizeof(TransVert), "maketransverts"); @@ -248,7 +269,7 @@ static void make_trans_verts(Object *obedit, float *min, float *max, int mode) short rootok= (!(ebo->parent && (ebo->flag & BONE_CONNECTED) && ebo->parent->flag & BONE_TIPSEL)); if ((tipsel && rootsel) || (rootsel)) { - /* Don't add the tip (unless mode & 2, for getting all joints), + /* Don't add the tip (unless mode & TM_ALL_JOINTS, for getting all joints), * otherwise we get zero-length bones as tips will snap to the same * location as heads. */ @@ -261,7 +282,7 @@ static void make_trans_verts(Object *obedit, float *min, float *max, int mode) tottrans++; } - if ((mode & 2) && (tipsel)) { + if ((mode & TM_ALL_JOINTS) && (tipsel)) { VECCOPY (tv->oldloc, ebo->tail); tv->loc= ebo->tail; tv->nor= NULL; @@ -301,14 +322,18 @@ static void make_trans_verts(Object *obedit, float *min, float *max, int mode) bezt= nu->bezt; while(a--) { if(bezt->hide==0) { - if((mode & 1) || (bezt->f1 & SELECT)) { + int skip_handle= 0; + if(bezt->f2 & SELECT) + skip_handle= mode & TM_SKIP_HANDLES; + + if((bezt->f1 & SELECT) && !skip_handle) { VECCOPY(tv->oldloc, bezt->vec[0]); tv->loc= bezt->vec[0]; tv->flag= bezt->f1 & SELECT; tv++; tottrans++; } - if((mode & 1) || (bezt->f2 & SELECT)) { + if(bezt->f2 & SELECT) { VECCOPY(tv->oldloc, bezt->vec[1]); tv->loc= bezt->vec[1]; tv->val= &(bezt->alfa); @@ -317,7 +342,7 @@ static void make_trans_verts(Object *obedit, float *min, float *max, int mode) tv++; tottrans++; } - if((mode & 1) || (bezt->f3 & SELECT)) { + if((bezt->f3 & SELECT) && !skip_handle) { VECCOPY(tv->oldloc, bezt->vec[2]); tv->loc= bezt->vec[2]; tv->flag= bezt->f3 & SELECT; @@ -333,7 +358,7 @@ static void make_trans_verts(Object *obedit, float *min, float *max, int mode) bp= nu->bp; while(a--) { if(bp->hide==0) { - if((mode & 1) || (bp->f1 & SELECT)) { + if(bp->f1 & SELECT) { VECCOPY(tv->oldloc, bp->vec); tv->loc= bp->vec; tv->val= &(bp->alfa); @@ -376,10 +401,10 @@ static void make_trans_verts(Object *obedit, float *min, float *max, int mode) a= lt->editlatt->latt->pntsu*lt->editlatt->latt->pntsv*lt->editlatt->latt->pntsw; - tv=transvmain= MEM_callocN(a*sizeof(TransVert), "maketransverts curve"); + tv=transvmain= MEM_callocN(a*sizeof(TransVert), "maketransverts latt"); while(a--) { - if((mode & 1) || (bp->f1 & SELECT)) { + if(bp->f1 & SELECT) { if(bp->hide==0) { copy_v3_v3(tv->oldloc, bp->vec); tv->loc= bp->vec; @@ -392,6 +417,13 @@ static void make_trans_verts(Object *obedit, float *min, float *max, int mode) } } + if(!tottrans && transvmain) { + /* prevent memory leak. happens for curves/latticies due to */ + /* difficult condition of adding points to trans data */ + MEM_freeN(transvmain); + transvmain= NULL; + } + /* cent etc */ tv= transvmain; total= 0.0; @@ -727,7 +759,7 @@ static int snap_curs_to_sel(bContext *C, wmOperator *op) tottrans=0; if ELEM6(obedit->type, OB_ARMATURE, OB_LATTICE, OB_MESH, OB_SURF, OB_CURVE, OB_MBALL) - make_trans_verts(obedit, bmat[0], bmat[1], 2); + make_trans_verts(obedit, bmat[0], bmat[1], TM_ALL_JOINTS|TM_SKIP_HANDLES); if(tottrans==0) return OPERATOR_CANCELLED; copy_m3_m4(bmat, obedit->obmat); @@ -909,7 +941,7 @@ int minmax_verts(Object *obedit, float *min, float *max) tottrans=0; if ELEM5(obedit->type, OB_ARMATURE, OB_LATTICE, OB_MESH, OB_SURF, OB_CURVE) - make_trans_verts(obedit, bmat[0], bmat[1], 2); + make_trans_verts(obedit, bmat[0], bmat[1], TM_ALL_JOINTS); if(tottrans==0) return 0; -- cgit v1.2.3 From 11ce49830a2d8dfff1db293f88ecd601b0f3c8c7 Mon Sep 17 00:00:00 2001 From: Campbell Barton Date: Mon, 27 Sep 2010 10:44:46 +0000 Subject: bugfix [#24009] Crash when switching area types and performing ops tested every view3d operator to make sure none crash. --- source/blender/editors/space_view3d/view3d_edit.c | 16 ++++++++-------- source/blender/editors/space_view3d/view3d_select.c | 2 +- source/blender/editors/space_view3d/view3d_snap.c | 4 ++-- source/blender/editors/space_view3d/view3d_view.c | 2 +- 4 files changed, 12 insertions(+), 12 deletions(-) (limited to 'source/blender/editors/space_view3d') diff --git a/source/blender/editors/space_view3d/view3d_edit.c b/source/blender/editors/space_view3d/view3d_edit.c index e2c12386dd3..13e5d7bbc96 100644 --- a/source/blender/editors/space_view3d/view3d_edit.c +++ b/source/blender/editors/space_view3d/view3d_edit.c @@ -783,7 +783,7 @@ static int view3d_camera_active_poll(bContext *C) static int view3d_rotate_poll(bContext *C) { - if (!ED_operator_view3d_active(C)) { + if (!ED_operator_region_view3d_active(C)) { return 0; } else { RegionView3D *rv3d= CTX_wm_region_view3d(C); @@ -1264,7 +1264,7 @@ void VIEW3D_OT_zoom(wmOperatorType *ot) ot->invoke= viewzoom_invoke; ot->exec= viewzoom_exec; ot->modal= viewzoom_modal; - ot->poll= ED_operator_view3d_active; + ot->poll= ED_operator_region_view3d_active; /* flags */ ot->flag= OPTYPE_BLOCKING|OPTYPE_GRAB_POINTER; @@ -1522,7 +1522,7 @@ void VIEW3D_OT_view_selected(wmOperatorType *ot) /* api callbacks */ ot->exec= viewselected_exec; - ot->poll= ED_operator_view3d_active; + ot->poll= ED_operator_region_view3d_active; /* flags */ ot->flag= 0; @@ -1822,7 +1822,7 @@ void VIEW3D_OT_zoom_border(wmOperatorType *ot) ot->exec= view3d_zoom_border_exec; ot->modal= WM_border_select_modal; - ot->poll= ED_operator_view3d_active; + ot->poll= ED_operator_region_view3d_active; /* flags */ ot->flag= 0; @@ -2044,7 +2044,7 @@ void VIEW3D_OT_viewnumpad(wmOperatorType *ot) /* api callbacks */ ot->exec= viewnumpad_exec; - ot->poll= ED_operator_view3d_active; + ot->poll= ED_operator_region_view3d_active; /* flags */ ot->flag= 0; @@ -2162,7 +2162,7 @@ void VIEW3D_OT_view_pan(wmOperatorType *ot) /* api callbacks */ ot->exec= viewpan_exec; - ot->poll= ED_operator_view3d_active; + ot->poll= ED_operator_region_view3d_active; /* flags */ ot->flag= 0; @@ -2194,7 +2194,7 @@ void VIEW3D_OT_view_persportho(wmOperatorType *ot) /* api callbacks */ ot->exec= viewpersportho_exec; - ot->poll= ED_operator_view3d_active; + ot->poll= ED_operator_region_view3d_active; /* flags */ ot->flag= 0; @@ -2413,7 +2413,7 @@ void VIEW3D_OT_clip_border(wmOperatorType *ot) ot->exec= view3d_clipping_exec; ot->modal= WM_border_select_modal; - ot->poll= ED_operator_view3d_active; + ot->poll= ED_operator_region_view3d_active; /* flags */ ot->flag= 0; diff --git a/source/blender/editors/space_view3d/view3d_select.c b/source/blender/editors/space_view3d/view3d_select.c index cc4defacb35..7e6e8e0e6af 100644 --- a/source/blender/editors/space_view3d/view3d_select.c +++ b/source/blender/editors/space_view3d/view3d_select.c @@ -215,7 +215,7 @@ static int view3d_selectable_data(bContext *C) { Object *ob = CTX_data_active_object(C); - if (!ED_operator_view3d_active(C)) + if (!ED_operator_region_view3d_active(C)) return 0; if (!CTX_data_edit_object(C)) diff --git a/source/blender/editors/space_view3d/view3d_snap.c b/source/blender/editors/space_view3d/view3d_snap.c index 5ee87db6b68..7f5f7665028 100644 --- a/source/blender/editors/space_view3d/view3d_snap.c +++ b/source/blender/editors/space_view3d/view3d_snap.c @@ -569,7 +569,7 @@ void VIEW3D_OT_snap_selected_to_grid(wmOperatorType *ot) /* api callbacks */ ot->exec= snap_sel_to_grid; - ot->poll= ED_operator_view3d_active; + ot->poll= ED_operator_region_view3d_active; /* flags */ ot->flag= OPTYPE_REGISTER|OPTYPE_UNDO; @@ -732,7 +732,7 @@ void VIEW3D_OT_snap_cursor_to_grid(wmOperatorType *ot) /* api callbacks */ ot->exec= snap_curs_to_grid; - ot->poll= ED_operator_view3d_active; + ot->poll= ED_operator_region_view3d_active; /* flags */ ot->flag= OPTYPE_REGISTER|OPTYPE_UNDO; diff --git a/source/blender/editors/space_view3d/view3d_view.c b/source/blender/editors/space_view3d/view3d_view.c index 6a3c121ce4b..146e90baeb1 100644 --- a/source/blender/editors/space_view3d/view3d_view.c +++ b/source/blender/editors/space_view3d/view3d_view.c @@ -472,7 +472,7 @@ void VIEW3D_OT_object_as_camera(wmOperatorType *ot) /* api callbacks */ ot->exec= view3d_setobjectascamera_exec; - ot->poll= ED_operator_view3d_active; + ot->poll= ED_operator_region_view3d_active; /* flags */ ot->flag= OPTYPE_REGISTER|OPTYPE_UNDO; -- cgit v1.2.3 From d6c8b411446793dd23a54734ce8ee621a755ab3e Mon Sep 17 00:00:00 2001 From: Campbell Barton Date: Mon, 27 Sep 2010 12:21:23 +0000 Subject: added CTX_wm_operator_poll_msg_get/set so failing poll functions can set messages when poll fails, at the moment only python uses this but theres nothing python specific. only added 1 message to a poll function, so messages still need to be set in many more places to be useful. --- source/blender/editors/space_view3d/view3d_edit.c | 1 - 1 file changed, 1 deletion(-) (limited to 'source/blender/editors/space_view3d') diff --git a/source/blender/editors/space_view3d/view3d_edit.c b/source/blender/editors/space_view3d/view3d_edit.c index 13e5d7bbc96..06d93f01e02 100644 --- a/source/blender/editors/space_view3d/view3d_edit.c +++ b/source/blender/editors/space_view3d/view3d_edit.c @@ -1811,7 +1811,6 @@ static int view3d_zoom_border_invoke(bContext *C, wmOperator *op, wmEvent *event void VIEW3D_OT_zoom_border(wmOperatorType *ot) { - /* identifiers */ ot->name= "Border Zoom"; ot->description = "Zoom in the view to the nearest object contained in the border"; -- cgit v1.2.3 From 4b33deeb02ffce4e1e2c0adb5a709f94eb214e8a Mon Sep 17 00:00:00 2001 From: Nathan Letwory Date: Mon, 27 Sep 2010 21:22:20 +0000 Subject: Fix [#23977] toggle back to object mode not working (outliner issue) Reported by Roland Kramer There was already code to prevent visibility toggle through restrict column from working when in edit mode. Reshuffled code somewhat so it works also for object operations in outliner. Also ensure operator poll for visibility and selectability toggle checks object is not in edit mode. So this also works for selectability toggling, so no more toggling when in edit mode - it's confusing otherwise. Added notifier and handling for it for renderability toggle in outliner. No edit mode restriction here. --- source/blender/editors/space_view3d/space_view3d.c | 2 ++ 1 file changed, 2 insertions(+) (limited to 'source/blender/editors/space_view3d') diff --git a/source/blender/editors/space_view3d/space_view3d.c b/source/blender/editors/space_view3d/space_view3d.c index c6b92fae1c0..a49ada8a4c9 100644 --- a/source/blender/editors/space_view3d/space_view3d.c +++ b/source/blender/editors/space_view3d/space_view3d.c @@ -726,6 +726,7 @@ static void view3d_header_area_listener(ARegion *ar, wmNotifier *wmn) case ND_FRAME: case ND_OB_ACTIVE: case ND_OB_SELECT: + case ND_OB_VISIBLE: case ND_MODE: case ND_LAYER: case ND_TOOLSETTINGS: @@ -779,6 +780,7 @@ static void view3d_buttons_area_listener(ARegion *ar, wmNotifier *wmn) case ND_FRAME: case ND_OB_ACTIVE: case ND_OB_SELECT: + case ND_OB_VISIBLE: case ND_MODE: case ND_LAYER: case ND_LAYER_CONTENT: -- cgit v1.2.3 From 690397efb2ab7b18de88a299cb3d08b8646caa25 Mon Sep 17 00:00:00 2001 From: Campbell Barton Date: Tue, 28 Sep 2010 04:25:16 +0000 Subject: bugfix [#23908] Irratic manipulator scale at far out distances --- source/blender/editors/space_view3d/drawobject.c | 13 ++++++------- source/blender/editors/space_view3d/view3d_draw.c | 20 +++++++++----------- 2 files changed, 15 insertions(+), 18 deletions(-) (limited to 'source/blender/editors/space_view3d') diff --git a/source/blender/editors/space_view3d/drawobject.c b/source/blender/editors/space_view3d/drawobject.c index 44fa0c7b181..d636a544e5b 100644 --- a/source/blender/editors/space_view3d/drawobject.c +++ b/source/blender/editors/space_view3d/drawobject.c @@ -523,12 +523,11 @@ void drawcircball(int mode, float *cent, float rad, float tmat[][4]) } /* circle for object centers, special_color is for library or ob users */ -static void drawcentercircle(View3D *v3d, RegionView3D *rv3d, float *vec, int selstate, int special_color) +static void drawcentercircle(View3D *v3d, RegionView3D *rv3d, float *co, int selstate, int special_color) { - float size; - - size= rv3d->persmat[0][3]*vec[0]+ rv3d->persmat[1][3]*vec[1]+ rv3d->persmat[2][3]*vec[2]+ rv3d->persmat[3][3]; - size*= rv3d->pixsize*((float)U.obcenter_dia*0.5f); + float vec[3]= {rv3d->persmat[0][3], rv3d->persmat[1][3], rv3d->persmat[2][3]}; + float size= rv3d->pixsize*((float)U.obcenter_dia*0.5f); + size *= dot_v3v3(vec, co) + rv3d->persmat[3][3]; /* using gldepthfunc guarantees that it does write z values, but not checks for it, so centers remain visible independt order of drawing */ if(v3d->zbuf) glDepthFunc(GL_ALWAYS); @@ -544,10 +543,10 @@ static void drawcentercircle(View3D *v3d, RegionView3D *rv3d, float *vec, int se else if (selstate == SELECT) UI_ThemeColorShadeAlpha(TH_SELECT, 0, -80); else if (selstate == DESELECT) UI_ThemeColorShadeAlpha(TH_TRANSFORM, 0, -80); } - drawcircball(GL_POLYGON, vec, size, rv3d->viewinv); + drawcircball(GL_POLYGON, co, size, rv3d->viewinv); UI_ThemeColorShadeAlpha(TH_WIRE, 0, -30); - drawcircball(GL_LINE_LOOP, vec, size, rv3d->viewinv); + drawcircball(GL_LINE_LOOP, co, size, rv3d->viewinv); glDisable(GL_BLEND); if(v3d->zbuf) glDepthFunc(GL_LEQUAL); diff --git a/source/blender/editors/space_view3d/view3d_draw.c b/source/blender/editors/space_view3d/view3d_draw.c index a44f2b15d11..2054761bd43 100644 --- a/source/blender/editors/space_view3d/view3d_draw.c +++ b/source/blender/editors/space_view3d/view3d_draw.c @@ -1976,19 +1976,17 @@ static void view3d_main_area_setup_view(Scene *scene, View3D *v3d, ARegion *ar, mul_m4_m4m4(rv3d->persmat, rv3d->viewmat, rv3d->winmat); invert_m4_m4(rv3d->persinv, rv3d->persmat); invert_m4_m4(rv3d->viewinv, rv3d->viewmat); - + /* calculate pixelsize factor once, is used for lamps and obcenters */ { - rv3d->pixsize= 2.0f; - - if(rv3d->persp == RV3D_ORTHO || v3d->camera) { /* camera view needs with for ortho & persp */ - float len1= len_v3(rv3d->persinv[0]); - float len2= len_v3(rv3d->persinv[1]); - rv3d->pixsize *= MAX2(len1, len2); - } - - /* correct for window size */ - rv3d->pixsize/= (float)MAX2(ar->winx, ar->winy); + /* note: '1.0f / len_v3(v1)' replaced 'len_v3(rv3d->viewmat[0])' + * because of float point precission problems at large values [#23908] */ + float v1[3]= {rv3d->persmat[0][0], rv3d->persmat[1][0], rv3d->persmat[2][0]}; + float v2[3]= {rv3d->persmat[0][1], rv3d->persmat[1][1], rv3d->persmat[2][1]}; + float len1= 1.0f / len_v3(v1); + float len2= 1.0f / len_v3(v2); + + rv3d->pixsize = (2.0f * MAX2(len1, len2)) / (float)MAX2(ar->winx, ar->winy); } /* set for opengl */ -- cgit v1.2.3 From 2e44e06450d334503771626c647c03c99e4671a0 Mon Sep 17 00:00:00 2001 From: Campbell Barton Date: Fri, 1 Oct 2010 13:27:59 +0000 Subject: minor adjustment to camera object drawing so arrow stays same size independent of aspect. --- source/blender/editors/space_view3d/drawobject.c | 17 ++++++++--------- 1 file changed, 8 insertions(+), 9 deletions(-) (limited to 'source/blender/editors/space_view3d') diff --git a/source/blender/editors/space_view3d/drawobject.c b/source/blender/editors/space_view3d/drawobject.c index d636a544e5b..30b12b96ed5 100644 --- a/source/blender/editors/space_view3d/drawobject.c +++ b/source/blender/editors/space_view3d/drawobject.c @@ -1281,17 +1281,16 @@ static void drawcamera(Scene *scene, View3D *v3d, RegionView3D *rv3d, Object *ob else if (i==1 && (ob == v3d->camera)) glBegin(GL_TRIANGLES); else break; - vec[0][0]= -0.7*cam->drawsize*caspx; - vec[0][1]= 1.1*cam->drawsize*caspy; - glVertex3fv(vec[0]); + vec[0][0]= -0.7 * cam->drawsize; + vec[0][1]= cam->drawsize * (caspy + 0.1); + glVertex3fv(vec[0]); /* left */ - vec[0][0]= 0.0; - vec[0][1]= 1.8*cam->drawsize*caspy; - glVertex3fv(vec[0]); + vec[0][0] *= -1.0; + glVertex3fv(vec[0]); /* right */ - vec[0][0]= 0.7*cam->drawsize*caspx; - vec[0][1]= 1.1*cam->drawsize*caspy; - glVertex3fv(vec[0]); + vec[0][0]= 0.0; + vec[0][1]= 1.1 * cam->drawsize * (caspy + 0.7); + glVertex3fv(vec[0]); /* top */ glEnd(); } -- cgit v1.2.3 From 1410df2f143fda0e21eef3e778ca5b6572d301cd Mon Sep 17 00:00:00 2001 From: Sergey Sharybin Date: Sat, 2 Oct 2010 09:28:41 +0000 Subject: Fix #23629: Layers doesn't sign there are objects on them, only if the object is selected Also fixed layer buttons update when changing scene/screen --- source/blender/editors/space_view3d/space_view3d.c | 50 ++++++++++++++-------- source/blender/editors/space_view3d/view3d_draw.c | 20 ++++++++- 2 files changed, 51 insertions(+), 19 deletions(-) (limited to 'source/blender/editors/space_view3d') diff --git a/source/blender/editors/space_view3d/space_view3d.c b/source/blender/editors/space_view3d/space_view3d.c index a49ada8a4c9..4c9d8f88dd1 100644 --- a/source/blender/editors/space_view3d/space_view3d.c +++ b/source/blender/editors/space_view3d/space_view3d.c @@ -529,30 +529,30 @@ static void *view3d_main_area_duplicate(void *poin) return NULL; } -static void view3d_recalc_used_layers(ARegion *ar, wmNotifier *wmn) +static void view3d_recalc_used_layers(ARegion *ar, wmNotifier *wmn, Scene *scene) { wmWindow *win= wmn->wm->winactive; ScrArea *sa; + int lay_used= 0; + Base *base; if (!win) return; - sa= win->screen->areabase.first; + base= scene->base.first; + while(base) { + lay_used|= base->lay; + + if (lay_used & (1<<20-1)) break; + + base= base->next; + } + sa= win->screen->areabase.first; while(sa) { if(sa->spacetype == SPACE_VIEW3D) if(BLI_findindex(&sa->regionbase, ar) >= 0) { View3D *v3d= sa->spacedata.first; - Scene *scene= wmn->reference; - Base *base; - - v3d->lay_used= 0; - base= scene->base.first; - while(base) { - v3d->lay_used|= base->lay; - - base= base->next; - } - + v3d->lay_used= lay_used; break; } @@ -562,6 +562,8 @@ static void view3d_recalc_used_layers(ARegion *ar, wmNotifier *wmn) static void view3d_main_area_listener(ARegion *ar, wmNotifier *wmn) { + bScreen *sc; + /* context changes */ switch(wmn->category) { case NC_ANIMATION: @@ -584,7 +586,7 @@ static void view3d_main_area_listener(ARegion *ar, wmNotifier *wmn) case NC_SCENE: switch(wmn->data) { case ND_LAYER_CONTENT: - view3d_recalc_used_layers(ar, wmn); + view3d_recalc_used_layers(ar, wmn, wmn->reference); ED_region_tag_redraw(ar); break; case ND_FRAME: @@ -681,10 +683,22 @@ static void view3d_main_area_listener(ARegion *ar, wmNotifier *wmn) ED_region_tag_redraw(ar); break; case NC_SCREEN: - if(wmn->data == ND_GPENCIL) - ED_region_tag_redraw(ar); - else if(wmn->data==ND_ANIMPLAY) - ED_region_tag_redraw(ar); + switch(wmn->data) { + case ND_GPENCIL: + case ND_ANIMPLAY: + ED_region_tag_redraw(ar); + break; + case ND_SCREENBROWSE: + case ND_SCREENDELETE: + case ND_SCREENSET: + /* screen was changed, need to update used layers due to NC_SCENE|ND_LAYER_CONTENT */ + /* updates used layers only for View3D in active screen */ + sc= wmn->reference; + view3d_recalc_used_layers(ar, wmn, sc->scene); + ED_region_tag_redraw(ar); + break; + } + break; } } diff --git a/source/blender/editors/space_view3d/view3d_draw.c b/source/blender/editors/space_view3d/view3d_draw.c index 2054761bd43..871057801f8 100644 --- a/source/blender/editors/space_view3d/view3d_draw.c +++ b/source/blender/editors/space_view3d/view3d_draw.c @@ -2260,7 +2260,7 @@ void view3d_main_area_draw(const bContext *C, ARegion *ar) Base *base; Object *ob; float backcol[3]; - int retopo= 0, sculptparticle= 0; + int retopo= 0, sculptparticle= 0, lay_used= 0; Object *obact = OBACT; char *grid_unit= NULL; @@ -2363,8 +2363,12 @@ void view3d_main_area_draw(const bContext *C, ARegion *ar) /* Transp and X-ray afterdraw stuff for sets is done later */ } + lay_used= 0; + /* then draw not selected and the duplis, but skip editmode object */ for(base= scene->base.first; base; base= base->next) { + lay_used |= base->lay; + if(v3d->lay & base->lay) { /* dupli drawing */ @@ -2378,6 +2382,20 @@ void view3d_main_area_draw(const bContext *C, ARegion *ar) } } + if(v3d->lay_used != lay_used) { /* happens when loading old files or loading with UI load */ + ARegion *ar; + ScrArea *sa= CTX_wm_area(C); + + /* find header and force tag redraw */ + for(ar= sa->regionbase.first; ar; ar= ar->next) + if(ar->regiontype==RGN_TYPE_HEADER) { + ED_region_tag_redraw(ar); + break; + } + + v3d->lay_used= lay_used; + } + // retopo= retopo_mesh_check() || retopo_curve_check(); sculptparticle= (obact && obact->mode & (OB_MODE_PARTICLE_EDIT)) && !scene->obedit; if(retopo) -- cgit v1.2.3 From a6e78239424fa735fd71dd03a4c9501aa6635d9a Mon Sep 17 00:00:00 2001 From: Campbell Barton Date: Sat, 2 Oct 2010 19:31:23 +0000 Subject: make fly mode border draw into a area drawing callback rather then using a flag (no functional change). --- source/blender/editors/space_view3d/view3d_draw.c | 50 +------------------- source/blender/editors/space_view3d/view3d_view.c | 57 ++++++++++++++++++++++- 2 files changed, 57 insertions(+), 50 deletions(-) (limited to 'source/blender/editors/space_view3d') diff --git a/source/blender/editors/space_view3d/view3d_draw.c b/source/blender/editors/space_view3d/view3d_draw.c index 871057801f8..6d61123de24 100644 --- a/source/blender/editors/space_view3d/view3d_draw.c +++ b/source/blender/editors/space_view3d/view3d_draw.c @@ -926,52 +926,6 @@ void view3d_set_1_to_1_viewborder(Scene *scene, ARegion *ar) rv3d->camzoom= CLAMPIS(rv3d->camzoom, RV3D_CAMZOOM_MIN, RV3D_CAMZOOM_MAX); } - -static void drawviewborder_flymode(ARegion *ar) -{ - /* draws 4 edge brackets that frame the safe area where the - mouse can move during fly mode without spinning the view */ - float x1, x2, y1, y2; - - x1= 0.45*(float)ar->winx; - y1= 0.45*(float)ar->winy; - x2= 0.55*(float)ar->winx; - y2= 0.55*(float)ar->winy; - cpack(0); - - - glBegin(GL_LINES); - /* bottom left */ - glVertex2f(x1,y1); - glVertex2f(x1,y1+5); - - glVertex2f(x1,y1); - glVertex2f(x1+5,y1); - - /* top right */ - glVertex2f(x2,y2); - glVertex2f(x2,y2-5); - - glVertex2f(x2,y2); - glVertex2f(x2-5,y2); - - /* top left */ - glVertex2f(x1,y2); - glVertex2f(x1,y2-5); - - glVertex2f(x1,y2); - glVertex2f(x1+5,y2); - - /* bottom right */ - glVertex2f(x2,y1); - glVertex2f(x2,y1+5); - - glVertex2f(x2,y1); - glVertex2f(x2-5,y1); - glEnd(); -} - - static void drawviewborder(Scene *scene, ARegion *ar, View3D *v3d) { float fac, a; @@ -2456,8 +2410,8 @@ void view3d_main_area_draw(const bContext *C, ARegion *ar) /* Draw particle edit brush XXX (removed) */ - if(rv3d->persp==RV3D_CAMOB) drawviewborder(scene, ar, v3d); - if(rv3d->rflag & RV3D_FLYMODE) drawviewborder_flymode(ar); + if(rv3d->persp==RV3D_CAMOB) + drawviewborder(scene, ar, v3d); if ((v3d->flag2 & V3D_RENDER_OVERRIDE)==0) { /* draw grease-pencil stuff - needed to get paint-buffer shown too (since it's 2D) */ diff --git a/source/blender/editors/space_view3d/view3d_view.c b/source/blender/editors/space_view3d/view3d_view.c index 146e90baeb1..ebfa77a4a15 100644 --- a/source/blender/editors/space_view3d/view3d_view.c +++ b/source/blender/editors/space_view3d/view3d_view.c @@ -64,6 +64,7 @@ #include "ED_keyframing.h" #include "ED_screen.h" #include "ED_armature.h" +#include "ED_space_api.h" #include "GPU_draw.h" @@ -1973,11 +1974,59 @@ typedef struct FlyInfo { double time_lastwheel; /* used to accelerate when using the mousewheel a lot */ double time_lastdraw; /* time between draws */ + void *draw_handle_pixel; + /* use for some lag */ float dvec_prev[3]; /* old for some lag */ } FlyInfo; +static void drawFlyPixel(const struct bContext *C, struct ARegion *ar, void *arg) +{ + FlyInfo *fly = arg; + + /* draws 4 edge brackets that frame the safe area where the + mouse can move during fly mode without spinning the view */ + float x1, x2, y1, y2; + + x1= 0.45*(float)fly->ar->winx; + y1= 0.45*(float)fly->ar->winy; + x2= 0.55*(float)fly->ar->winx; + y2= 0.55*(float)fly->ar->winy; + cpack(0); + + + glBegin(GL_LINES); + /* bottom left */ + glVertex2f(x1,y1); + glVertex2f(x1,y1+5); + + glVertex2f(x1,y1); + glVertex2f(x1+5,y1); + + /* top right */ + glVertex2f(x2,y2); + glVertex2f(x2,y2-5); + + glVertex2f(x2,y2); + glVertex2f(x2-5,y2); + + /* top left */ + glVertex2f(x1,y2); + glVertex2f(x1,y2-5); + + glVertex2f(x1,y2); + glVertex2f(x1+5,y2); + + /* bottom right */ + glVertex2f(x2,y1); + glVertex2f(x2,y1+5); + + glVertex2f(x2,y1); + glVertex2f(x2-5,y1); + glEnd(); +} + /* FlyInfo->state */ #define FLY_RUNNING 0 #define FLY_CANCEL 1 @@ -2029,7 +2078,9 @@ static int initFlyInfo (bContext *C, FlyInfo *fly, wmOperator *op, wmEvent *even fly->time_lastdraw= fly->time_lastwheel= PIL_check_seconds_timer(); - fly->rv3d->rflag |= RV3D_FLYMODE|RV3D_NAVIGATING; /* so we draw the corner margins */ + fly->draw_handle_pixel = ED_region_draw_cb_activate(fly->ar->type, drawFlyPixel, fly, REGION_DRAW_POST_PIXEL); + + fly->rv3d->rflag |= RV3D_NAVIGATING; /* so we draw the corner margins */ /* detect weather to start with Z locking */ upvec[0]=1.0f; upvec[1]=0.0f; upvec[2]=0.0f; @@ -2094,6 +2145,8 @@ static int flyEnd(bContext *C, FlyInfo *fly) WM_event_remove_timer(CTX_wm_manager(C), CTX_wm_window(C), fly->timer); + ED_region_draw_cb_exit(fly->ar->type, fly->draw_handle_pixel); + rv3d->dist= fly->dist_backup; if (fly->state == FLY_CANCEL) { @@ -2146,7 +2199,7 @@ static int flyEnd(bContext *C, FlyInfo *fly) /*Done with correcting for the dist */ } - rv3d->rflag &= ~(RV3D_FLYMODE|RV3D_NAVIGATING); + rv3d->rflag &= ~RV3D_NAVIGATING; //XXX2.5 BIF_view3d_previewrender_signal(fly->sa, PR_DBASE|PR_DISPRECT); /* not working at the moment not sure why */ if(fly->obtfm) -- cgit v1.2.3 From 3aef138175496d059ce483f9e097eaff063b7a69 Mon Sep 17 00:00:00 2001 From: Campbell Barton Date: Sat, 2 Oct 2010 19:38:09 +0000 Subject: for view layer calculation, only break early if all layers are set, was breaking if any layer was set. --- source/blender/editors/space_view3d/space_view3d.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) (limited to 'source/blender/editors/space_view3d') diff --git a/source/blender/editors/space_view3d/space_view3d.c b/source/blender/editors/space_view3d/space_view3d.c index 4c9d8f88dd1..6dc37313698 100644 --- a/source/blender/editors/space_view3d/space_view3d.c +++ b/source/blender/editors/space_view3d/space_view3d.c @@ -542,7 +542,8 @@ static void view3d_recalc_used_layers(ARegion *ar, wmNotifier *wmn, Scene *scene while(base) { lay_used|= base->lay; - if (lay_used & (1<<20-1)) break; + if ((lay_used & ((1<<20)-1)) == (1<<20)-1) + break; base= base->next; } -- cgit v1.2.3 From 1d2b96fa81a4d9ee82e328e144302192a3d95d3f Mon Sep 17 00:00:00 2001 From: Campbell Barton Date: Sat, 2 Oct 2010 19:45:53 +0000 Subject: set the view3d used layer to be an unsigned int, mask out localview layers to avoid flag mismatch when checking if it changed. --- source/blender/editors/space_view3d/space_view3d.c | 6 +++--- source/blender/editors/space_view3d/view3d_draw.c | 5 +++-- 2 files changed, 6 insertions(+), 5 deletions(-) (limited to 'source/blender/editors/space_view3d') diff --git a/source/blender/editors/space_view3d/space_view3d.c b/source/blender/editors/space_view3d/space_view3d.c index 6dc37313698..8a215834c38 100644 --- a/source/blender/editors/space_view3d/space_view3d.c +++ b/source/blender/editors/space_view3d/space_view3d.c @@ -533,16 +533,16 @@ static void view3d_recalc_used_layers(ARegion *ar, wmNotifier *wmn, Scene *scene { wmWindow *win= wmn->wm->winactive; ScrArea *sa; - int lay_used= 0; + unsigned int lay_used= 0; Base *base; if (!win) return; base= scene->base.first; while(base) { - lay_used|= base->lay; + lay_used |= base->lay & ((1<<20)-1); /* ignore localview */ - if ((lay_used & ((1<<20)-1)) == (1<<20)-1) + if (lay_used == (1<<20)-1) break; base= base->next; diff --git a/source/blender/editors/space_view3d/view3d_draw.c b/source/blender/editors/space_view3d/view3d_draw.c index 6d61123de24..24f71b8b1df 100644 --- a/source/blender/editors/space_view3d/view3d_draw.c +++ b/source/blender/editors/space_view3d/view3d_draw.c @@ -2214,7 +2214,8 @@ void view3d_main_area_draw(const bContext *C, ARegion *ar) Base *base; Object *ob; float backcol[3]; - int retopo= 0, sculptparticle= 0, lay_used= 0; + int retopo= 0, sculptparticle= 0; + unsigned int lay_used; Object *obact = OBACT; char *grid_unit= NULL; @@ -2321,7 +2322,7 @@ void view3d_main_area_draw(const bContext *C, ARegion *ar) /* then draw not selected and the duplis, but skip editmode object */ for(base= scene->base.first; base; base= base->next) { - lay_used |= base->lay; + lay_used |= base->lay & ((1<<20)-1); if(v3d->lay & base->lay) { -- cgit v1.2.3 From 05884e09beed97669fbec4d35b4e9427bfe997d3 Mon Sep 17 00:00:00 2001 From: Campbell Barton Date: Sun, 3 Oct 2010 01:44:00 +0000 Subject: - rna bugfix where ints were not clamped and would overflow, now raise an error and print valid range. - fixed WM_OT_context_cycle_int was causing problems with int overflow, now it cycles properly. - rename QUOTE macro to STRINGIFY_ARG, and added STRINGIFY, which is used more often since it gives the value as a string. --- source/blender/editors/space_view3d/view3d_view.c | 9 --------- 1 file changed, 9 deletions(-) (limited to 'source/blender/editors/space_view3d') diff --git a/source/blender/editors/space_view3d/view3d_view.c b/source/blender/editors/space_view3d/view3d_view.c index ebfa77a4a15..d66144b2c30 100644 --- a/source/blender/editors/space_view3d/view3d_view.c +++ b/source/blender/editors/space_view3d/view3d_view.c @@ -2177,15 +2177,6 @@ static int flyEnd(bContext *C, FlyInfo *fly) object_mat3_to_rot(v3d->camera, mat3, TRUE); DAG_id_flush_update(&v3d->camera->id, OB_RECALC_OB); } - -#if 0 //XXX2.5 - if (IS_AUTOKEY_MODE(NORMAL)) { - allqueue(REDRAWIPO, 0); - allspace(REMAKEIPO, 0); - allqueue(REDRAWNLA, 0); - allqueue(REDRAWTIME, 0); - } -#endif } else { /* not camera */ /* Apply the fly mode view */ -- cgit v1.2.3 From a7258c96512d45f2392e13f5d5c8fb6edf651a00 Mon Sep 17 00:00:00 2001 From: Campbell Barton Date: Tue, 5 Oct 2010 11:16:07 +0000 Subject: - fix for crash when drawing a subsurf after a modifier that lost original indices (bevel/screw/decimate) - fix for own mistake used madd_v3_v3fl rather then mul_v3_v3fl, r32241. --- source/blender/editors/space_view3d/drawmesh.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'source/blender/editors/space_view3d') diff --git a/source/blender/editors/space_view3d/drawmesh.c b/source/blender/editors/space_view3d/drawmesh.c index 372ac976342..53b32dd167c 100644 --- a/source/blender/editors/space_view3d/drawmesh.c +++ b/source/blender/editors/space_view3d/drawmesh.c @@ -523,7 +523,7 @@ static int draw_em_tf_mapped__set_draw(void *userData, int index) MCol *mcol; int matnr; - if (efa==NULL || efa->h) + if (efa->h) return 0; tface = CustomData_em_get(&em->fdata, efa->data, CD_MTFACE); -- cgit v1.2.3 From 0eeeab515b6b46f907016091b3a89bf5e320c400 Mon Sep 17 00:00:00 2001 From: Campbell Barton Date: Tue, 5 Oct 2010 11:25:34 +0000 Subject: bugfix [#23506] Bevel Modifier display problem This is a more general problem that drawing functions would skip faces when the original index could not be found, screw result for example wasnt visible in editmode too. Fixed by adding a material set argument to DerivedMesh->drawMappedFaces(), this was already being done in some of the other drawing functions. --- source/blender/editors/space_view3d/drawmesh.c | 2 +- source/blender/editors/space_view3d/drawobject.c | 22 +++++++++++----------- 2 files changed, 12 insertions(+), 12 deletions(-) (limited to 'source/blender/editors/space_view3d') diff --git a/source/blender/editors/space_view3d/drawmesh.c b/source/blender/editors/space_view3d/drawmesh.c index 53b32dd167c..7a7462433d7 100644 --- a/source/blender/editors/space_view3d/drawmesh.c +++ b/source/blender/editors/space_view3d/drawmesh.c @@ -647,7 +647,7 @@ void draw_mesh_textured(Scene *scene, View3D *v3d, RegionView3D *rv3d, Object *o dm->drawMappedFacesTex(dm, draw_em_tf_mapped__set_draw, me->edit_mesh); } else if(faceselect) { if(ob->mode & OB_MODE_WEIGHT_PAINT) - dm->drawMappedFaces(dm, wpaint__setSolidDrawOptions, me, 1); + dm->drawMappedFaces(dm, wpaint__setSolidDrawOptions, me, 1, GPU_enable_material); else dm->drawMappedFacesTex(dm, draw_tface_mapped__set_draw, me); } diff --git a/source/blender/editors/space_view3d/drawobject.c b/source/blender/editors/space_view3d/drawobject.c index 30b12b96ed5..aba3d04d960 100644 --- a/source/blender/editors/space_view3d/drawobject.c +++ b/source/blender/editors/space_view3d/drawobject.c @@ -1867,7 +1867,7 @@ static void draw_dm_faces_sel(DerivedMesh *dm, unsigned char *baseCol, unsigned data.cols[2] = actCol; data.efa_act = efa_act; - dm->drawMappedFaces(dm, draw_dm_faces_sel__setDrawOptions, &data, 0); + dm->drawMappedFaces(dm, draw_dm_faces_sel__setDrawOptions, &data, 0, GPU_enable_material); } static int draw_dm_creases__setDrawOptions(void *userData, int index) @@ -2287,7 +2287,7 @@ static void draw_em_fancy(Scene *scene, View3D *v3d, RegionView3D *rv3d, Object glEnable(GL_LIGHTING); glFrontFace((ob->transflag&OB_NEG_SCALE)?GL_CW:GL_CCW); - finalDM->drawMappedFaces(finalDM, draw_em_fancy__setFaceOpts, 0, 0); + finalDM->drawMappedFaces(finalDM, draw_em_fancy__setFaceOpts, 0, 0, GPU_enable_material); glFrontFace(GL_CCW); glDisable(GL_LIGHTING); @@ -2517,7 +2517,7 @@ static void draw_mesh_fancy(Scene *scene, ARegion *ar, View3D *v3d, RegionView3D /* weight paint in solid mode, special case. focus on making the weights clear * rather then the shading, this is also forced in wire view */ GPU_enable_material(0, NULL); - dm->drawMappedFaces(dm, wpaint__setSolidDrawOptions, me->mface, 1); + dm->drawMappedFaces(dm, wpaint__setSolidDrawOptions, me->mface, 1, GPU_enable_material); bglPolygonOffset(rv3d->dist, 1.0); glDepthMask(0); // disable write in zbuffer, selected edge wires show better @@ -2599,7 +2599,7 @@ static void draw_mesh_fancy(Scene *scene, ARegion *ar, View3D *v3d, RegionView3D glEnable(GL_LIGHTING); glEnable(GL_COLOR_MATERIAL); - dm->drawMappedFaces(dm, wpaint__setSolidDrawOptions, me->mface, 1); + dm->drawMappedFaces(dm, wpaint__setSolidDrawOptions, me->mface, 1, GPU_enable_material); glDisable(GL_COLOR_MATERIAL); glDisable(GL_LIGHTING); @@ -2607,10 +2607,10 @@ static void draw_mesh_fancy(Scene *scene, ARegion *ar, View3D *v3d, RegionView3D } else if(ob->mode & (OB_MODE_VERTEX_PAINT|OB_MODE_TEXTURE_PAINT)) { if(me->mcol) - dm->drawMappedFaces(dm, wpaint__setSolidDrawOptions, NULL, 1); + dm->drawMappedFaces(dm, wpaint__setSolidDrawOptions, NULL, 1, GPU_enable_material); else { glColor3f(1.0f, 1.0f, 1.0f); - dm->drawMappedFaces(dm, wpaint__setSolidDrawOptions, NULL, 0); + dm->drawMappedFaces(dm, wpaint__setSolidDrawOptions, NULL, 0, GPU_enable_material); } } else do_draw= 1; @@ -6328,7 +6328,7 @@ static void bbs_mesh_solid_EM(Scene *scene, View3D *v3d, Object *ob, DerivedMesh cpack(0); if (facecol) { - dm->drawMappedFaces(dm, bbs_mesh_solid__setSolidDrawOptions, (void*)(intptr_t) 1, 0); + dm->drawMappedFaces(dm, bbs_mesh_solid__setSolidDrawOptions, (void*)(intptr_t) 1, 0, GPU_enable_material); if(check_ob_drawface_dot(scene, v3d, ob->dt)) { glPointSize(UI_GetThemeValuef(TH_FACEDOT_SIZE)); @@ -6339,7 +6339,7 @@ static void bbs_mesh_solid_EM(Scene *scene, View3D *v3d, Object *ob, DerivedMesh } } else { - dm->drawMappedFaces(dm, bbs_mesh_solid__setSolidDrawOptions, (void*) 0, 0); + dm->drawMappedFaces(dm, bbs_mesh_solid__setSolidDrawOptions, (void*) 0, 0, GPU_enable_material); } } @@ -6369,8 +6369,8 @@ static void bbs_mesh_solid(Scene *scene, View3D *v3d, Object *ob) glColor3ub(0, 0, 0); - if(face_sel_mode) dm->drawMappedFaces(dm, bbs_mesh_solid_hide__setDrawOpts, me, 0); - else dm->drawMappedFaces(dm, bbs_mesh_solid__setDrawOpts, me, 0); + if(face_sel_mode) dm->drawMappedFaces(dm, bbs_mesh_solid_hide__setDrawOpts, me, 0, GPU_enable_material); + else dm->drawMappedFaces(dm, bbs_mesh_solid__setDrawOpts, me, 0, GPU_enable_material); dm->release(dm); } @@ -6477,7 +6477,7 @@ static void draw_object_mesh_instance(Scene *scene, View3D *v3d, RegionView3D *r GPU_end_object_materials(); } else if(edm) - edm->drawMappedFaces(edm, NULL, NULL, 0); + edm->drawMappedFaces(edm, NULL, NULL, 0, GPU_enable_material); glDisable(GL_LIGHTING); } -- cgit v1.2.3 From 1bf56930ac18c7ae6c37079fb25446108e1e7309 Mon Sep 17 00:00:00 2001 From: Campbell Barton Date: Tue, 5 Oct 2010 13:15:58 +0000 Subject: bugfix [#24122] Shift-C doesn't work in "Camera View" also fixed some glitches with smoothview. --- source/blender/editors/space_view3d/view3d_edit.c | 30 ++++++--------------- source/blender/editors/space_view3d/view3d_view.c | 32 +++++++++++++---------- 2 files changed, 26 insertions(+), 36 deletions(-) (limited to 'source/blender/editors/space_view3d') diff --git a/source/blender/editors/space_view3d/view3d_edit.c b/source/blender/editors/space_view3d/view3d_edit.c index 06d93f01e02..4cac0e297d1 100644 --- a/source/blender/editors/space_view3d/view3d_edit.c +++ b/source/blender/editors/space_view3d/view3d_edit.c @@ -1274,7 +1274,7 @@ void VIEW3D_OT_zoom(wmOperatorType *ot) RNA_def_int(ot->srna, "my", 0, 0, INT_MAX, "Zoom Position Y", "", 0, INT_MAX); } -static int viewhome_exec(bContext *C, wmOperator *op) /* was view3d_home() in 2.4x */ +static int view3d_all_exec(bContext *C, wmOperator *op) /* was view3d_home() in 2.4x */ { ARegion *ar= CTX_wm_region(C); View3D *v3d = CTX_wm_view3d(C); @@ -1289,12 +1289,11 @@ static int viewhome_exec(bContext *C, wmOperator *op) /* was view3d_home() in 2. int ok= 1, onedone=0; if(center) { - min[0]= min[1]= min[2]= 0.0f; - max[0]= max[1]= max[2]= 0.0f; - /* in 2.4x this also move the cursor to (0, 0, 0) (with shift+c). */ curs= give_cursor(scene, v3d); - curs[0]= curs[1]= curs[2]= 0.0; + zero_v3(min); + zero_v3(max); + zero_v3(curs); } else { INIT_MINMAX(min, max); @@ -1318,9 +1317,7 @@ static int viewhome_exec(bContext *C, wmOperator *op) /* was view3d_home() in 2. return OPERATOR_FINISHED; } - afm[0]= (max[0]-min[0]); - afm[1]= (max[1]-min[1]); - afm[2]= (max[2]-min[2]); + sub_v3_v3v3(afm, max, min); size= 0.7f*MAX3(afm[0], afm[1], afm[2]); if(size==0.0) ok= 0; @@ -1342,7 +1339,7 @@ static int viewhome_exec(bContext *C, wmOperator *op) /* was view3d_home() in 2. if (rv3d->persp==RV3D_CAMOB) { rv3d->persp= RV3D_PERSP; - smooth_view(C, NULL, v3d->camera, new_ofs, NULL, &new_dist, NULL); + smooth_view(C, v3d->camera, NULL, new_ofs, NULL, &new_dist, NULL); } else { smooth_view(C, NULL, NULL, new_ofs, NULL, &new_dist, NULL); @@ -1358,17 +1355,6 @@ static int viewhome_exec(bContext *C, wmOperator *op) /* was view3d_home() in 2. return OPERATOR_FINISHED; } -static int viewhome_poll(bContext *C) -{ - if(ED_operator_view3d_active(C)) { - RegionView3D *rv3d= CTX_wm_region_view3d(C); //XXX, when accessed from a header menu this doesnt work! - if(rv3d && rv3d->persp!=RV3D_CAMOB) { - return 1; - } - } - - return 0; -} void VIEW3D_OT_view_all(wmOperatorType *ot) { @@ -1378,8 +1364,8 @@ void VIEW3D_OT_view_all(wmOperatorType *ot) ot->idname= "VIEW3D_OT_view_all"; /* api callbacks */ - ot->exec= viewhome_exec; - ot->poll= viewhome_poll; + ot->exec= view3d_all_exec; + ot->poll= ED_operator_view3d_active; /* flags */ ot->flag= 0; diff --git a/source/blender/editors/space_view3d/view3d_view.c b/source/blender/editors/space_view3d/view3d_view.c index d66144b2c30..860f9f461c4 100644 --- a/source/blender/editors/space_view3d/view3d_view.c +++ b/source/blender/editors/space_view3d/view3d_view.c @@ -205,7 +205,7 @@ void smooth_view(bContext *C, Object *oldcamera, Object *camera, float *ofs, flo if(quat) copy_qt_qt(sms.new_quat, quat); if(dist) sms.new_dist= *dist; if(lens) sms.new_lens= *lens; - + if (camera) { view3d_settings_from_ob(camera, sms.new_ofs, sms.new_quat, &sms.new_dist, &sms.new_lens); sms.to_camera= 1; /* restore view3d values in end */ @@ -214,15 +214,15 @@ void smooth_view(bContext *C, Object *oldcamera, Object *camera, float *ofs, flo if (C && U.smooth_viewtx) { int changed = 0; /* zero means no difference */ - if (sms.new_dist != rv3d->dist) + if (oldcamera != camera) changed = 1; - if (sms.new_lens != v3d->lens) + else if (sms.new_dist != rv3d->dist) changed = 1; - - if (!equals_v3v3(sms.new_ofs, rv3d->ofs)) + else if (sms.new_lens != v3d->lens) changed = 1; - - if (!equals_v4v4(sms.new_quat, rv3d->viewquat)) + else if (!equals_v3v3(sms.new_ofs, rv3d->ofs)) + changed = 1; + else if (!equals_v4v4(sms.new_quat, rv3d->viewquat)) changed = 1; /* The new view is different from the old one @@ -449,17 +449,21 @@ static int view3d_setobjectascamera_exec(bContext *C, wmOperator *op) View3D *v3d = CTX_wm_view3d(C); RegionView3D *rv3d= CTX_wm_region_view3d(C); Scene *scene= CTX_data_scene(C); - - if(BASACT) { + Object *ob = CTX_data_active_object(C); + + if(ob) { + Object *camera_old= (rv3d->persp == RV3D_CAMOB && scene->camera) ? scene->camera : NULL; rv3d->persp= RV3D_CAMOB; - v3d->camera= OBACT; + v3d->camera= ob; if(v3d->scenelock) - scene->camera= OBACT; - smooth_view(C, NULL, v3d->camera, rv3d->ofs, rv3d->viewquat, &rv3d->dist, &v3d->lens); + scene->camera= ob; + + if(camera_old != ob) /* unlikely but looks like a glitch when set to the same */ + smooth_view(C, camera_old, v3d->camera, rv3d->ofs, rv3d->viewquat, &rv3d->dist, &v3d->lens); + + WM_event_add_notifier(C, NC_SCENE|ND_RENDER_OPTIONS|NC_OBJECT|ND_DRAW, CTX_data_scene(C)); } - WM_event_add_notifier(C, NC_SCENE|ND_RENDER_OPTIONS|NC_OBJECT|ND_DRAW, CTX_data_scene(C)); - return OPERATOR_FINISHED; } -- cgit v1.2.3 From 8a4fe62843f8aa311226f543d14bd3e5440ffe7d Mon Sep 17 00:00:00 2001 From: Campbell Barton Date: Thu, 7 Oct 2010 10:04:07 +0000 Subject: misc fixes found with clang's static checker. --- source/blender/editors/space_view3d/drawmesh.c | 13 +++++++------ source/blender/editors/space_view3d/drawobject.c | 4 +++- source/blender/editors/space_view3d/view3d_edit.c | 5 +---- 3 files changed, 11 insertions(+), 11 deletions(-) (limited to 'source/blender/editors/space_view3d') diff --git a/source/blender/editors/space_view3d/drawmesh.c b/source/blender/editors/space_view3d/drawmesh.c index 7a7462433d7..cf511a8ad9b 100644 --- a/source/blender/editors/space_view3d/drawmesh.c +++ b/source/blender/editors/space_view3d/drawmesh.c @@ -536,12 +536,13 @@ static int draw_em_tf_mapped__set_draw(void *userData, int index) static int wpaint__setSolidDrawOptions(void *userData, int index, int *drawSmooth_r) { Mesh *me = (Mesh*)userData; - MTFace *tface = (me->mtface)? &me->mtface[index]: NULL; - MFace *mface = (me->mface)? &me->mface[index]: NULL; - - if ((mface->flag&ME_HIDE) || (tface && (tface->mode&TF_INVISIBLE))) - return 0; - + + if ( (me->mface && me->mface[index].flag & ME_HIDE) || + (me->mtface && (me->mtface[index].mode & TF_INVISIBLE)) + ) { + return 0; + } + *drawSmooth_r = 1; return 1; } diff --git a/source/blender/editors/space_view3d/drawobject.c b/source/blender/editors/space_view3d/drawobject.c index aba3d04d960..d28813f7522 100644 --- a/source/blender/editors/space_view3d/drawobject.c +++ b/source/blender/editors/space_view3d/drawobject.c @@ -917,6 +917,9 @@ static void drawlamp(Scene *scene, View3D *v3d, RegionView3D *rv3d, Base *base, copy_m4_m4(imat, rv3d->viewinv); normalize_v3(imat[0]); normalize_v3(imat[1]); + + /* lamp center */ + copy_v3_v3(vec, ob->obmat[3]); /* for AA effects */ glGetFloatv(GL_CURRENT_COLOR, curcol); @@ -931,7 +934,6 @@ static void drawlamp(Scene *scene, View3D *v3d, RegionView3D *rv3d, Base *base, } /* Inner Circle */ - copy_v3_v3(vec, ob->obmat[3]); glEnable(GL_BLEND); drawcircball(GL_LINE_LOOP, vec, lampsize, imat); glDisable(GL_BLEND); diff --git a/source/blender/editors/space_view3d/view3d_edit.c b/source/blender/editors/space_view3d/view3d_edit.c index 4cac0e297d1..9f1b55ee2ce 100644 --- a/source/blender/editors/space_view3d/view3d_edit.c +++ b/source/blender/editors/space_view3d/view3d_edit.c @@ -2121,14 +2121,11 @@ static int viewpan_exec(bContext *C, wmOperator *op) pandir = RNA_enum_get(op->ptr, "type"); initgrabz(rv3d, 0.0, 0.0, 0.0); - if(pandir == V3D_VIEW_PANRIGHT) window_to_3d_delta(ar, vec, -32, 0); else if(pandir == V3D_VIEW_PANLEFT) window_to_3d_delta(ar, vec, 32, 0); else if(pandir == V3D_VIEW_PANUP) window_to_3d_delta(ar, vec, 0, -25); else if(pandir == V3D_VIEW_PANDOWN) window_to_3d_delta(ar, vec, 0, 25); - rv3d->ofs[0]+= vec[0]; - rv3d->ofs[1]+= vec[1]; - rv3d->ofs[2]+= vec[2]; + add_v3_v3(rv3d->ofs, vec); if(rv3d->viewlock & RV3D_BOXVIEW) view3d_boxview_sync(CTX_wm_area(C), ar); -- cgit v1.2.3 From 1579c1a5c90219777e8291f39564739509c579d7 Mon Sep 17 00:00:00 2001 From: Campbell Barton Date: Sun, 10 Oct 2010 22:15:48 +0000 Subject: weight-paint in solid draw mode would draw the wire twice, also change wire drawing to draw all edges and better visibility over yellow areas. --- source/blender/editors/space_view3d/drawobject.c | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) (limited to 'source/blender/editors/space_view3d') diff --git a/source/blender/editors/space_view3d/drawobject.c b/source/blender/editors/space_view3d/drawobject.c index d28813f7522..2206d744dc6 100644 --- a/source/blender/editors/space_view3d/drawobject.c +++ b/source/blender/editors/space_view3d/drawobject.c @@ -2520,24 +2520,25 @@ static void draw_mesh_fancy(Scene *scene, ARegion *ar, View3D *v3d, RegionView3D * rather then the shading, this is also forced in wire view */ GPU_enable_material(0, NULL); dm->drawMappedFaces(dm, wpaint__setSolidDrawOptions, me->mface, 1, GPU_enable_material); - + bglPolygonOffset(rv3d->dist, 1.0); glDepthMask(0); // disable write in zbuffer, selected edge wires show better glEnable(GL_BLEND); - glColor4ub(196, 196, 196, 196); + glColor4ub(255, 255, 255, 96); glEnable(GL_LINE_STIPPLE); - glLineStipple(1, 0x8888); + glLineStipple(1, 0xAAAA); - dm->drawEdges(dm, 1, 0); + dm->drawEdges(dm, 1, 1); bglPolygonOffset(rv3d->dist, 0.0); glDepthMask(1); glDisable(GL_LINE_STIPPLE); GPU_disable_material(); - - + + /* since we already draw wire as wp guide, dont draw over the top */ + draw_wire= 0; } else { Paint *p; -- cgit v1.2.3 From 9347dd04a30ea091df4cc5d54af5a84e83652afc Mon Sep 17 00:00:00 2001 From: Campbell Barton Date: Wed, 13 Oct 2010 01:10:56 +0000 Subject: bugfix [#24231] outliner not refreshed correctly also made world changes only redraw the 3d view if 'Render Only' option is set. --- source/blender/editors/space_view3d/space_view3d.c | 33 ++++++++++++++++++---- 1 file changed, 27 insertions(+), 6 deletions(-) (limited to 'source/blender/editors/space_view3d') diff --git a/source/blender/editors/space_view3d/space_view3d.c b/source/blender/editors/space_view3d/space_view3d.c index 8a215834c38..629e0efe2ce 100644 --- a/source/blender/editors/space_view3d/space_view3d.c +++ b/source/blender/editors/space_view3d/space_view3d.c @@ -548,22 +548,36 @@ static void view3d_recalc_used_layers(ARegion *ar, wmNotifier *wmn, Scene *scene base= base->next; } - sa= win->screen->areabase.first; - while(sa) { - if(sa->spacetype == SPACE_VIEW3D) - if(BLI_findindex(&sa->regionbase, ar) >= 0) { + for(sa= win->screen->areabase.first; sa; sa= sa->next) { + if(sa->spacetype == SPACE_VIEW3D) { + if(BLI_findindex(&sa->regionbase, ar) != -1) { View3D *v3d= sa->spacedata.first; v3d->lay_used= lay_used; break; } + } + } +} - sa= sa->next; +static View3D *view3d_from_wmn(ARegion *ar, wmNotifier *wmn) +{ + wmWindow *win= wmn->wm->winactive; + ScrArea *sa; + + for(sa= win->screen->areabase.first; sa; sa= sa->next) { + if(sa->spacetype == SPACE_VIEW3D) + if(BLI_findindex(&sa->regionbase, ar) != -1) { + return (View3D *)sa->spacedata.first; + } } + + return NULL; } static void view3d_main_area_listener(ARegion *ar, wmNotifier *wmn) { bScreen *sc; + View3D *v3d; /* context changes */ switch(wmn->category) { @@ -600,6 +614,11 @@ static void view3d_main_area_listener(ARegion *ar, wmNotifier *wmn) case ND_MODE: ED_region_tag_redraw(ar); break; + case ND_WORLD: + v3d= view3d_from_wmn(ar, wmn); + if(v3d->flag2 & V3D_RENDER_OVERRIDE) + ED_region_tag_redraw(ar); + break; } if (wmn->action == NA_EDITED) ED_region_tag_redraw(ar); @@ -650,7 +669,9 @@ static void view3d_main_area_listener(ARegion *ar, wmNotifier *wmn) case NC_WORLD: switch(wmn->data) { case ND_WORLD_DRAW: - ED_region_tag_redraw(ar); + v3d= view3d_from_wmn(ar, wmn); + if(v3d->flag2 & V3D_RENDER_OVERRIDE) + ED_region_tag_redraw(ar); break; } break; -- cgit v1.2.3 From 554f4df542bd968d6384609a83bd5f6c840aceb3 Mon Sep 17 00:00:00 2001 From: Campbell Barton Date: Wed, 13 Oct 2010 04:00:01 +0000 Subject: bugfix [#24210] Tiled textures can cause corruption of entire UI --- source/blender/editors/space_view3d/view3d_view.c | 1 + 1 file changed, 1 insertion(+) (limited to 'source/blender/editors/space_view3d') diff --git a/source/blender/editors/space_view3d/view3d_view.c b/source/blender/editors/space_view3d/view3d_view.c index 860f9f461c4..b49933cbb35 100644 --- a/source/blender/editors/space_view3d/view3d_view.c +++ b/source/blender/editors/space_view3d/view3d_view.c @@ -1667,6 +1667,7 @@ static void RestoreState(bContext *C) win->queue= queue_back; GPU_state_init(); + GPU_set_tpage(NULL, 0); glPopAttrib(); } -- cgit v1.2.3 From f6a7205be50237c769933f070ad439ab283e5f8c Mon Sep 17 00:00:00 2001 From: Campbell Barton Date: Thu, 14 Oct 2010 00:33:39 +0000 Subject: bugfix [#22161] Drawing of custom shapes in bones --- source/blender/editors/space_view3d/drawarmature.c | 21 +++++++++++---------- 1 file changed, 11 insertions(+), 10 deletions(-) (limited to 'source/blender/editors/space_view3d') diff --git a/source/blender/editors/space_view3d/drawarmature.c b/source/blender/editors/space_view3d/drawarmature.c index c6aa4656191..71e52e723c5 100644 --- a/source/blender/editors/space_view3d/drawarmature.c +++ b/source/blender/editors/space_view3d/drawarmature.c @@ -1565,7 +1565,7 @@ static void bone_matrix_translate_y(float mat[][4], float y) } /* assumes object is Armature with pose */ -static void draw_pose_bones(Scene *scene, View3D *v3d, ARegion *ar, Base *base, int dt) +static void draw_pose_bones(Scene *scene, View3D *v3d, ARegion *ar, Base *base, int dt, short ghost) { RegionView3D *rv3d= ar->regiondata; Object *ob= base->object; @@ -1706,9 +1706,11 @@ static void draw_pose_bones(Scene *scene, View3D *v3d, ARegion *ar, Base *base, } /* prepare colors */ - if (arm->flag & ARM_POSEMODE) + if(ghost) { + /* 13 October 2009, Disabled this to make ghosting show the right colors (Aligorith) */ + } + else if (arm->flag & ARM_POSEMODE) set_pchan_colorset(ob, pchan); -#if 0 // XXX - 13 October 2009, Disabled this to make ghosting show the right colors (Aligorith) else { if ((scene->basact)==base) { if (base->flag & (SELECT+BA_WAS_SEL)) UI_ThemeColor(TH_ACTIVE); @@ -1719,7 +1721,6 @@ static void draw_pose_bones(Scene *scene, View3D *v3d, ARegion *ar, Base *base, else UI_ThemeColor(TH_WIRE); } } -#endif /* catch exception for bone with hidden parent */ flag= bone->flag; @@ -2211,7 +2212,7 @@ static void draw_ghost_poses_range(Scene *scene, View3D *v3d, ARegion *ar, Base BKE_animsys_evaluate_animdata(&ob->id, adt, (float)CFRA, ADT_RECALC_ALL); where_is_pose(scene, ob); - draw_pose_bones(scene, v3d, ar, base, OB_WIRE); + draw_pose_bones(scene, v3d, ar, base, OB_WIRE, TRUE); } glDisable(GL_BLEND); if (v3d->zbuf) glEnable(GL_DEPTH_TEST); @@ -2290,7 +2291,7 @@ static void draw_ghost_poses_keys(Scene *scene, View3D *v3d, ARegion *ar, Base * BKE_animsys_evaluate_animdata(&ob->id, adt, (float)CFRA, ADT_RECALC_ALL); where_is_pose(scene, ob); - draw_pose_bones(scene, v3d, ar, base, OB_WIRE); + draw_pose_bones(scene, v3d, ar, base, OB_WIRE, TRUE); } glDisable(GL_BLEND); if (v3d->zbuf) glEnable(GL_DEPTH_TEST); @@ -2360,7 +2361,7 @@ static void draw_ghost_poses(Scene *scene, View3D *v3d, ARegion *ar, Base *base) if (CFRA != cfrao) { BKE_animsys_evaluate_animdata(&ob->id, adt, (float)CFRA, ADT_RECALC_ALL); where_is_pose(scene, ob); - draw_pose_bones(scene, v3d, ar, base, OB_WIRE); + draw_pose_bones(scene, v3d, ar, base, OB_WIRE, TRUE); } } @@ -2375,7 +2376,7 @@ static void draw_ghost_poses(Scene *scene, View3D *v3d, ARegion *ar, Base *base) if (CFRA != cfrao) { BKE_animsys_evaluate_animdata(&ob->id, adt, (float)CFRA, ADT_RECALC_ALL); where_is_pose(scene, ob); - draw_pose_bones(scene, v3d, ar, base, OB_WIRE); + draw_pose_bones(scene, v3d, ar, base, OB_WIRE, TRUE); } } } @@ -2409,7 +2410,7 @@ int draw_armature(Scene *scene, View3D *v3d, ARegion *ar, Base *base, int dt, in /* we use color for solid lighting */ glColorMaterial(GL_FRONT_AND_BACK, GL_SPECULAR); glEnable(GL_COLOR_MATERIAL); - glColor3ub(0,0,0); // clear spec + glColor3ub(255,0,255); // clear spec glDisable(GL_COLOR_MATERIAL); glColorMaterial(GL_FRONT_AND_BACK, GL_DIFFUSE); @@ -2458,7 +2459,7 @@ int draw_armature(Scene *scene, View3D *v3d, ARegion *ar, Base *base, int dt, in } } } - draw_pose_bones(scene, v3d, ar, base, dt); + draw_pose_bones(scene, v3d, ar, base, dt, FALSE); arm->flag &= ~ARM_POSEMODE; if(ob->mode & OB_MODE_POSE) -- cgit v1.2.3 From a9197c3aa21a5b5368e03feffd5b8d27c156b8fb Mon Sep 17 00:00:00 2001 From: Campbell Barton Date: Thu, 14 Oct 2010 01:22:14 +0000 Subject: remove unused args in draw*.c and some in view*.c, tag some as UNUSED(). --- source/blender/editors/space_view3d/drawanimviz.c | 6 +- source/blender/editors/space_view3d/drawarmature.c | 54 +++++++-------- source/blender/editors/space_view3d/drawmesh.c | 4 +- source/blender/editors/space_view3d/drawobject.c | 79 +++++++++++----------- source/blender/editors/space_view3d/drawvolume.c | 2 +- .../blender/editors/space_view3d/view3d_header.c | 2 +- .../blender/editors/space_view3d/view3d_intern.h | 10 +-- 7 files changed, 78 insertions(+), 79 deletions(-) (limited to 'source/blender/editors/space_view3d') diff --git a/source/blender/editors/space_view3d/drawanimviz.c b/source/blender/editors/space_view3d/drawanimviz.c index fb271556a9c..4cce166b36b 100644 --- a/source/blender/editors/space_view3d/drawanimviz.c +++ b/source/blender/editors/space_view3d/drawanimviz.c @@ -64,7 +64,7 @@ // - include support for editing the path verts /* Set up drawing environment for drawing motion paths */ -void draw_motion_paths_init(Scene *scene, View3D *v3d, ARegion *ar) +void draw_motion_paths_init(View3D *v3d, ARegion *ar) { RegionView3D *rv3d= ar->regiondata; @@ -79,7 +79,7 @@ void draw_motion_paths_init(Scene *scene, View3D *v3d, ARegion *ar) * i.e. draw_motion_paths_init() has been called */ // FIXME: the text is still drawn in the wrong space - it includes the current transforms of the object still... -void draw_motion_path_instance(Scene *scene, View3D *v3d, ARegion *ar, +void draw_motion_path_instance(Scene *scene, Object *ob, bPoseChannel *pchan, bAnimVizSettings *avs, bMotionPath *mpath) { //RegionView3D *rv3d= ar->regiondata; @@ -283,7 +283,7 @@ void draw_motion_path_instance(Scene *scene, View3D *v3d, ARegion *ar, } /* Clean up drawing environment after drawing motion paths */ -void draw_motion_paths_cleanup(Scene *scene, View3D *v3d, ARegion *ar) +void draw_motion_paths_cleanup(View3D *v3d) { if (v3d->zbuf) glEnable(GL_DEPTH_TEST); glPopMatrix(); diff --git a/source/blender/editors/space_view3d/drawarmature.c b/source/blender/editors/space_view3d/drawarmature.c index 71e52e723c5..6cbfc2cffe4 100644 --- a/source/blender/editors/space_view3d/drawarmature.c +++ b/source/blender/editors/space_view3d/drawarmature.c @@ -140,7 +140,7 @@ static void cp_shade_color3ub (char cp[], int offset) } /* This function sets the gl-color for coloring a certain bone (based on bcolor) */ -static short set_pchan_glColor (short colCode, int armflag, int boneflag, int constflag) +static short set_pchan_glColor (short colCode, int boneflag, int constflag) { switch (colCode) { case PCHAN_COLOR_NORMAL: @@ -551,7 +551,7 @@ static void draw_bone_points(int dt, int armflag, unsigned int boneflag, int id) } else { if (armflag & ARM_POSEMODE) - set_pchan_glColor(PCHAN_COLOR_SOLID, armflag, boneflag, 0); + set_pchan_glColor(PCHAN_COLOR_SOLID, boneflag, 0); else UI_ThemeColor(TH_BONE_SOLID); } @@ -574,7 +574,7 @@ static void draw_bone_points(int dt, int armflag, unsigned int boneflag, int id) } else { if (armflag & ARM_POSEMODE) - set_pchan_glColor(PCHAN_COLOR_SOLID, armflag, boneflag, 0); + set_pchan_glColor(PCHAN_COLOR_SOLID, boneflag, 0); else UI_ThemeColor(TH_BONE_SOLID); } @@ -616,7 +616,7 @@ static float co[16] ={ /* smat, imat = mat & imat to draw screenaligned */ -static void draw_sphere_bone_dist(float smat[][4], float imat[][4], int boneflag, bPoseChannel *pchan, EditBone *ebone) +static void draw_sphere_bone_dist(float smat[][4], float imat[][4], bPoseChannel *pchan, EditBone *ebone) { float head, tail, length, dist; float *headvec, *tailvec, dirvec[3]; @@ -782,7 +782,7 @@ static void draw_sphere_bone_wire(float smat[][4], float imat[][4], int armflag, else UI_ThemeColor(TH_VERTEX); } else if (armflag & ARM_POSEMODE) - set_pchan_glColor(PCHAN_COLOR_NORMAL, armflag, boneflag, constflag); + set_pchan_glColor(PCHAN_COLOR_NORMAL, boneflag, constflag); /* Draw root point if we are not connected */ if ((boneflag & BONE_CONNECTED)==0) { @@ -903,7 +903,7 @@ static void draw_sphere_bone(int dt, int armflag, int boneflag, int constflag, u else UI_ThemeColorShade(TH_BONE_SOLID, -30); } else if (armflag & ARM_POSEMODE) - set_pchan_glColor(PCHAN_COLOR_SPHEREBONE_END, armflag, boneflag, constflag); + set_pchan_glColor(PCHAN_COLOR_SPHEREBONE_END, boneflag, constflag); else if (dt==OB_SOLID) UI_ThemeColorShade(TH_BONE_SOLID, -30); @@ -933,7 +933,7 @@ static void draw_sphere_bone(int dt, int armflag, int boneflag, int constflag, u else UI_ThemeColor(TH_BONE_SOLID); } else if (armflag & ARM_POSEMODE) - set_pchan_glColor(PCHAN_COLOR_SPHEREBONE_BASE, armflag, boneflag, constflag); + set_pchan_glColor(PCHAN_COLOR_SPHEREBONE_BASE, boneflag, constflag); else if (dt == OB_SOLID) UI_ThemeColor(TH_BONE_SOLID); @@ -1003,7 +1003,7 @@ static void draw_line_bone(int armflag, int boneflag, int constflag, unsigned in if (armflag & (ARM_EDITMODE|ARM_POSEMODE)) { glLineWidth(4.0f); if (armflag & ARM_POSEMODE) - set_pchan_glColor(PCHAN_COLOR_NORMAL, armflag, boneflag, constflag); + set_pchan_glColor(PCHAN_COLOR_NORMAL, boneflag, constflag); else if (armflag & ARM_EDITMODE) { UI_ThemeColor(TH_WIRE); } @@ -1048,7 +1048,7 @@ static void draw_line_bone(int armflag, int boneflag, int constflag, unsigned in glLoadName(id & 0xFFFF); /* object tag, for bordersel optim */ if (armflag & ARM_POSEMODE) - set_pchan_glColor(PCHAN_COLOR_LINEBONE, armflag, boneflag, constflag); + set_pchan_glColor(PCHAN_COLOR_LINEBONE, boneflag, constflag); } glLineWidth(2.0); @@ -1147,9 +1147,9 @@ static void draw_b_bone(int dt, int armflag, int boneflag, int constflag, unsign /* colors for modes */ if (armflag & ARM_POSEMODE) { if (dt <= OB_WIRE) - set_pchan_glColor(PCHAN_COLOR_NORMAL, armflag, boneflag, constflag); + set_pchan_glColor(PCHAN_COLOR_NORMAL, boneflag, constflag); else - set_pchan_glColor(PCHAN_COLOR_SOLID, armflag, boneflag, constflag); + set_pchan_glColor(PCHAN_COLOR_SOLID, boneflag, constflag); } else if (armflag & ARM_EDITMODE) { if (dt==OB_WIRE) { @@ -1171,7 +1171,7 @@ static void draw_b_bone(int dt, int armflag, int boneflag, int constflag, unsign glEnable(GL_LIGHTING); if (armflag & ARM_POSEMODE) - set_pchan_glColor(PCHAN_COLOR_SOLID, armflag, boneflag, constflag); + set_pchan_glColor(PCHAN_COLOR_SOLID, boneflag, constflag); else UI_ThemeColor(TH_BONE_SOLID); @@ -1186,7 +1186,7 @@ static void draw_b_bone(int dt, int armflag, int boneflag, int constflag, unsign if (armflag & ARM_POSEMODE) { if (constflag) { /* set constraint colors */ - if (set_pchan_glColor(PCHAN_COLOR_CONSTS, armflag, boneflag, constflag)) { + if (set_pchan_glColor(PCHAN_COLOR_CONSTS, boneflag, constflag)) { glEnable(GL_BLEND); draw_b_bone_boxes(OB_SOLID, pchan, xwidth, length, zwidth); @@ -1195,7 +1195,7 @@ static void draw_b_bone(int dt, int armflag, int boneflag, int constflag, unsign } /* restore colors */ - set_pchan_glColor(PCHAN_COLOR_NORMAL, armflag, boneflag, constflag); + set_pchan_glColor(PCHAN_COLOR_NORMAL, boneflag, constflag); } } @@ -1221,9 +1221,9 @@ static void draw_bone(int dt, int armflag, int boneflag, int constflag, unsigned /* colors for posemode */ if (armflag & ARM_POSEMODE) { if (dt <= OB_WIRE) - set_pchan_glColor(PCHAN_COLOR_NORMAL, armflag, boneflag, constflag); + set_pchan_glColor(PCHAN_COLOR_NORMAL, boneflag, constflag); else - set_pchan_glColor(PCHAN_COLOR_SOLID, armflag, boneflag, constflag); + set_pchan_glColor(PCHAN_COLOR_SOLID, boneflag, constflag); } @@ -1245,7 +1245,7 @@ static void draw_bone(int dt, int armflag, int boneflag, int constflag, unsigned else if (armflag & ARM_POSEMODE) { if (constflag) { /* draw constraint colors */ - if (set_pchan_glColor(PCHAN_COLOR_CONSTS, armflag, boneflag, constflag)) { + if (set_pchan_glColor(PCHAN_COLOR_CONSTS, boneflag, constflag)) { glEnable(GL_BLEND); draw_bone_solid_octahedral(); @@ -1254,7 +1254,7 @@ static void draw_bone(int dt, int armflag, int boneflag, int constflag, unsigned } /* restore colors */ - set_pchan_glColor(PCHAN_COLOR_NORMAL, armflag, boneflag, constflag); + set_pchan_glColor(PCHAN_COLOR_NORMAL, boneflag, constflag); } } draw_bone_octahedral(); @@ -1262,7 +1262,7 @@ static void draw_bone(int dt, int armflag, int boneflag, int constflag, unsigned else { /* solid */ if (armflag & ARM_POSEMODE) - set_pchan_glColor(PCHAN_COLOR_SOLID, armflag, boneflag, constflag); + set_pchan_glColor(PCHAN_COLOR_SOLID, boneflag, constflag); else UI_ThemeColor(TH_BONE_SOLID); draw_bone_solid_octahedral(); @@ -1283,7 +1283,7 @@ static void draw_custom_bone(Scene *scene, View3D *v3d, RegionView3D *rv3d, Obje /* colors for posemode */ if (armflag & ARM_POSEMODE) { - set_pchan_glColor(PCHAN_COLOR_NORMAL, armflag, boneflag, 0); + set_pchan_glColor(PCHAN_COLOR_NORMAL, boneflag, 0); } if (id != -1) { @@ -1602,7 +1602,7 @@ static void draw_pose_bones(Scene *scene, View3D *v3d, ARegion *ar, Base *base, if (bone && !(bone->flag & (BONE_HIDDEN_P|BONE_NO_DEFORM|BONE_HIDDEN_PG))) { if (bone->flag & (BONE_SELECTED)) { if (bone->layer & arm->layer) - draw_sphere_bone_dist(smat, imat, bone->flag, pchan, NULL); + draw_sphere_bone_dist(smat, imat, pchan, NULL); } } } @@ -1902,7 +1902,7 @@ static void draw_pose_bones(Scene *scene, View3D *v3d, ARegion *ar, Base *base, bone_matrix_translate_y(bmat, pchan->bone->length); glMultMatrixf(bmat); - drawaxes(pchan->bone->length*0.25f, 0, OB_ARROWS); + drawaxes(pchan->bone->length*0.25f, OB_ARROWS); glPopMatrix(); } @@ -1958,7 +1958,7 @@ static void draw_ebones(View3D *v3d, ARegion *ar, Object *ob, int dt) if (eBone->layer & arm->layer) { if ((eBone->flag & (BONE_HIDDEN_A|BONE_NO_DEFORM))==0) { if (eBone->flag & (BONE_SELECTED|BONE_TIPSEL|BONE_ROOTSEL)) - draw_sphere_bone_dist(smat, imat, eBone->flag, NULL, eBone); + draw_sphere_bone_dist(smat, imat, NULL, eBone); } } } @@ -2095,7 +2095,7 @@ static void draw_ebones(View3D *v3d, ARegion *ar, Object *ob, int dt) bone_matrix_translate_y(bmat, eBone->length); glMultMatrixf(bmat); - drawaxes(eBone->length*0.25f, 0, OB_ARROWS); + drawaxes(eBone->length*0.25f, OB_ARROWS); glPopMatrix(); } @@ -2123,16 +2123,16 @@ static void draw_pose_paths(Scene *scene, View3D *v3d, ARegion *ar, Object *ob) bPoseChannel *pchan; /* setup drawing environment for paths */ - draw_motion_paths_init(scene, v3d, ar); + draw_motion_paths_init(v3d, ar); /* draw paths where they exist and they releated bone is visible */ for (pchan= ob->pose->chanbase.first; pchan; pchan= pchan->next) { if ((pchan->bone->layer & arm->layer) && (pchan->mpath)) - draw_motion_path_instance(scene, v3d, ar, ob, pchan, avs, pchan->mpath); + draw_motion_path_instance(scene, ob, pchan, avs, pchan->mpath); } /* cleanup after drawing */ - draw_motion_paths_cleanup(scene, v3d, ar); + draw_motion_paths_cleanup(v3d); } diff --git a/source/blender/editors/space_view3d/drawmesh.c b/source/blender/editors/space_view3d/drawmesh.c index cf511a8ad9b..0df2888f4a0 100644 --- a/source/blender/editors/space_view3d/drawmesh.c +++ b/source/blender/editors/space_view3d/drawmesh.c @@ -192,7 +192,7 @@ static int draw_tfaces3D__drawFaceOpts(void *userData, int index) return 0; } -static void draw_tfaces3D(RegionView3D *rv3d, Object *ob, Mesh *me, DerivedMesh *dm) +static void draw_tfaces3D(RegionView3D *rv3d, Mesh *me, DerivedMesh *dm) { struct { Mesh *me; EdgeHash *eh; } data; @@ -671,7 +671,7 @@ void draw_mesh_textured(Scene *scene, View3D *v3d, RegionView3D *rv3d, Object *o /* draw edges and selected faces over textured mesh */ if(!(ob == scene->obedit) && faceselect) - draw_tfaces3D(rv3d, ob, me, dm); + draw_tfaces3D(rv3d, me, dm); /* reset from negative scale correction */ glFrontFace(GL_CCW); diff --git a/source/blender/editors/space_view3d/drawobject.c b/source/blender/editors/space_view3d/drawobject.c index 2206d744dc6..c9b8a086d22 100644 --- a/source/blender/editors/space_view3d/drawobject.c +++ b/source/blender/editors/space_view3d/drawobject.c @@ -398,8 +398,7 @@ static void draw_xyz_wire(float *c, float size, int axis) } -/* flag is same as for draw_object */ -void drawaxes(float size, int flag, char drawtype) +void drawaxes(float size, char drawtype) { int axis; float v1[3]= {0.0, 0.0, 0.0}; @@ -1463,7 +1462,7 @@ static void drawlattice(Scene *scene, View3D *v3d, Object *ob) * if not, ED_view3d_init_mats_rv3d() can be used for selection tools * but would not give correct results with dupli's for eg. which dont * use the object matrix in the useual way */ -static void mesh_foreachScreenVert__mapFunc(void *userData, int index, float *co, float *no_f, short *no_s) +static void mesh_foreachScreenVert__mapFunc(void *userData, int index, float *co, float *UNUSED(no_f), short *UNUSED(no_s)) { struct { void (*func)(void *userData, EditVert *eve, int x, int y, int index); void *userData; ViewContext vc; int clipVerts; } *data = userData; EditVert *eve = EM_get_vert_for_index(index); @@ -1547,7 +1546,7 @@ void mesh_foreachScreenEdge(ViewContext *vc, void (*func)(void *userData, EditEd dm->release(dm); } -static void mesh_foreachScreenFace__mapFunc(void *userData, int index, float *cent, float *no) +static void mesh_foreachScreenFace__mapFunc(void *userData, int index, float *cent, float *UNUSED(no)) { struct { void (*func)(void *userData, EditFace *efa, int x, int y, int index); void *userData; ViewContext vc; } *data = userData; EditFace *efa = EM_get_face_for_index(index); @@ -1658,7 +1657,7 @@ static void draw_dm_face_normals(Scene *scene, DerivedMesh *dm) glEnd(); } -static void draw_dm_face_centers__mapFunc(void *userData, int index, float *cent, float *no) +static void draw_dm_face_centers__mapFunc(void *userData, int index, float *cent, float *UNUSED(no)) { EditFace *efa = EM_get_face_for_index(index); int sel = *((int*) userData); @@ -1702,7 +1701,7 @@ static void draw_dm_vert_normals(Scene *scene, DerivedMesh *dm) } /* Draw verts with color set based on selection */ -static void draw_dm_verts__mapFunc(void *userData, int index, float *co, float *no_f, short *no_s) +static void draw_dm_verts__mapFunc(void *userData, int index, float *co, float *UNUSED(no_f), short *UNUSED(no_s)) { struct { int sel; EditVert *eve_act; } * data = userData; EditVert *eve = EM_get_vert_for_index(index); @@ -1779,7 +1778,7 @@ static void draw_dm_edges_sel(DerivedMesh *dm, unsigned char *baseCol, unsigned } /* Draw edges */ -static int draw_dm_edges__setDrawOptions(void *userData, int index) +static int draw_dm_edges__setDrawOptions(void *UNUSED(userData), int index) { return EM_get_edge_for_index(index)->h==0; } @@ -1789,7 +1788,7 @@ static void draw_dm_edges(DerivedMesh *dm) } /* Draw edges with color interpolated based on selection */ -static int draw_dm_edges_sel_interp__setDrawOptions(void *userData, int index) +static int draw_dm_edges_sel_interp__setDrawOptions(void *UNUSED(userData), int index) { return EM_get_edge_for_index(index)->h==0; } @@ -1814,7 +1813,7 @@ static void draw_dm_edges_sel_interp(DerivedMesh *dm, unsigned char *baseCol, un } /* Draw only seam edges */ -static int draw_dm_edges_seams__setDrawOptions(void *userData, int index) +static int draw_dm_edges_seams__setDrawOptions(void *UNUSED(userData), int index) { EditEdge *eed = EM_get_edge_for_index(index); @@ -1826,7 +1825,7 @@ static void draw_dm_edges_seams(DerivedMesh *dm) } /* Draw only sharp edges */ -static int draw_dm_edges_sharp__setDrawOptions(void *userData, int index) +static int draw_dm_edges_sharp__setDrawOptions(void *UNUSED(userData), int index) { EditEdge *eed = EM_get_edge_for_index(index); @@ -1840,7 +1839,7 @@ static void draw_dm_edges_sharp(DerivedMesh *dm) /* Draw faces with color set based on selection * return 2 for the active face so it renders with stipple enabled */ -static int draw_dm_faces_sel__setDrawOptions(void *userData, int index, int *drawSmooth_r) +static int draw_dm_faces_sel__setDrawOptions(void *userData, int index, int *UNUSED(drawSmooth_r)) { struct { unsigned char *cols[3]; EditFace *efa_act; } * data = userData; EditFace *efa = EM_get_face_for_index(index); @@ -1872,7 +1871,7 @@ static void draw_dm_faces_sel(DerivedMesh *dm, unsigned char *baseCol, unsigned dm->drawMappedFaces(dm, draw_dm_faces_sel__setDrawOptions, &data, 0, GPU_enable_material); } -static int draw_dm_creases__setDrawOptions(void *userData, int index) +static int draw_dm_creases__setDrawOptions(void *UNUSED(userData), int index) { EditEdge *eed = EM_get_edge_for_index(index); @@ -1890,7 +1889,7 @@ static void draw_dm_creases(DerivedMesh *dm) glLineWidth(1.0); } -static int draw_dm_bweights__setDrawOptions(void *userData, int index) +static int draw_dm_bweights__setDrawOptions(void *UNUSED(userData), int index) { EditEdge *eed = EM_get_edge_for_index(index); @@ -1901,7 +1900,7 @@ static int draw_dm_bweights__setDrawOptions(void *userData, int index) return 0; } } -static void draw_dm_bweights__mapFunc(void *userData, int index, float *co, float *no_f, short *no_s) +static void draw_dm_bweights__mapFunc(void *UNUSED(userData), int index, float *co, float *UNUSED(no_f), short *UNUSED(no_s)) { EditVert *eve = EM_get_vert_for_index(index); @@ -1936,7 +1935,7 @@ static void draw_dm_bweights(Scene *scene, DerivedMesh *dm) /* EditMesh drawing routines*/ -static void draw_em_fancy_verts(Scene *scene, View3D *v3d, Object *obedit, EditMesh *em, DerivedMesh *cageDM, EditVert *eve_act) +static void draw_em_fancy_verts(Scene *scene, View3D *v3d, Object *obedit, DerivedMesh *cageDM, EditVert *eve_act) { ToolSettings *ts= scene->toolsettings; int sel; @@ -2227,7 +2226,7 @@ static void draw_em_measure_stats(View3D *v3d, RegionView3D *rv3d, Object *ob, E } } -static int draw_em_fancy__setFaceOpts(void *userData, int index, int *drawSmooth_r) +static int draw_em_fancy__setFaceOpts(void *UNUSED(userData), int index, int *UNUSED(drawSmooth_r)) { EditFace *efa = EM_get_face_for_index(index); @@ -2239,7 +2238,7 @@ static int draw_em_fancy__setFaceOpts(void *userData, int index, int *drawSmooth return 0; } -static int draw_em_fancy__setGLSLFaceOpts(void *userData, int index) +static int draw_em_fancy__setGLSLFaceOpts(void *UNUSED(userData), int index) { EditFace *efa = EM_get_face_for_index(index); @@ -2385,7 +2384,7 @@ static void draw_em_fancy(Scene *scene, View3D *v3d, RegionView3D *rv3d, Object if(em) { // XXX retopo_matrix_update(v3d); - draw_em_fancy_verts(scene, v3d, ob, em, cageDM, eve_act); + draw_em_fancy_verts(scene, v3d, ob, cageDM, eve_act); if(me->drawflag & ME_DRAWNORMALS) { UI_ThemeColor(TH_NORMAL); @@ -2435,7 +2434,7 @@ static void draw_mesh_object_outline(View3D *v3d, Object *ob, DerivedMesh *dm) } } -static int wpaint__setSolidDrawOptions(void *userData, int index, int *drawSmooth_r) +static int wpaint__setSolidDrawOptions(void *UNUSED(userData), int UNUSED(index), int *drawSmooth_r) { *drawSmooth_r = 1; return 1; @@ -4030,7 +4029,7 @@ static void draw_update_ptcache_edit(Scene *scene, Object *ob, PTCacheEdit *edit psys_cache_edit_paths(scene, ob, edit, CFRA); } -static void draw_ptcache_edit(Scene *scene, View3D *v3d, RegionView3D *rv3d, Object *ob, PTCacheEdit *edit, int dt) +static void draw_ptcache_edit(Scene *scene, View3D *v3d, PTCacheEdit *edit) { ParticleCacheKey **cache, *path, *pkey; PTCacheEditPoint *point; @@ -4824,9 +4823,9 @@ static void draw_empty_cone (float size) } /* draw points on curve speed handles */ +#if 0 // XXX old animation system stuff static void curve_draw_speed(Scene *scene, Object *ob) { -#if 0 // XXX old animation system stuff Curve *cu= ob->data; IpoCurve *icu; BezTriple *bezt; @@ -4852,8 +4851,8 @@ static void curve_draw_speed(Scene *scene, Object *ob) glPointSize(1.0); bglEnd(); -#endif // XXX old animation system stuff } +#endif // XXX old animation system stuff static void draw_textcurs(float textcurs[][2]) @@ -5649,13 +5648,13 @@ void draw_object(Scene *scene, ARegion *ar, View3D *v3d, Base *base, int flag) bAnimVizSettings *avs= &ob->avs; /* setup drawing environment for paths */ - draw_motion_paths_init(scene, v3d, ar); + draw_motion_paths_init(v3d, ar); /* draw motion path for object */ - draw_motion_path_instance(scene, v3d, ar, ob, NULL, avs, ob->mpath); + draw_motion_path_instance(scene, ob, NULL, avs, ob->mpath); /* cleanup after drawing */ - draw_motion_paths_cleanup(scene, v3d, ar); + draw_motion_paths_cleanup(v3d); } /* multiply view with object matrix. @@ -5879,9 +5878,9 @@ void draw_object(Scene *scene, ARegion *ar, View3D *v3d, Base *base, int flag) } else if(boundbox_clip(rv3d, ob->obmat, ob->bb ? ob->bb : cu->bb)) { empty_object= drawDispList(scene, v3d, rv3d, base, dt); - - if(cu->path) - curve_draw_speed(scene, ob); + +//XXX old animsys if(cu->path) +// curve_draw_speed(scene, ob); } break; case OB_MBALL: @@ -5900,7 +5899,7 @@ void draw_object(Scene *scene, ARegion *ar, View3D *v3d, Base *base, int flag) } case OB_EMPTY: if((v3d->flag2 & V3D_RENDER_OVERRIDE)==0) - drawaxes(ob->empty_drawsize, flag, ob->empty_drawtype); + drawaxes(ob->empty_drawsize, ob->empty_drawtype); break; case OB_LAMP: if((v3d->flag2 & V3D_RENDER_OVERRIDE)==0) { @@ -5926,7 +5925,7 @@ void draw_object(Scene *scene, ARegion *ar, View3D *v3d, Base *base, int flag) break; default: if((v3d->flag2 & V3D_RENDER_OVERRIDE)==0) { - drawaxes(1.0, flag, OB_ARROWS); + drawaxes(1.0, OB_ARROWS); } } @@ -5998,7 +5997,7 @@ void draw_object(Scene *scene, ARegion *ar, View3D *v3d, Base *base, int flag) PTCacheEdit *edit = PE_create_current(scene, ob); if(edit) { glLoadMatrixf(rv3d->viewmat); - draw_ptcache_edit(scene, v3d, rv3d, ob, edit, dt); + draw_ptcache_edit(scene, v3d, edit); glMultMatrixf(ob->obmat); } } @@ -6052,7 +6051,7 @@ void draw_object(Scene *scene, ARegion *ar, View3D *v3d, Base *base, int flag) // #if 0 smd->domain->tex = NULL; GPU_create_smoke(smd, 0); - draw_volume(scene, ar, v3d, base, smd->domain->tex, smd->domain->p0, smd->domain->p1, smd->domain->res, smd->domain->dx, smd->domain->tex_shadow); + draw_volume(ar, smd->domain->tex, smd->domain->p0, smd->domain->p1, smd->domain->res, smd->domain->dx, smd->domain->tex_shadow); GPU_free_smoke(smd); // #endif #if 0 @@ -6103,7 +6102,7 @@ void draw_object(Scene *scene, ARegion *ar, View3D *v3d, Base *base, int flag) { smd->domain->tex = NULL; GPU_create_smoke(smd, 1); - draw_volume(scene, ar, v3d, base, smd->domain->tex, smd->domain->p0, smd->domain->p1, smd->domain->res_wt, smd->domain->dx_wt, smd->domain->tex_shadow); + draw_volume(ar, smd->domain->tex, smd->domain->p0, smd->domain->p1, smd->domain->res_wt, smd->domain->dx_wt, smd->domain->tex_shadow); GPU_free_smoke(smd); } } @@ -6126,7 +6125,7 @@ void draw_object(Scene *scene, ARegion *ar, View3D *v3d, Base *base, int flag) if(dtx && (G.f & G_RENDER_OGL)==0) { if(dtx & OB_AXIS) { - drawaxes(1.0f, flag, OB_ARROWS); + drawaxes(1.0f, OB_ARROWS); } if(dtx & OB_BOUNDBOX) { if((v3d->flag2 & V3D_RENDER_OVERRIDE)==0) @@ -6266,7 +6265,7 @@ void draw_object(Scene *scene, ARegion *ar, View3D *v3d, Base *base, int flag) /* ***************** BACKBUF SEL (BBS) ********* */ -static void bbs_mesh_verts__mapFunc(void *userData, int index, float *co, float *no_f, short *no_s) +static void bbs_mesh_verts__mapFunc(void *userData, int index, float *co, float *UNUSED(no_f), short *UNUSED(no_s)) { int offset = (intptr_t) userData; EditVert *eve = EM_get_vert_for_index(index); @@ -6302,7 +6301,7 @@ static void bbs_mesh_wire(DerivedMesh *dm, int offset) dm->drawMappedEdges(dm, bbs_mesh_wire__setDrawOptions, (void*)(intptr_t) offset); } -static int bbs_mesh_solid__setSolidDrawOptions(void *userData, int index, int *drawSmooth_r) +static int bbs_mesh_solid__setSolidDrawOptions(void *userData, int index, int *UNUSED(drawSmooth_r)) { if (EM_get_face_for_index(index)->h==0) { if (userData) { @@ -6314,7 +6313,7 @@ static int bbs_mesh_solid__setSolidDrawOptions(void *userData, int index, int *d } } -static void bbs_mesh_solid__drawCenter(void *userData, int index, float *cent, float *no) +static void bbs_mesh_solid__drawCenter(void *UNUSED(userData), int index, float *cent, float *UNUSED(no)) { EditFace *efa = EM_get_face_for_index(index); @@ -6346,13 +6345,13 @@ static void bbs_mesh_solid_EM(Scene *scene, View3D *v3d, Object *ob, DerivedMesh } } -static int bbs_mesh_solid__setDrawOpts(void *userData, int index, int *drawSmooth_r) +static int bbs_mesh_solid__setDrawOpts(void *UNUSED(userData), int index, int *UNUSED(drawSmooth_r)) { WM_set_framebuffer_index_color(index+1); return 1; } -static int bbs_mesh_solid_hide__setDrawOpts(void *userData, int index, int *drawSmooth_r) +static int bbs_mesh_solid_hide__setDrawOpts(void *userData, int index, int *UNUSED(drawSmooth_r)) { Mesh *me = userData; @@ -6499,7 +6498,7 @@ void draw_object_instance(Scene *scene, View3D *v3d, RegionView3D *rv3d, Object draw_object_mesh_instance(scene, v3d, rv3d, ob, dt, outline); break; case OB_EMPTY: - drawaxes(ob->empty_drawsize, 0, ob->empty_drawtype); + drawaxes(ob->empty_drawsize, ob->empty_drawtype); break; } } diff --git a/source/blender/editors/space_view3d/drawvolume.c b/source/blender/editors/space_view3d/drawvolume.c index 678920f8173..611cf68d81c 100644 --- a/source/blender/editors/space_view3d/drawvolume.c +++ b/source/blender/editors/space_view3d/drawvolume.c @@ -175,7 +175,7 @@ static int larger_pow2(int n) return n*2; } -void draw_volume(Scene *scene, ARegion *ar, View3D *v3d, Base *base, GPUTexture *tex, float *min, float *max, int res[3], float dx, GPUTexture *tex_shadow) +void draw_volume(ARegion *ar, GPUTexture *tex, float *min, float *max, int res[3], float dx, GPUTexture *tex_shadow) { RegionView3D *rv3d= ar->regiondata; diff --git a/source/blender/editors/space_view3d/view3d_header.c b/source/blender/editors/space_view3d/view3d_header.c index d7ab8034286..5ca8843b658 100644 --- a/source/blender/editors/space_view3d/view3d_header.c +++ b/source/blender/editors/space_view3d/view3d_header.c @@ -304,7 +304,7 @@ static char *view3d_modeselect_pup(Scene *scene) } -static void do_view3d_header_buttons(bContext *C, void *arg, int event) +static void do_view3d_header_buttons(bContext *C, void *UNUSED(arg), int event) { wmWindow *win= CTX_wm_window(C); ToolSettings *ts= CTX_data_tool_settings(C); diff --git a/source/blender/editors/space_view3d/view3d_intern.h b/source/blender/editors/space_view3d/view3d_intern.h index 4065b159ccf..49ef803b1af 100644 --- a/source/blender/editors/space_view3d/view3d_intern.h +++ b/source/blender/editors/space_view3d/view3d_intern.h @@ -93,11 +93,11 @@ void VIEW3D_OT_drawtype(struct wmOperatorType *ot); void view3d_boxview_copy(ScrArea *sa, ARegion *ar); /* drawanim.c */ -void draw_motion_paths_init(Scene *scene, View3D *v3d, struct ARegion *ar); -void draw_motion_path_instance(Scene *scene, View3D *v3d, struct ARegion *ar, +void draw_motion_paths_init(View3D *v3d, struct ARegion *ar); +void draw_motion_path_instance(Scene *scene, struct Object *ob, struct bPoseChannel *pchan, struct bAnimVizSettings *avs, struct bMotionPath *mpath); -void draw_motion_paths_cleanup(Scene *scene, View3D *v3d, struct ARegion *ar); +void draw_motion_paths_cleanup(View3D *v3d); @@ -106,7 +106,7 @@ void draw_object(Scene *scene, struct ARegion *ar, View3D *v3d, Base *base, int int draw_glsl_material(Scene *scene, struct Object *ob, View3D *v3d, int dt); void draw_object_instance(Scene *scene, View3D *v3d, RegionView3D *rv3d, struct Object *ob, int dt, int outline); void draw_object_backbufsel(Scene *scene, View3D *v3d, RegionView3D *rv3d, struct Object *ob); -void drawaxes(float size, int flag, char drawtype); +void drawaxes(float size, char drawtype); void view3d_cached_text_draw_begin(void); void view3d_cached_text_draw_add(float x, float y, float z, char *str, short xoffs, short flag); @@ -189,7 +189,7 @@ ARegion *view3d_has_buttons_region(ScrArea *sa); ARegion *view3d_has_tools_region(ScrArea *sa); /* draw_volume.c */ -void draw_volume(struct Scene *scene, struct ARegion *ar, struct View3D *v3d, struct Base *base, struct GPUTexture *tex, float *min, float *max, int res[3], float dx, struct GPUTexture *tex_shadow); +void draw_volume(struct ARegion *ar, struct GPUTexture *tex, float *min, float *max, int res[3], float dx, struct GPUTexture *tex_shadow); #endif /* ED_VIEW3D_INTERN_H */ -- cgit v1.2.3 From f81248265d0792029000bb53d23130f88c27a20a Mon Sep 17 00:00:00 2001 From: Campbell Barton Date: Fri, 15 Oct 2010 01:36:14 +0000 Subject: tag UNUSED() for operator exec() and invoke() functions. --- source/blender/editors/space_view3d/view3d_buttons.c | 2 +- source/blender/editors/space_view3d/view3d_edit.c | 14 +++++++------- source/blender/editors/space_view3d/view3d_snap.c | 12 ++++++------ source/blender/editors/space_view3d/view3d_toolbar.c | 2 +- source/blender/editors/space_view3d/view3d_view.c | 10 +++++----- 5 files changed, 20 insertions(+), 20 deletions(-) (limited to 'source/blender/editors/space_view3d') diff --git a/source/blender/editors/space_view3d/view3d_buttons.c b/source/blender/editors/space_view3d/view3d_buttons.c index a0167c87d87..1bff01a02e4 100644 --- a/source/blender/editors/space_view3d/view3d_buttons.c +++ b/source/blender/editors/space_view3d/view3d_buttons.c @@ -1451,7 +1451,7 @@ void view3d_buttons_register(ARegionType *art) // XXX view3d_panel_preview(C, ar, 0); } -static int view3d_properties(bContext *C, wmOperator *op) +static int view3d_properties(bContext *C, wmOperator *UNUSED(op)) { ScrArea *sa= CTX_wm_area(C); ARegion *ar= view3d_has_buttons_region(sa); diff --git a/source/blender/editors/space_view3d/view3d_edit.c b/source/blender/editors/space_view3d/view3d_edit.c index 9f1b55ee2ce..e60dde7c88b 100644 --- a/source/blender/editors/space_view3d/view3d_edit.c +++ b/source/blender/editors/space_view3d/view3d_edit.c @@ -1374,7 +1374,7 @@ void VIEW3D_OT_view_all(wmOperatorType *ot) } -static int viewselected_exec(bContext *C, wmOperator *op) /* like a localview without local!, was centerview() in 2.4x */ +static int viewselected_exec(bContext *C, wmOperator *UNUSED(op)) /* like a localview without local!, was centerview() in 2.4x */ { ARegion *ar= CTX_wm_region(C); View3D *v3d = CTX_wm_view3d(C); @@ -1514,7 +1514,7 @@ void VIEW3D_OT_view_selected(wmOperatorType *ot) ot->flag= 0; } -static int viewcenter_cursor_exec(bContext *C, wmOperator *op) +static int viewcenter_cursor_exec(bContext *C, wmOperator *UNUSED(op)) { View3D *v3d = CTX_wm_view3d(C); RegionView3D *rv3d= CTX_wm_region_view3d(C); @@ -2151,7 +2151,7 @@ void VIEW3D_OT_view_pan(wmOperatorType *ot) RNA_def_enum(ot->srna, "type", prop_view_pan_items, 0, "Pan", "Direction of View Pan"); } -static int viewpersportho_exec(bContext *C, wmOperator *op) +static int viewpersportho_exec(bContext *C, wmOperator *UNUSED(op)) { ARegion *ar= CTX_wm_region(C); RegionView3D *rv3d= CTX_wm_region_view3d(C); @@ -2200,14 +2200,14 @@ static BGpic *add_background_image(bContext *C) return bgpic; } -static int add_background_image_exec(bContext *C, wmOperator *op) +static int add_background_image_exec(bContext *C, wmOperator *UNUSED(op)) { add_background_image(C); return OPERATOR_FINISHED; } -static int add_background_image_invoke(bContext *C, wmOperator *op, wmEvent *event) +static int add_background_image_invoke(bContext *C, wmOperator *op, wmEvent *UNUSED(event)) { Scene *scene= CTX_data_scene(C); View3D *v3d= CTX_wm_view3d(C); @@ -2410,7 +2410,7 @@ void VIEW3D_OT_clip_border(wmOperatorType *ot) /* ***************** 3d cursor cursor op ******************* */ /* mx my in region coords */ -static int set_3dcursor_invoke(bContext *C, wmOperator *op, wmEvent *event) +static int set_3dcursor_invoke(bContext *C, wmOperator *UNUSED(op), wmEvent *event) { Scene *scene= CTX_data_scene(C); ARegion *ar= CTX_wm_region(C); @@ -2535,7 +2535,7 @@ void VIEW3D_OT_manipulator(wmOperatorType *ot) Transform_Properties(ot, P_CONSTRAINT); } -static int enable_manipulator_invoke(bContext *C, wmOperator *op, wmEvent *event) +static int enable_manipulator_invoke(bContext *C, wmOperator *op, wmEvent *UNUSED(event)) { View3D *v3d = CTX_wm_view3d(C); diff --git a/source/blender/editors/space_view3d/view3d_snap.c b/source/blender/editors/space_view3d/view3d_snap.c index 7f5f7665028..4ef1d4daf92 100644 --- a/source/blender/editors/space_view3d/view3d_snap.c +++ b/source/blender/editors/space_view3d/view3d_snap.c @@ -443,7 +443,7 @@ static void make_trans_verts(Object *obedit, float *min, float *max, int mode) /* *********************** operators ******************** */ -static int snap_sel_to_grid(bContext *C, wmOperator *op) +static int snap_sel_to_grid(bContext *C, wmOperator *UNUSED(op)) { extern float originmat[3][3]; /* XXX object.c */ Main *bmain= CTX_data_main(C); @@ -577,7 +577,7 @@ void VIEW3D_OT_snap_selected_to_grid(wmOperatorType *ot) /* *************************************************** */ -static int snap_sel_to_curs(bContext *C, wmOperator *op) +static int snap_sel_to_curs(bContext *C, wmOperator *UNUSED(op)) { extern float originmat[3][3]; /* XXX object.c */ Main *bmain= CTX_data_main(C); @@ -703,7 +703,7 @@ void VIEW3D_OT_snap_selected_to_cursor(wmOperatorType *ot) /* *************************************************** */ -static int snap_curs_to_grid(bContext *C, wmOperator *op) +static int snap_curs_to_grid(bContext *C, wmOperator *UNUSED(op)) { Scene *scene= CTX_data_scene(C); RegionView3D *rv3d= CTX_wm_region_data(C); @@ -740,7 +740,7 @@ void VIEW3D_OT_snap_cursor_to_grid(wmOperatorType *ot) /* **************************************************** */ -static int snap_curs_to_sel(bContext *C, wmOperator *op) +static int snap_curs_to_sel(bContext *C, wmOperator *UNUSED(op)) { Object *obedit= CTX_data_edit_object(C); Scene *scene= CTX_data_scene(C); @@ -847,7 +847,7 @@ void VIEW3D_OT_snap_cursor_to_selected(wmOperatorType *ot) /* ********************************************** */ -static int snap_curs_to_active(bContext *C, wmOperator *op) +static int snap_curs_to_active(bContext *C, wmOperator *UNUSED(op)) { Object *obedit= CTX_data_edit_object(C); Object *obact= CTX_data_active_object(C); @@ -898,7 +898,7 @@ void VIEW3D_OT_snap_cursor_to_active(wmOperatorType *ot) /* **************************************************** */ /*New Code - Snap Cursor to Center -*/ -static int snap_curs_to_center(bContext *C, wmOperator *op) +static int snap_curs_to_center(bContext *C, wmOperator *UNUSED(op)) { Scene *scene= CTX_data_scene(C); View3D *v3d= CTX_wm_view3d(C); diff --git a/source/blender/editors/space_view3d/view3d_toolbar.c b/source/blender/editors/space_view3d/view3d_toolbar.c index 6e2624cb60b..10496bc078d 100644 --- a/source/blender/editors/space_view3d/view3d_toolbar.c +++ b/source/blender/editors/space_view3d/view3d_toolbar.c @@ -280,7 +280,7 @@ void view3d_tool_props_register(ARegionType *art) /* ********** operator to open/close toolshelf region */ -static int view3d_toolshelf(bContext *C, wmOperator *op) +static int view3d_toolshelf(bContext *C, wmOperator *UNUSED(op)) { ScrArea *sa= CTX_wm_area(C); ARegion *ar= view3d_has_tools_region(sa); diff --git a/source/blender/editors/space_view3d/view3d_view.c b/source/blender/editors/space_view3d/view3d_view.c index b49933cbb35..4bc921b6030 100644 --- a/source/blender/editors/space_view3d/view3d_view.c +++ b/source/blender/editors/space_view3d/view3d_view.c @@ -296,7 +296,7 @@ void smooth_view(bContext *C, Object *oldcamera, Object *camera, float *ofs, flo } /* only meant for timer usage */ -static int view3d_smoothview_invoke(bContext *C, wmOperator *op, wmEvent *event) +static int view3d_smoothview_invoke(bContext *C, wmOperator *UNUSED(op), wmEvent *event) { View3D *v3d = CTX_wm_view3d(C); RegionView3D *rv3d= CTX_wm_region_view3d(C); @@ -399,7 +399,7 @@ static void setcameratoview3d(View3D *v3d, RegionView3D *rv3d, Object *ob) } -static int view3d_setcameratoview_exec(bContext *C, wmOperator *op) +static int view3d_setcameratoview_exec(bContext *C, wmOperator *UNUSED(op)) { View3D *v3d = CTX_wm_view3d(C); RegionView3D *rv3d= CTX_wm_region_view3d(C); @@ -444,7 +444,7 @@ void VIEW3D_OT_setcameratoview(wmOperatorType *ot) } -static int view3d_setobjectascamera_exec(bContext *C, wmOperator *op) +static int view3d_setobjectascamera_exec(bContext *C, wmOperator *UNUSED(op)) { View3D *v3d = CTX_wm_view3d(C); RegionView3D *rv3d= CTX_wm_region_view3d(C); @@ -1600,7 +1600,7 @@ static void endlocalview(Scene *scene, ScrArea *sa) } } -static int localview_exec(bContext *C, wmOperator *unused) +static int localview_exec(bContext *C, wmOperator *UNUSED(unused)) { View3D *v3d= CTX_wm_view3d(C); @@ -1770,7 +1770,7 @@ int ED_view3d_context_activate(bContext *C) return 1; } -static int game_engine_exec(bContext *C, wmOperator *op) +static int game_engine_exec(bContext *C, wmOperator *UNUSED(op)) { #if GAMEBLENDER == 1 Scene *startscene = CTX_data_scene(C); -- cgit v1.2.3 From db09ca106dfddd64e62ca7da4c85e720007aba4b Mon Sep 17 00:00:00 2001 From: Campbell Barton Date: Fri, 15 Oct 2010 12:29:02 +0000 Subject: remove/tag unused args for view*.c, gpu*.c & image*.c --- source/blender/editors/space_view3d/space_view3d.c | 10 ++++---- .../blender/editors/space_view3d/view3d_buttons.c | 28 +++++++++++----------- source/blender/editors/space_view3d/view3d_draw.c | 8 +++---- source/blender/editors/space_view3d/view3d_edit.c | 14 +++++------ .../blender/editors/space_view3d/view3d_intern.h | 2 +- .../blender/editors/space_view3d/view3d_select.c | 24 +++++++++---------- source/blender/editors/space_view3d/view3d_snap.c | 13 ++++------ .../blender/editors/space_view3d/view3d_toolbar.c | 4 ++-- source/blender/editors/space_view3d/view3d_view.c | 6 ++--- 9 files changed, 53 insertions(+), 56 deletions(-) (limited to 'source/blender/editors/space_view3d') diff --git a/source/blender/editors/space_view3d/space_view3d.c b/source/blender/editors/space_view3d/space_view3d.c index 629e0efe2ce..6261ca52564 100644 --- a/source/blender/editors/space_view3d/space_view3d.c +++ b/source/blender/editors/space_view3d/space_view3d.c @@ -274,7 +274,7 @@ static void view3d_free(SpaceLink *sl) /* spacetype; init callback */ -static void view3d_init(struct wmWindowManager *wm, ScrArea *sa) +static void view3d_init(struct wmWindowManager *UNUSED(wm), ScrArea *UNUSED(sa)) { } @@ -387,7 +387,7 @@ static void view3d_main_area_init(wmWindowManager *wm, ARegion *ar) } -static int view3d_ob_drop_poll(bContext *C, wmDrag *drag, wmEvent *event) +static int view3d_ob_drop_poll(bContext *UNUSED(C), wmDrag *drag, wmEvent *UNUSED(event)) { if(drag->type==WM_DRAG_ID) { ID *id= (ID *)drag->poin; @@ -397,7 +397,7 @@ static int view3d_ob_drop_poll(bContext *C, wmDrag *drag, wmEvent *event) return 0; } -static int view3d_mat_drop_poll(bContext *C, wmDrag *drag, wmEvent *event) +static int view3d_mat_drop_poll(bContext *UNUSED(C), wmDrag *drag, wmEvent *UNUSED(event)) { if(drag->type==WM_DRAG_ID) { ID *id= (ID *)drag->poin; @@ -407,7 +407,7 @@ static int view3d_mat_drop_poll(bContext *C, wmDrag *drag, wmEvent *event) return 0; } -static int view3d_ima_drop_poll(bContext *C, wmDrag *drag, wmEvent *event) +static int view3d_ima_drop_poll(bContext *UNUSED(C), wmDrag *drag, wmEvent *UNUSED(event)) { if(drag->type==WM_DRAG_ID) { ID *id= (ID *)drag->poin; @@ -726,7 +726,7 @@ static void view3d_main_area_listener(ARegion *ar, wmNotifier *wmn) } /* concept is to retrieve cursor type context-less */ -static void view3d_main_area_cursor(wmWindow *win, ScrArea *sa, ARegion *ar) +static void view3d_main_area_cursor(wmWindow *win, ScrArea *UNUSED(sa), ARegion *UNUSED(ar)) { Scene *scene= win->screen->scene; diff --git a/source/blender/editors/space_view3d/view3d_buttons.c b/source/blender/editors/space_view3d/view3d_buttons.c index 1bff01a02e4..141a8800365 100644 --- a/source/blender/editors/space_view3d/view3d_buttons.c +++ b/source/blender/editors/space_view3d/view3d_buttons.c @@ -128,7 +128,7 @@ typedef struct { /* is used for both read and write... */ -static void v3d_editvertex_buts(const bContext *C, uiLayout *layout, View3D *v3d, Object *ob, float lim) +static void v3d_editvertex_buts(uiLayout *layout, View3D *v3d, Object *ob, float lim) { uiBlock *block= (layout)? uiLayoutAbsoluteBlock(layout): NULL; MDeformVert *dvert=NULL; @@ -643,7 +643,7 @@ static void vgroup_normalize_active(Object *ob) } -static void do_view3d_vgroup_buttons(bContext *C, void *arg, int event) +static void do_view3d_vgroup_buttons(bContext *C, void *UNUSED(arg), int event) { Scene *scene= CTX_data_scene(C); Object *ob= OBACT; @@ -670,7 +670,7 @@ static void do_view3d_vgroup_buttons(bContext *C, void *arg, int event) WM_event_add_notifier(C, NC_GEOM|ND_DATA, ob->data); } -int view3d_panel_vgroup_poll(const bContext *C, PanelType *pt) +int view3d_panel_vgroup_poll(const bContext *C, PanelType *UNUSED(pt)) { Scene *scene= CTX_data_scene(C); Object *ob= OBACT; @@ -794,7 +794,7 @@ static void v3d_transform_butsR(uiLayout *layout, PointerRNA *ptr) } } -static void v3d_posearmature_buts(uiLayout *layout, View3D *v3d, Object *ob, float lim) +static void v3d_posearmature_buts(uiLayout *layout, Object *ob) { // uiBlock *block= uiLayoutGetBlock(layout); // bArmature *arm; @@ -896,7 +896,7 @@ void validate_editbonebutton_cb(bContext *C, void *bonev, void *namev) WM_event_add_notifier(C, NC_OBJECT|ND_BONE_SELECT, CTX_data_edit_object(C)); // XXX fix } -static void v3d_editarmature_buts(uiLayout *layout, View3D *v3d, Object *ob, float lim) +static void v3d_editarmature_buts(uiLayout *layout, Object *ob) { // uiBlock *block= uiLayoutGetBlock(layout); bArmature *arm= ob->data; @@ -930,7 +930,7 @@ static void v3d_editarmature_buts(uiLayout *layout, View3D *v3d, Object *ob, flo uiItemR(col, &eboneptr, "roll", 0, "Roll", 0); } -static void v3d_editmetaball_buts(uiLayout *layout, Object *ob, float lim) +static void v3d_editmetaball_buts(uiLayout *layout, Object *ob) { PointerRNA mbptr, ptr; MetaBall *mball= ob->data; @@ -989,7 +989,7 @@ static int test_parent_loop(Object *par, Object *ob) return test_parent_loop(par->parent, ob); } -static void do_view3d_region_buttons(bContext *C, void *arg, int event) +static void do_view3d_region_buttons(bContext *C, void *UNUSED(index), int event) { Main *bmain= CTX_data_main(C); Scene *scene= CTX_data_scene(C); @@ -1012,7 +1012,7 @@ static void do_view3d_region_buttons(bContext *C, void *arg, int event) case B_OBJECTPANELMEDIAN: if(ob) { - v3d_editvertex_buts(C, NULL, v3d, ob, 1.0); + v3d_editvertex_buts(NULL, v3d, ob, 1.0); DAG_id_flush_update(&ob->id, OB_RECALC_DATA); } break; @@ -1152,12 +1152,12 @@ static void do_view3d_region_buttons(bContext *C, void *arg, int event) WM_event_add_notifier(C, NC_SPACE|ND_SPACE_VIEW3D, ob); } -void removeTransformOrientation_func(bContext *C, void *target, void *unused) +void removeTransformOrientation_func(bContext *C, void *target, void *UNUSED(arg)) { BIF_removeTransformOrientation(C, (TransformOrientation *) target); } -void selectTransformOrientation_func(bContext *C, void *target, void *unused) +void selectTransformOrientation_func(bContext *C, void *target, void *UNUSED(arg)) { BIF_selectTransformOrientation(C, (TransformOrientation *) target); } @@ -1203,12 +1203,12 @@ static void view3d_panel_object(const bContext *C, Panel *pa) RNA_id_pointer_create(&ob->id, &obptr); if(ob==obedit) { - if(ob->type==OB_ARMATURE) v3d_editarmature_buts(col, v3d, ob, lim); - if(ob->type==OB_MBALL) v3d_editmetaball_buts(col, ob, lim); - else v3d_editvertex_buts(C, col, v3d, ob, lim); + if(ob->type==OB_ARMATURE) v3d_editarmature_buts(col, ob); + if(ob->type==OB_MBALL) v3d_editmetaball_buts(col, ob); + else v3d_editvertex_buts(col, v3d, ob, lim); } else if(ob->mode & OB_MODE_POSE) { - v3d_posearmature_buts(col, v3d, ob, lim); + v3d_posearmature_buts(col, ob); } else { diff --git a/source/blender/editors/space_view3d/view3d_draw.c b/source/blender/editors/space_view3d/view3d_draw.c index 24f71b8b1df..6e634252631 100644 --- a/source/blender/editors/space_view3d/view3d_draw.c +++ b/source/blender/editors/space_view3d/view3d_draw.c @@ -1589,7 +1589,7 @@ static void draw_dupli_objects(Scene *scene, ARegion *ar, View3D *v3d, Base *bas } -void view3d_update_depths(ARegion *ar, View3D *v3d) +void view3d_update_depths(ARegion *ar) { RegionView3D *rv3d= ar->regiondata; @@ -2354,7 +2354,7 @@ void view3d_main_area_draw(const bContext *C, ARegion *ar) // retopo= retopo_mesh_check() || retopo_curve_check(); sculptparticle= (obact && obact->mode & (OB_MODE_PARTICLE_EDIT)) && !scene->obedit; if(retopo) - view3d_update_depths(ar, v3d); + view3d_update_depths(ar); /* draw selected and editmode */ for(base= scene->base.first; base; base= base->next) { @@ -2365,7 +2365,7 @@ void view3d_main_area_draw(const bContext *C, ARegion *ar) } if(!retopo && sculptparticle && !(obact && (obact->dtx & OB_DRAWXRAY))) { - view3d_update_depths(ar, v3d); + view3d_update_depths(ar); } // REEB_draw(); @@ -2378,7 +2378,7 @@ void view3d_main_area_draw(const bContext *C, ARegion *ar) ED_region_draw_cb_draw(C, ar, REGION_DRAW_POST_VIEW); if(!retopo && sculptparticle && (obact && (OBACT->dtx & OB_DRAWXRAY))) { - view3d_update_depths(ar, v3d); + view3d_update_depths(ar); } if(rv3d->rflag & RV3D_CLIPPING) diff --git a/source/blender/editors/space_view3d/view3d_edit.c b/source/blender/editors/space_view3d/view3d_edit.c index e60dde7c88b..41899a70b34 100644 --- a/source/blender/editors/space_view3d/view3d_edit.c +++ b/source/blender/editors/space_view3d/view3d_edit.c @@ -1548,7 +1548,7 @@ void VIEW3D_OT_view_center_cursor(wmOperatorType *ot) ot->flag= 0; } -static int view3d_center_camera_exec(bContext *C, wmOperator *op) /* was view3d_home() in 2.4x */ +static int view3d_center_camera_exec(bContext *C, wmOperator *UNUSED(op)) /* was view3d_home() in 2.4x */ { RegionView3D *rv3d= CTX_wm_region_view3d(C); @@ -1691,7 +1691,7 @@ static int view3d_zoom_border_exec(bContext *C, wmOperator *op) rv3d->depths->damaged = 1; } - view3d_update_depths(ar, v3d); + view3d_update_depths(ar); /* Constrain rect to depth bounds */ if (rect.xmin < 0) rect.xmin = 0; @@ -2220,7 +2220,7 @@ static int add_background_image_invoke(bContext *C, wmOperator *op, wmEvent *UNU char path[FILE_MAX]; RNA_string_get(op->ptr, "filepath", path); - ima= BKE_add_image_file(path, scene ? scene->r.cfra : 1); + ima= BKE_add_image_file(path); } else if(RNA_property_is_set(op->ptr, "name")) { RNA_string_get(op->ptr, "name", name); @@ -2644,7 +2644,7 @@ int view_autodist(Scene *scene, ARegion *ar, View3D *v3d, short *mval, float mou rv3d->depths->damaged = 1; } - view3d_update_depths(ar, v3d); + view3d_update_depths(ar); depth_close= view_autodist_depth_margin(ar, mval, 4); @@ -2688,7 +2688,7 @@ int view_autodist_init(Scene *scene, ARegion *ar, View3D *v3d, int mode) //, flo rv3d->depths->damaged = 1; } - view3d_update_depths(ar, v3d); + view3d_update_depths(ar); return 1; } @@ -2785,7 +2785,7 @@ void filterNDOFvalues(float *sbval) int dz_flag = 0; float m_dist; -void viewmoveNDOFfly(ARegion *ar, View3D *v3d, int mode) +void viewmoveNDOFfly(ARegion *ar, View3D *v3d, int UNUSED(mode)) { RegionView3D *rv3d= ar->regiondata; int i; @@ -2914,7 +2914,7 @@ void viewmoveNDOFfly(ARegion *ar, View3D *v3d, int mode) // XXX BIF_view3d_previewrender_signal(ar, PR_DBASE|PR_DISPRECT); } -void viewmoveNDOF(Scene *scene, ARegion *ar, View3D *v3d, int mode) +void viewmoveNDOF(Scene *scene, ARegion *ar, View3D *v3d, int UNUSED(mode)) { RegionView3D *rv3d= ar->regiondata; float fval[7]; diff --git a/source/blender/editors/space_view3d/view3d_intern.h b/source/blender/editors/space_view3d/view3d_intern.h index 49ef803b1af..9d1f5a77a3f 100644 --- a/source/blender/editors/space_view3d/view3d_intern.h +++ b/source/blender/editors/space_view3d/view3d_intern.h @@ -130,7 +130,7 @@ void add_view3d_after(ListBase *lb, Base *base, int flag); void circf(float x, float y, float rad); void circ(float x, float y, float rad); -void view3d_update_depths(struct ARegion *ar, View3D *v3d); +void view3d_update_depths(struct ARegion *ar); /* view3d_select.c */ void VIEW3D_OT_select(struct wmOperatorType *ot); diff --git a/source/blender/editors/space_view3d/view3d_select.c b/source/blender/editors/space_view3d/view3d_select.c index 7e6e8e0e6af..e3212e8a3d1 100644 --- a/source/blender/editors/space_view3d/view3d_select.c +++ b/source/blender/editors/space_view3d/view3d_select.c @@ -189,9 +189,9 @@ void EM_backbuf_checkAndSelectTFaces(Mesh *me, int select) } } +#if 0 void arrows_move_cursor(unsigned short event) { -#if 0 short mval[2]; getmouseco_sc(mval); @@ -205,8 +205,8 @@ void arrows_move_cursor(unsigned short event) } else if(event==RIGHTARROWKEY) { warp_pointer(mval[0]+1, mval[1]); } -#endif } +#endif /* *********************** GESTURE AND LASSO ******************* */ @@ -404,7 +404,7 @@ void lasso_select_boundbox(rcti *rect, short mcords[][2], short moves) } } -static void do_lasso_select_mesh__doSelectVert(void *userData, EditVert *eve, int x, int y, int index) +static void do_lasso_select_mesh__doSelectVert(void *userData, EditVert *eve, int x, int y, int UNUSED(index)) { struct { ViewContext vc; rcti *rect; short (*mcords)[2], moves, select, pass, done; } *data = userData; @@ -431,7 +431,7 @@ static void do_lasso_select_mesh__doSelectEdge(void *userData, EditEdge *eed, in } } } -static void do_lasso_select_mesh__doSelectFace(void *userData, EditFace *efa, int x, int y, int index) +static void do_lasso_select_mesh__doSelectFace(void *userData, EditFace *efa, int x, int y, int UNUSED(index)) { struct { ViewContext vc; rcti *rect; short (*mcords)[2], moves, select, pass, done; } *data = userData; @@ -560,7 +560,7 @@ static void do_lasso_select_mesh_uv(short mcords[][2], short moves, short select } #endif -static void do_lasso_select_curve__doSelect(void *userData, Nurb *nu, BPoint *bp, BezTriple *bezt, int beztindex, int x, int y) +static void do_lasso_select_curve__doSelect(void *userData, Nurb *UNUSED(nu), BPoint *bp, BezTriple *bezt, int beztindex, int x, int y) { struct { ViewContext *vc; short (*mcords)[2]; short moves; short select; } *data = userData; Object *obedit= data->vc->obedit; @@ -1291,7 +1291,7 @@ int edge_inside_circle(short centx, short centy, short rad, short x1, short y1, return 0; } -static void do_nurbs_box_select__doSelect(void *userData, Nurb *nu, BPoint *bp, BezTriple *bezt, int beztindex, int x, int y) +static void do_nurbs_box_select__doSelect(void *userData, Nurb *UNUSED(nu), BPoint *bp, BezTriple *bezt, int beztindex, int x, int y) { struct { ViewContext *vc; rcti *rect; int select; } *data = userData; Object *obedit= data->vc->obedit; @@ -1359,7 +1359,7 @@ static void do_lattice_box_select(ViewContext *vc, rcti *rect, int select, int e lattice_foreachScreenVert(vc, do_lattice_box_select__doSelect, &data); } -static void do_mesh_box_select__doSelectVert(void *userData, EditVert *eve, int x, int y, int index) +static void do_mesh_box_select__doSelectVert(void *userData, EditVert *eve, int x, int y, int UNUSED(index)) { struct { ViewContext vc; rcti *rect; short select, pass, done; } *data = userData; @@ -1384,7 +1384,7 @@ static void do_mesh_box_select__doSelectEdge(void *userData, EditEdge *eed, int } } } -static void do_mesh_box_select__doSelectFace(void *userData, EditFace *efa, int x, int y, int index) +static void do_mesh_box_select__doSelectFace(void *userData, EditFace *efa, int x, int y, int UNUSED(index)) { struct { ViewContext vc; rcti *rect; short select, pass, done; } *data = userData; @@ -1800,7 +1800,7 @@ void VIEW3D_OT_select(wmOperatorType *ot) /* -------------------- circle select --------------------------------------------- */ -static void mesh_circle_doSelectVert(void *userData, EditVert *eve, int x, int y, int index) +static void mesh_circle_doSelectVert(void *userData, EditVert *eve, int x, int y, int UNUSED(index)) { struct {ViewContext *vc; short select, mval[2]; float radius; } *data = userData; int mx = x - data->mval[0], my = y - data->mval[1]; @@ -1810,7 +1810,7 @@ static void mesh_circle_doSelectVert(void *userData, EditVert *eve, int x, int y eve->f = data->select?(eve->f|1):(eve->f&~1); } } -static void mesh_circle_doSelectEdge(void *userData, EditEdge *eed, int x0, int y0, int x1, int y1, int index) +static void mesh_circle_doSelectEdge(void *userData, EditEdge *eed, int x0, int y0, int x1, int y1, int UNUSED(index)) { struct {ViewContext *vc; short select, mval[2]; float radius; } *data = userData; @@ -1818,7 +1818,7 @@ static void mesh_circle_doSelectEdge(void *userData, EditEdge *eed, int x0, int EM_select_edge(eed, data->select); } } -static void mesh_circle_doSelectFace(void *userData, EditFace *efa, int x, int y, int index) +static void mesh_circle_doSelectFace(void *userData, EditFace *efa, int x, int y, int UNUSED(index)) { struct {ViewContext *vc; short select, mval[2]; float radius; } *data = userData; int mx = x - data->mval[0], my = y - data->mval[1]; @@ -1892,7 +1892,7 @@ static void paint_facesel_circle_select(ViewContext *vc, int selecting, short *m } -static void nurbscurve_circle_doSelect(void *userData, Nurb *nu, BPoint *bp, BezTriple *bezt, int beztindex, int x, int y) +static void nurbscurve_circle_doSelect(void *userData, Nurb *UNUSED(nu), BPoint *bp, BezTriple *bezt, int beztindex, int x, int y) { struct {ViewContext *vc; short select, mval[2]; float radius; } *data = userData; int mx = x - data->mval[0], my = y - data->mval[1]; diff --git a/source/blender/editors/space_view3d/view3d_snap.c b/source/blender/editors/space_view3d/view3d_snap.c index 4ef1d4daf92..d6778070931 100644 --- a/source/blender/editors/space_view3d/view3d_snap.c +++ b/source/blender/editors/space_view3d/view3d_snap.c @@ -82,7 +82,7 @@ static TransVert *transvmain=NULL; static int tottrans= 0; /* copied from editobject.c, now uses (almost) proper depgraph */ -static void special_transvert_update(Scene *scene, Object *obedit) +static void special_transvert_update(Object *obedit) { if(obedit) { @@ -481,7 +481,7 @@ static int snap_sel_to_grid(bContext *C, wmOperator *UNUSED(op)) VECCOPY(tv->loc, vec); } - special_transvert_update(scene, obedit); + special_transvert_update(obedit); MEM_freeN(transvmain); transvmain= NULL; @@ -602,15 +602,12 @@ static int snap_sel_to_curs(bContext *C, wmOperator *UNUSED(op)) tv= transvmain; for(a=0; aobmat[3][0]; - vec[1]= curs[1]-obedit->obmat[3][1]; - vec[2]= curs[2]-obedit->obmat[3][2]; - + sub_v3_v3v3(vec, curs, obedit->obmat[3]); mul_m3_v3(imat, vec); - VECCOPY(tv->loc, vec); + copy_v3_v3(tv->loc, vec); } - special_transvert_update(scene, obedit); + special_transvert_update(obedit); MEM_freeN(transvmain); transvmain= NULL; diff --git a/source/blender/editors/space_view3d/view3d_toolbar.c b/source/blender/editors/space_view3d/view3d_toolbar.c index 10496bc078d..0691895948a 100644 --- a/source/blender/editors/space_view3d/view3d_toolbar.c +++ b/source/blender/editors/space_view3d/view3d_toolbar.c @@ -65,7 +65,7 @@ /* op->invoke */ -static void redo_cb(bContext *C, void *arg_op, void *arg2) +static void redo_cb(bContext *C, void *arg_op, void *UNUSED(arg2)) { wmOperator *lastop= arg_op; @@ -177,7 +177,7 @@ static void operator_call_cb(struct bContext *C, void *arg_listbase, void *arg2) } -static void operator_search_cb(const struct bContext *C, void *arg, char *str, uiSearchItems *items) +static void operator_search_cb(const struct bContext *C, void *UNUSED(arg), char *str, uiSearchItems *items) { wmOperatorType *ot = WM_operatortype_first(); diff --git a/source/blender/editors/space_view3d/view3d_view.c b/source/blender/editors/space_view3d/view3d_view.c index 4bc921b6030..312ae1df590 100644 --- a/source/blender/editors/space_view3d/view3d_view.c +++ b/source/blender/editors/space_view3d/view3d_view.c @@ -380,7 +380,7 @@ void VIEW3D_OT_smoothview(wmOperatorType *ot) /* ****************** change view operators ****************** */ -static void setcameratoview3d(View3D *v3d, RegionView3D *rv3d, Object *ob) +static void setcameratoview3d(RegionView3D *rv3d, Object *ob) { float dvec[3]; float mat3[3][3]; @@ -408,7 +408,7 @@ static int view3d_setcameratoview_exec(bContext *C, wmOperator *UNUSED(op)) rv3d->lview= rv3d->view; rv3d->lpersp= rv3d->persp; - setcameratoview3d(v3d, rv3d, v3d->camera); + setcameratoview3d(rv3d, v3d->camera); rv3d->persp = RV3D_CAMOB; WM_event_add_notifier(C, NC_OBJECT|ND_TRANSFORM, v3d->camera); @@ -1986,7 +1986,7 @@ typedef struct FlyInfo { } FlyInfo; -static void drawFlyPixel(const struct bContext *C, struct ARegion *ar, void *arg) +static void drawFlyPixel(const struct bContext *UNUSED(C), struct ARegion *UNUSED(ar), void *arg) { FlyInfo *fly = arg; -- cgit v1.2.3 From 1807beabf5372f297329b6be2ab3ba89f954d33a Mon Sep 17 00:00:00 2001 From: Campbell Barton Date: Sat, 16 Oct 2010 02:40:31 +0000 Subject: - UNUSED macro wasn't throwing an error with GCC if a var become used. - made interface, windowmanager, readfile build without unused warnings. - re-arranged CMake's source/blender build order so less changed libs are build later, eg: IK, avi --- source/blender/editors/space_view3d/view3d_buttons.c | 2 +- source/blender/editors/space_view3d/view3d_toolbar.c | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) (limited to 'source/blender/editors/space_view3d') diff --git a/source/blender/editors/space_view3d/view3d_buttons.c b/source/blender/editors/space_view3d/view3d_buttons.c index 141a8800365..450b3725bdb 100644 --- a/source/blender/editors/space_view3d/view3d_buttons.c +++ b/source/blender/editors/space_view3d/view3d_buttons.c @@ -1421,7 +1421,7 @@ static void view3d_panel_operator_redo(const bContext *C, Panel *pa) } RNA_pointer_create(&wm->id, op->type->srna, op->properties, &ptr); - uiDefAutoButsRNA(C, pa->layout, &ptr, 2); + uiDefAutoButsRNA(pa->layout, &ptr, 2); } #endif // XXX not used diff --git a/source/blender/editors/space_view3d/view3d_toolbar.c b/source/blender/editors/space_view3d/view3d_toolbar.c index 0691895948a..16896f75915 100644 --- a/source/blender/editors/space_view3d/view3d_toolbar.c +++ b/source/blender/editors/space_view3d/view3d_toolbar.c @@ -114,7 +114,7 @@ static void view3d_panel_operator_redo_buts(const bContext *C, Panel *pa, wmOper op->layout= NULL; } else - uiDefAutoButsRNA(C, pa->layout, &ptr, 1); + uiDefAutoButsRNA(pa->layout, &ptr, 1); } static void view3d_panel_operator_redo_header(const bContext *C, Panel *pa) -- cgit v1.2.3 From e5fbd93cecc8527467cfe33a4c74a252c3d39828 Mon Sep 17 00:00:00 2001 From: Campbell Barton Date: Sat, 16 Oct 2010 08:03:28 +0000 Subject: editors/space_* build without unused args warnings --- source/blender/editors/space_view3d/view3d_edit.c | 1 - 1 file changed, 1 deletion(-) (limited to 'source/blender/editors/space_view3d') diff --git a/source/blender/editors/space_view3d/view3d_edit.c b/source/blender/editors/space_view3d/view3d_edit.c index 41899a70b34..dc75efcc5ca 100644 --- a/source/blender/editors/space_view3d/view3d_edit.c +++ b/source/blender/editors/space_view3d/view3d_edit.c @@ -2209,7 +2209,6 @@ static int add_background_image_exec(bContext *C, wmOperator *UNUSED(op)) static int add_background_image_invoke(bContext *C, wmOperator *op, wmEvent *UNUSED(event)) { - Scene *scene= CTX_data_scene(C); View3D *v3d= CTX_wm_view3d(C); Image *ima= NULL; BGpic *bgpic; -- cgit v1.2.3 From 8268a4be71fe326b5b7b43e5e55ef751844dddbc Mon Sep 17 00:00:00 2001 From: Campbell Barton Date: Sat, 16 Oct 2010 14:32:17 +0000 Subject: most unused arg warnings corrected. - removed deprecated bitmap arg from IMB_allocImBuf (plugins will need updating). - mostly tagged UNUSED() since some of these functions look like they may need to have the arguments used later. --- source/blender/editors/space_view3d/view3d_draw.c | 6 +++--- source/blender/editors/space_view3d/view3d_view.c | 5 ++++- 2 files changed, 7 insertions(+), 4 deletions(-) (limited to 'source/blender/editors/space_view3d') diff --git a/source/blender/editors/space_view3d/view3d_draw.c b/source/blender/editors/space_view3d/view3d_draw.c index 6e634252631..67c2a4f1c56 100644 --- a/source/blender/editors/space_view3d/view3d_draw.c +++ b/source/blender/editors/space_view3d/view3d_draw.c @@ -1140,7 +1140,7 @@ ImBuf *view3d_read_backbuf(ViewContext *vc, short xmin, short ymin, short xmax, if(ymax >= vc->ar->winy) ymaxc= vc->ar->winy-1; else ymaxc= ymax; if(yminc > ymaxc) return NULL; - ibuf= IMB_allocImBuf((xmaxc-xminc+1), (ymaxc-yminc+1), 32, IB_rect,0); + ibuf= IMB_allocImBuf((xmaxc-xminc+1), (ymaxc-yminc+1), 32, IB_rect); view3d_validate_backbuf(vc); @@ -1160,7 +1160,7 @@ ImBuf *view3d_read_backbuf(ViewContext *vc, short xmin, short ymin, short xmax, if(xminc==xmin && xmaxc==xmax && yminc==ymin && ymaxc==ymax) return ibuf; - ibuf1= IMB_allocImBuf( (xmax-xmin+1),(ymax-ymin+1),32,IB_rect,0); + ibuf1= IMB_allocImBuf( (xmax-xmin+1),(ymax-ymin+1),32,IB_rect); rd= ibuf->rect; dr= ibuf1->rect; @@ -2092,7 +2092,7 @@ ImBuf *ED_view3d_draw_offscreen_imbuf(Scene *scene, View3D *v3d, ARegion *ar, in } /* read in pixels & stamp */ - ibuf= IMB_allocImBuf(sizex, sizey, 32, flag, 0); + ibuf= IMB_allocImBuf(sizex, sizey, 32, flag); if(ibuf->rect_float) glReadPixels(0, 0, sizex, sizey, GL_RGBA, GL_FLOAT, ibuf->rect_float); diff --git a/source/blender/editors/space_view3d/view3d_view.c b/source/blender/editors/space_view3d/view3d_view.c index 312ae1df590..8b3d99e355d 100644 --- a/source/blender/editors/space_view3d/view3d_view.c +++ b/source/blender/editors/space_view3d/view3d_view.c @@ -1770,7 +1770,7 @@ int ED_view3d_context_activate(bContext *C) return 1; } -static int game_engine_exec(bContext *C, wmOperator *UNUSED(op)) +static int game_engine_exec(bContext *C, wmOperator *op) { #if GAMEBLENDER == 1 Scene *startscene = CTX_data_scene(C); @@ -1780,6 +1780,8 @@ static int game_engine_exec(bContext *C, wmOperator *UNUSED(op)) RegionView3D *rv3d; rcti cam_frame; + (void)op; /* unused */ + // bad context switch .. if(!ED_view3d_context_activate(C)) return OPERATOR_CANCELLED; @@ -1828,6 +1830,7 @@ static int game_engine_exec(bContext *C, wmOperator *UNUSED(op)) return OPERATOR_FINISHED; #else + (void)C; /* unused */ BKE_report(op->reports, RPT_ERROR, "Game engine is disabled in this build."); return OPERATOR_CANCELLED; #endif -- cgit v1.2.3 From b7ad16983c8a105299d7fd3f17d4141b87d66f26 Mon Sep 17 00:00:00 2001 From: Campbell Barton Date: Mon, 18 Oct 2010 08:11:34 +0000 Subject: Camera object drawing now shows shift (not especially important but the tracker is being unusably slow) --- source/blender/editors/space_view3d/drawobject.c | 26 ++++++++++++++---------- 1 file changed, 15 insertions(+), 11 deletions(-) (limited to 'source/blender/editors/space_view3d') diff --git a/source/blender/editors/space_view3d/drawobject.c b/source/blender/editors/space_view3d/drawobject.c index c9b8a086d22..e7a69642e9f 100644 --- a/source/blender/editors/space_view3d/drawobject.c +++ b/source/blender/editors/space_view3d/drawobject.c @@ -1211,7 +1211,7 @@ static void drawcamera(Scene *scene, View3D *v3d, RegionView3D *rv3d, Object *ob /* a standing up pyramid with (0,0,0) as top */ Camera *cam; World *wrld; - float nobmat[4][4], vec[8][4], fac, facx, facy, depth, aspx, aspy, caspx, caspy; + float nobmat[4][4], vec[8][4], fac, facx, facy, depth, aspx, aspy, caspx, caspy, shx, shy; int i; cam= ob->data; @@ -1233,6 +1233,8 @@ static void drawcamera(Scene *scene, View3D *v3d, RegionView3D *rv3d, Object *ob if(rv3d->persp>=2 && cam->type==CAM_ORTHO && ob==v3d->camera) { facx= 0.5*cam->ortho_scale*caspx; facy= 0.5*cam->ortho_scale*caspy; + shx= cam->shiftx * cam->ortho_scale; + shy= cam->shifty * cam->ortho_scale; depth= -cam->clipsta-0.1; } else { @@ -1242,13 +1244,15 @@ static void drawcamera(Scene *scene, View3D *v3d, RegionView3D *rv3d, Object *ob depth= - fac*cam->lens/16.0; facx= fac*caspx; facy= fac*caspy; + shx= cam->shiftx*fac*2; + shy= cam->shifty*fac*2; } vec[0][0]= 0.0; vec[0][1]= 0.0; vec[0][2]= 0.001; /* GLBUG: for picking at iris Entry (well thats old!) */ - vec[1][0]= facx; vec[1][1]= facy; vec[1][2]= depth; - vec[2][0]= facx; vec[2][1]= -facy; vec[2][2]= depth; - vec[3][0]= -facx; vec[3][1]= -facy; vec[3][2]= depth; - vec[4][0]= -facx; vec[4][1]= facy; vec[4][2]= depth; + vec[1][0]= shx + facx; vec[1][1]= shy + facy; vec[1][2]= depth; + vec[2][0]= shx + facx; vec[2][1]= shy - facy; vec[2][2]= depth; + vec[3][0]= shx - facx; vec[3][1]= shy - facy; vec[3][2]= depth; + vec[4][0]= shx - facx; vec[4][1]= shy + facy; vec[4][2]= depth; glBegin(GL_LINE_LOOP); glVertex3fv(vec[1]); @@ -1281,16 +1285,16 @@ static void drawcamera(Scene *scene, View3D *v3d, RegionView3D *rv3d, Object *ob if (i==0) glBegin(GL_LINE_LOOP); else if (i==1 && (ob == v3d->camera)) glBegin(GL_TRIANGLES); else break; - - vec[0][0]= -0.7 * cam->drawsize; - vec[0][1]= cam->drawsize * (caspy + 0.1); + + vec[0][0]= shx + (-0.7 * cam->drawsize); + vec[0][1]= shy + (cam->drawsize * (caspy + 0.1)); glVertex3fv(vec[0]); /* left */ - vec[0][0] *= -1.0; + vec[0][0]= shx + (0.7 * cam->drawsize); glVertex3fv(vec[0]); /* right */ - vec[0][0]= 0.0; - vec[0][1]= 1.1 * cam->drawsize * (caspy + 0.7); + vec[0][0]= shx; + vec[0][1]= shy + (1.1 * cam->drawsize * (caspy + 0.7)); glVertex3fv(vec[0]); /* top */ glEnd(); -- cgit v1.2.3 From 106867910ea09fa63b04480dc83b20d67bdb4e09 Mon Sep 17 00:00:00 2001 From: Campbell Barton Date: Tue, 19 Oct 2010 01:21:22 +0000 Subject: use unsigned int for all layers. --- source/blender/editors/space_view3d/space_view3d.c | 2 +- source/blender/editors/space_view3d/view3d_header.c | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) (limited to 'source/blender/editors/space_view3d') diff --git a/source/blender/editors/space_view3d/space_view3d.c b/source/blender/editors/space_view3d/space_view3d.c index 6261ca52564..c1a07914b77 100644 --- a/source/blender/editors/space_view3d/space_view3d.c +++ b/source/blender/editors/space_view3d/space_view3d.c @@ -915,7 +915,7 @@ static int view3d_context(const bContext *C, const char *member, bContextDataRes View3D *v3d= CTX_wm_view3d(C); Scene *scene= CTX_data_scene(C); Base *base; - int lay = v3d ? v3d->lay:scene->lay; /* fallback to the scene layer, allows duplicate and other oject operators to run outside the 3d view */ + unsigned int lay = v3d ? v3d->lay:scene->lay; /* fallback to the scene layer, allows duplicate and other oject operators to run outside the 3d view */ if(CTX_data_dir(member)) { static const char *dir[] = { diff --git a/source/blender/editors/space_view3d/view3d_header.c b/source/blender/editors/space_view3d/view3d_header.c index 5ca8843b658..746c6acae1c 100644 --- a/source/blender/editors/space_view3d/view3d_header.c +++ b/source/blender/editors/space_view3d/view3d_header.c @@ -511,7 +511,7 @@ void uiTemplateHeader3D(uiLayout *layout, struct bContext *C) } if(obedit==NULL && v3d->localvd==NULL) { - int ob_lay = ob ? ob->lay : 0; + unsigned int ob_lay = ob ? ob->lay : 0; /* Layers */ if (v3d->scenelock) -- cgit v1.2.3 From a7734cf3c0cdc09ebc41210fef95cbb42ee92394 Mon Sep 17 00:00:00 2001 From: Campbell Barton Date: Tue, 19 Oct 2010 02:41:09 +0000 Subject: bugfix [#24314] Motion path (ghosting/onioning) numbers are displayed with offset --- source/blender/editors/space_view3d/drawanimviz.c | 15 +++++++--- source/blender/editors/space_view3d/drawarmature.c | 4 +-- source/blender/editors/space_view3d/drawobject.c | 34 +++++++++++----------- .../blender/editors/space_view3d/view3d_intern.h | 2 +- 4 files changed, 31 insertions(+), 24 deletions(-) (limited to 'source/blender/editors/space_view3d') diff --git a/source/blender/editors/space_view3d/drawanimviz.c b/source/blender/editors/space_view3d/drawanimviz.c index 4cce166b36b..52bb90aa8f0 100644 --- a/source/blender/editors/space_view3d/drawanimviz.c +++ b/source/blender/editors/space_view3d/drawanimviz.c @@ -78,7 +78,6 @@ void draw_motion_paths_init(View3D *v3d, ARegion *ar) * - assumes that the viewport has already been initialised properly * i.e. draw_motion_paths_init() has been called */ -// FIXME: the text is still drawn in the wrong space - it includes the current transforms of the object still... void draw_motion_path_instance(Scene *scene, Object *ob, bPoseChannel *pchan, bAnimVizSettings *avs, bMotionPath *mpath) { @@ -201,15 +200,20 @@ void draw_motion_path_instance(Scene *scene, UI_ThemeColor(TH_TEXT_HI); } + // XXX, this isnt up to date but probably should be kept so. + invert_m4_m4(ob->imat, ob->obmat); + /* Draw frame numbers at each framestep value */ if (avs->path_viewflag & MOTIONPATH_VIEW_FNUMS) { for (i=0, mpv=mpv_start; i < len; i+=stepsize, mpv+=stepsize) { char str[32]; + float co[3]; /* only draw framenum if several consecutive highlighted points don't occur on same point */ if (i == 0) { sprintf(str, "%d", (i+sfra)); - view3d_cached_text_draw_add(mpv->co[0], mpv->co[1], mpv->co[2], str, 0, 0); + mul_v3_m4v3(co, ob->imat, mpv->co); + view3d_cached_text_draw_add(co, str, 0, V3D_CACHE_TEXT_WORLDSPACE); } else if ((i > stepsize) && (i < len-stepsize)) { bMotionPathVert *mpvP = (mpv - stepsize); @@ -217,7 +221,8 @@ void draw_motion_path_instance(Scene *scene, if ((equals_v3v3(mpv->co, mpvP->co)==0) || (equals_v3v3(mpv->co, mpvN->co)==0)) { sprintf(str, "%d", (sfra+i)); - view3d_cached_text_draw_add(mpv->co[0], mpv->co[1], mpv->co[2], str, 0, 0); + mul_v3_m4v3(co, ob->imat, mpv->co); + view3d_cached_text_draw_add(co, str, 0, V3D_CACHE_TEXT_WORLDSPACE); } } } @@ -266,6 +271,7 @@ void draw_motion_path_instance(Scene *scene, /* Draw frame numbers of keyframes */ if (avs->path_viewflag & MOTIONPATH_VIEW_KFNOS) { + float co[3]; for (i=0, mpv=mpv_start; i < len; i++, mpv++) { float mframe= (float)(sfra + i); @@ -273,7 +279,8 @@ void draw_motion_path_instance(Scene *scene, char str[32]; sprintf(str, "%d", (sfra+i)); - view3d_cached_text_draw_add(mpv->co[0], mpv->co[1], mpv->co[2], str, 0, 0); + mul_v3_m4v3(co, ob->imat, mpv->co); + view3d_cached_text_draw_add(co, str, 0, V3D_CACHE_TEXT_WORLDSPACE); } } } diff --git a/source/blender/editors/space_view3d/drawarmature.c b/source/blender/editors/space_view3d/drawarmature.c index 6cbfc2cffe4..33776abf4a0 100644 --- a/source/blender/editors/space_view3d/drawarmature.c +++ b/source/blender/editors/space_view3d/drawarmature.c @@ -1892,7 +1892,7 @@ static void draw_pose_bones(Scene *scene, View3D *v3d, ARegion *ar, Base *base, /* Draw names of bone */ if (arm->flag & ARM_DRAWNAMES) { mid_v3_v3v3(vec, pchan->pose_head, pchan->pose_tail); - view3d_cached_text_draw_add(vec[0], vec[1], vec[2], pchan->name, 10, 0); + view3d_cached_text_draw_add(vec, pchan->name, 10, 0); } /* Draw additional axes on the bone tail */ @@ -2086,7 +2086,7 @@ static void draw_ebones(View3D *v3d, ARegion *ar, Object *ob, int dt) if (arm->flag & ARM_DRAWNAMES) { mid_v3_v3v3(vec, eBone->head, eBone->tail); glRasterPos3fv(vec); - view3d_cached_text_draw_add(vec[0], vec[1], vec[2], eBone->name, 10, 0); + view3d_cached_text_draw_add(vec, eBone->name, 10, 0); } /* Draw additional axes */ if (arm->flag & ARM_DRAWAXES) { diff --git a/source/blender/editors/space_view3d/drawobject.c b/source/blender/editors/space_view3d/drawobject.c index e7a69642e9f..5fabe6f2496 100644 --- a/source/blender/editors/space_view3d/drawobject.c +++ b/source/blender/editors/space_view3d/drawobject.c @@ -571,16 +571,14 @@ void view3d_cached_text_draw_begin() CachedTextLevel++; } -void view3d_cached_text_draw_add(float x, float y, float z, char *str, short xoffs, short flag) +void view3d_cached_text_draw_add(const float co[3], const char *str, short xoffs, short flag) { ListBase *strings= &CachedText[CachedTextLevel-1]; ViewCachedString *vos= MEM_callocN(sizeof(ViewCachedString), "ViewCachedString"); BLI_addtail(strings, vos); BLI_strncpy(vos->str, str, 128); - vos->vec[0]= x; - vos->vec[1]= y; - vos->vec[2]= z; + copy_v3_v3(vos->vec, co); glGetFloatv(GL_CURRENT_COLOR, vos->col); vos->xoffs= xoffs; vos->flag= flag; @@ -2115,7 +2113,7 @@ static void draw_em_measure_stats(View3D *v3d, RegionView3D *rv3d, Object *ob, E else sprintf(val, conv_float, len_v3v3(v1, v2)); - view3d_cached_text_draw_add(vmid[0], vmid[1], vmid[2], val, 0, 0); + view3d_cached_text_draw_add(vmid, val, 0, 0); } } } @@ -2154,7 +2152,7 @@ static void draw_em_measure_stats(View3D *v3d, RegionView3D *rv3d, Object *ob, E else sprintf(val, conv_float, area); - view3d_cached_text_draw_add(efa->cent[0], efa->cent[1], efa->cent[2], val, 0, 0); + view3d_cached_text_draw_add(efa->cent, val, 0, 0); } } } @@ -2196,13 +2194,13 @@ static void draw_em_measure_stats(View3D *v3d, RegionView3D *rv3d, Object *ob, E /* Vec 1 */ sprintf(val,"%.3f", RAD2DEG(angle_v3v3v3(v4, v1, v2))); interp_v3_v3v3(fvec, efa->cent, efa->v1->co, 0.8f); - view3d_cached_text_draw_add(fvec[0], fvec[1], fvec[2], val, 0, 0); + view3d_cached_text_draw_add(fvec, val, 0, 0); } if( (e1->f & e2->f & SELECT) || (do_moving && (efa->v2->f & SELECT)) ) { /* Vec 2 */ sprintf(val,"%.3f", RAD2DEG(angle_v3v3v3(v1, v2, v3))); interp_v3_v3v3(fvec, efa->cent, efa->v2->co, 0.8f); - view3d_cached_text_draw_add(fvec[0], fvec[1], fvec[2], val, 0, 0); + view3d_cached_text_draw_add(fvec, val, 0, 0); } if( (e2->f & e3->f & SELECT) || (do_moving && (efa->v3->f & SELECT)) ) { /* Vec 3 */ @@ -2211,14 +2209,14 @@ static void draw_em_measure_stats(View3D *v3d, RegionView3D *rv3d, Object *ob, E else sprintf(val,"%.3f", RAD2DEG(angle_v3v3v3(v2, v3, v1))); interp_v3_v3v3(fvec, efa->cent, efa->v3->co, 0.8f); - view3d_cached_text_draw_add(fvec[0], fvec[1], fvec[2], val, 0, 0); + view3d_cached_text_draw_add(fvec, val, 0, 0); } /* Vec 4 */ if(efa->v4) { if( (e3->f & e4->f & SELECT) || (do_moving && (efa->v4->f & SELECT)) ) { sprintf(val,"%.3f", RAD2DEG(angle_v3v3v3(v3, v4, v1))); interp_v3_v3v3(fvec, efa->cent, efa->v4->co, 0.8f); - view3d_cached_text_draw_add(fvec[0], fvec[1], fvec[2], val, 0, 0); + view3d_cached_text_draw_add(fvec, val, 0, 0); } } } @@ -3833,7 +3831,7 @@ static void draw_new_particle_system(Scene *scene, View3D *v3d, RegionView3D *rv /* in path drawing state.co is the end point */ /* use worldspace beause object matrix is already applied */ mul_v3_m4v3(vec_txt, ob->imat, state.co); - view3d_cached_text_draw_add(vec_txt[0], vec_txt[1], vec_txt[2], val, 10, V3D_CACHE_TEXT_WORLDSPACE); + view3d_cached_text_draw_add(vec_txt, val, 10, V3D_CACHE_TEXT_WORLDSPACE); } } } @@ -3927,7 +3925,7 @@ static void draw_new_particle_system(Scene *scene, View3D *v3d, RegionView3D *rv sprintf(val, "%i", a); /* use worldspace beause object matrix is already applied */ mul_v3_m4v3(vec_txt, ob->imat, cache[a]->co); - view3d_cached_text_draw_add(vec_txt[0], vec_txt[1], vec_txt[2], val, 10, V3D_CACHE_TEXT_WORLDSPACE); + view3d_cached_text_draw_add(vec_txt, val, 10, V3D_CACHE_TEXT_WORLDSPACE); } } } @@ -5510,11 +5508,11 @@ void drawRBpivot(bRigidBodyJointConstraint *data) glVertex3fv(v); glEnd(); if (axis==0) - view3d_cached_text_draw_add(v[0], v[1], v[2], "px", 0, 0); + view3d_cached_text_draw_add(v, "px", 0, 0); else if (axis==1) - view3d_cached_text_draw_add(v[0], v[1], v[2], "py", 0, 0); + view3d_cached_text_draw_add(v, "py", 0, 0); else - view3d_cached_text_draw_add(v[0], v[1], v[2], "pz", 0, 0); + view3d_cached_text_draw_add(v, "pz", 0, 0); } glLineWidth (1.0f); setlinestyle(0); @@ -5982,7 +5980,7 @@ void draw_object(Scene *scene, ARegion *ar, View3D *v3d, Base *base, int flag) draw_new_particle_system(scene, v3d, rv3d, base, psys, dt); } - + invert_m4_m4(ob->imat, ob->obmat); view3d_cached_text_draw_end(v3d, ar, 0, NULL); glMultMatrixf(ob->obmat); @@ -6140,7 +6138,8 @@ void draw_object(Scene *scene, ARegion *ar, View3D *v3d, Base *base, int flag) /* patch for several 3d cards (IBM mostly) that crash on glSelect with text drawing */ /* but, we also dont draw names for sets or duplicators */ if(flag == 0) { - view3d_cached_text_draw_add(0.0f, 0.0f, 0.0f, ob->id.name+2, 10, 0); + float zero[3]= {0,0,0}; + view3d_cached_text_draw_add(zero, ob->id.name+2, 10, 0); } } /*if(dtx & OB_DRAWIMAGE) drawDispListwire(&ob->disp);*/ @@ -6162,6 +6161,7 @@ void draw_object(Scene *scene, ARegion *ar, View3D *v3d, Base *base, int flag) } /* return warning, this is cached text draw */ + invert_m4_m4(ob->imat, ob->obmat); view3d_cached_text_draw_end(v3d, ar, 1, NULL); glLoadMatrixf(rv3d->viewmat); diff --git a/source/blender/editors/space_view3d/view3d_intern.h b/source/blender/editors/space_view3d/view3d_intern.h index 9d1f5a77a3f..d6d8fddd442 100644 --- a/source/blender/editors/space_view3d/view3d_intern.h +++ b/source/blender/editors/space_view3d/view3d_intern.h @@ -109,7 +109,7 @@ void draw_object_backbufsel(Scene *scene, View3D *v3d, RegionView3D *rv3d, struc void drawaxes(float size, char drawtype); void view3d_cached_text_draw_begin(void); -void view3d_cached_text_draw_add(float x, float y, float z, char *str, short xoffs, short flag); +void view3d_cached_text_draw_add(const float co[3], const char *str, short xoffs, short flag); void view3d_cached_text_draw_end(View3D *v3d, ARegion *ar, int depth_write, float mat[][4]); #define V3D_CACHE_TEXT_ZBUF 1 #define V3D_CACHE_TEXT_WORLDSPACE 2 -- cgit v1.2.3 From a781157047a5085fbe6d2a836571b6bff9871d02 Mon Sep 17 00:00:00 2001 From: Janne Karhu Date: Tue, 19 Oct 2010 09:28:38 +0000 Subject: Fix for bugs [#24316] Changing particles path step in particle mode makes lines invisible and [#24318] Particle lines disappear if view particles are enabled. --- source/blender/editors/space_view3d/drawobject.c | 1 + 1 file changed, 1 insertion(+) (limited to 'source/blender/editors/space_view3d') diff --git a/source/blender/editors/space_view3d/drawobject.c b/source/blender/editors/space_view3d/drawobject.c index 5fabe6f2496..bc340ef5b4b 100644 --- a/source/blender/editors/space_view3d/drawobject.c +++ b/source/blender/editors/space_view3d/drawobject.c @@ -5999,6 +5999,7 @@ void draw_object(Scene *scene, ARegion *ar, View3D *v3d, Base *base, int flag) PTCacheEdit *edit = PE_create_current(scene, ob); if(edit) { glLoadMatrixf(rv3d->viewmat); + draw_update_ptcache_edit(scene, ob, edit); draw_ptcache_edit(scene, v3d, edit); glMultMatrixf(ob->obmat); } -- cgit v1.2.3 From dc7e1037d42304282d58359116fa0e261037fff6 Mon Sep 17 00:00:00 2001 From: Campbell Barton Date: Tue, 19 Oct 2010 13:04:40 +0000 Subject: [#24307] 3d Viewport Mini 3D Axis changes color when alter 3d grid theme color Drawing the view axis went to a lot of trouble to create a color which didnt look very good if the grid had a color other then grey set. Simplify the function and just use the same colors as the manipulator, also use 2px fixed line width. --- source/blender/editors/space_view3d/view3d_draw.c | 83 +++++++++-------------- 1 file changed, 32 insertions(+), 51 deletions(-) (limited to 'source/blender/editors/space_view3d') diff --git a/source/blender/editors/space_view3d/view3d_draw.c b/source/blender/editors/space_view3d/view3d_draw.c index 67c2a4f1c56..1d18f484ae0 100644 --- a/source/blender/editors/space_view3d/view3d_draw.c +++ b/source/blender/editors/space_view3d/view3d_draw.c @@ -571,93 +571,74 @@ static void drawcursor(Scene *scene, ARegion *ar, View3D *v3d) } } -/* Draw a live substitute of the view icon, which is always shown */ +/* Draw a live substitute of the view icon, which is always shown + * colors copied from transform_manipulator.c, we should keep these matching. */ static void draw_view_axis(RegionView3D *rv3d) { const float k = U.rvisize; /* axis size */ const float toll = 0.5; /* used to see when view is quasi-orthogonal */ const float start = k + 1.0; /* axis center in screen coordinates, x=y */ float ydisp = 0.0; /* vertical displacement to allow obj info text */ - - /* rvibright ranges approx. from original axis icon color to gizmo color */ - float bright = U.rvibright / 15.0f; - - unsigned char col[3]; - unsigned char gridcol[3]; - float colf[3]; - - float vec[4]; + + float vec[3]; float dx, dy; - float h, s, v; /* thickness of lines is proportional to k */ - /* (log(k)-1) gives a more suitable thickness, but fps decreased by about 3 fps */ - glLineWidth(k / 10); - //glLineWidth(log(k)-1); // a bit slow - - UI_GetThemeColor3ubv(TH_GRID, (char *)gridcol); - + glLineWidth(2); + /* X */ - vec[0] = vec[3] = 1; + vec[0] = 1; vec[1] = vec[2] = 0; mul_qt_v3(rv3d->viewquat, vec); - - UI_make_axis_color((char *)gridcol, (char *)col, 'x'); - rgb_to_hsv(col[0]/255.0f, col[1]/255.0f, col[2]/255.0f, &h, &s, &v); - s = s<0.5 ? s+0.5 : 1.0; - v = 0.3; - v = (v<1.0-(bright) ? v+bright : 1.0); - hsv_to_rgb(h, s, v, colf, colf+1, colf+2); - glColor3fv(colf); - dx = vec[0] * k; dy = vec[1] * k; - fdrawline(start, start + ydisp, start + dx, start + dy + ydisp); + + glColor3ub(220, 0, 0); + glBegin(GL_LINES); + glVertex2f(start, start + ydisp); + glVertex2f(start + dx, start + dy + ydisp); + glEnd(); + if (fabs(dx) > toll || fabs(dy) > toll) { BLF_draw_default(start + dx + 2, start + dy + ydisp + 2, 0.0f, "x"); } /* Y */ - vec[1] = vec[3] = 1; + vec[1] = 1; vec[0] = vec[2] = 0; mul_qt_v3(rv3d->viewquat, vec); - - UI_make_axis_color((char *)gridcol, (char *)col, 'y'); - rgb_to_hsv(col[0]/255.0f, col[1]/255.0f, col[2]/255.0f, &h, &s, &v); - s = s<0.5 ? s+0.5 : 1.0; - v = 0.3; - v = (v<1.0-(bright) ? v+bright : 1.0); - hsv_to_rgb(h, s, v, colf, colf+1, colf+2); - glColor3fv(colf); - dx = vec[0] * k; dy = vec[1] * k; - fdrawline(start, start + ydisp, start + dx, start + dy + ydisp); + + glColor3ub(0, 220, 0); + glBegin(GL_LINES); + glVertex2f(start, start + ydisp); + glVertex2f(start + dx, start + dy + ydisp); + glEnd(); + if (fabs(dx) > toll || fabs(dy) > toll) { BLF_draw_default(start + dx + 2, start + dy + ydisp + 2, 0.0f, "y"); } /* Z */ - vec[2] = vec[3] = 1; + vec[2] = 1; vec[1] = vec[0] = 0; mul_qt_v3(rv3d->viewquat, vec); - - UI_make_axis_color((char *)gridcol, (char *)col, 'z'); - rgb_to_hsv(col[0]/255.0f, col[1]/255.0f, col[2]/255.0f, &h, &s, &v); - s = s<0.5 ? s+0.5 : 1.0; - v = 0.5; - v = (v<1.0-(bright) ? v+bright : 1.0); - hsv_to_rgb(h, s, v, colf, colf+1, colf+2); - glColor3fv(colf); - dx = vec[0] * k; dy = vec[1] * k; - fdrawline(start, start + ydisp, start + dx, start + dy + ydisp); + + glColor3ub(30, 30, 220); + glBegin(GL_LINES); + glVertex2f(start, start + ydisp); + glVertex2f(start + dx, start + dy + ydisp); + glEnd(); + if (fabs(dx) > toll || fabs(dy) > toll) { BLF_draw_default(start + dx + 2, start + dy + ydisp + 2, 0.0f, "z"); } - + /* restore line-width */ + glLineWidth(1.0); } -- cgit v1.2.3 From 0a12a9bc7dd38979410156187472f25e5164e1f0 Mon Sep 17 00:00:00 2001 From: Campbell Barton Date: Tue, 19 Oct 2010 15:35:46 +0000 Subject: [#24325] Texture painting using selected faces mask draw a subtle grey over unselected faces rather then coloring selected faces which got in the way of seeing the colors while painting. --- source/blender/editors/space_view3d/drawmesh.c | 38 +++++++++++++++++++------- 1 file changed, 28 insertions(+), 10 deletions(-) (limited to 'source/blender/editors/space_view3d') diff --git a/source/blender/editors/space_view3d/drawmesh.c b/source/blender/editors/space_view3d/drawmesh.c index 0df2888f4a0..f9af8bd5e79 100644 --- a/source/blender/editors/space_view3d/drawmesh.c +++ b/source/blender/editors/space_view3d/drawmesh.c @@ -168,6 +168,7 @@ static int draw_tfaces3D__setSelectOpts(void *userData, int index) return flags & eEdge_Select; } +#if 0 static int draw_tfaces3D__setActiveOpts(void *userData, int index) { struct { Mesh *me; EdgeHash *eh; } *data = userData; @@ -191,8 +192,21 @@ static int draw_tfaces3D__drawFaceOpts(void *userData, int index) else return 0; } +#endif -static void draw_tfaces3D(RegionView3D *rv3d, Mesh *me, DerivedMesh *dm) +/* draws unselected */ +static int draw_tfaces3D__drawFaceOptsInv(void *userData, int index) +{ + Mesh *me = (Mesh*)userData; + + MFace *mface = &me->mface[index]; + if (!(mface->flag&ME_HIDE) && !(mface->flag&ME_FACE_SEL)) + return 2; /* Don't set color */ + else + return 0; +} + +static void draw_tfaces3D(RegionView3D *rv3d, Mesh *me, DerivedMesh *dm, short draw_seams) { struct { Mesh *me; EdgeHash *eh; } data; @@ -203,17 +217,17 @@ static void draw_tfaces3D(RegionView3D *rv3d, Mesh *me, DerivedMesh *dm) glDisable(GL_LIGHTING); bglPolygonOffset(rv3d->dist, 1.0); - /* Draw (Hidden) Edges */ + /* Draw (Hidden) Edges */ + setlinestyle(1); UI_ThemeColor(TH_EDGE_FACESEL); dm->drawMappedEdges(dm, draw_tfaces3D__setHiddenOpts, &data); + setlinestyle(0); - /* Draw Seams */ - if(me->drawflag & ME_DRAWSEAMS) { + /* Draw Seams */ + if(draw_seams && me->drawflag & ME_DRAWSEAMS) { UI_ThemeColor(TH_EDGE_SEAM); glLineWidth(2); - dm->drawMappedEdges(dm, draw_tfaces3D__setSeamOpts, &data); - glLineWidth(1); } @@ -221,10 +235,16 @@ static void draw_tfaces3D(RegionView3D *rv3d, Mesh *me, DerivedMesh *dm) if(me->drawflag & ME_DRAWFACES) { glEnable(GL_BLEND); glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); +#if 0 UI_ThemeColor4(TH_FACE_SELECT); dm->drawMappedFacesTex(dm, draw_tfaces3D__drawFaceOpts, (void*)me); - +#else + /* dull unselected faces so as not to get in the way of seeing color */ + glColor4ub(96, 96, 96, 64); + dm->drawMappedFacesTex(dm, draw_tfaces3D__drawFaceOptsInv, (void*)me); +#endif + glDisable(GL_BLEND); } @@ -236,8 +256,6 @@ static void draw_tfaces3D(RegionView3D *rv3d, Mesh *me, DerivedMesh *dm) dm->drawMappedEdges(dm, draw_tfaces3D__setSelectOpts, &data); setlinestyle(0); - dm->drawMappedEdges(dm, draw_tfaces3D__setActiveOpts, &data); - bglPolygonOffset(rv3d->dist, 0.0); // resets correctly now, even after calling accumulated offsets BLI_edgehash_free(data.eh, NULL); @@ -671,7 +689,7 @@ void draw_mesh_textured(Scene *scene, View3D *v3d, RegionView3D *rv3d, Object *o /* draw edges and selected faces over textured mesh */ if(!(ob == scene->obedit) && faceselect) - draw_tfaces3D(rv3d, me, dm); + draw_tfaces3D(rv3d, me, dm, ob->mode & OB_MODE_WEIGHT_PAINT); /* reset from negative scale correction */ glFrontFace(GL_CCW); -- cgit v1.2.3 From c2aa5d6dc01dbc42ef9815bdbe8917b6164bf840 Mon Sep 17 00:00:00 2001 From: Campbell Barton Date: Wed, 20 Oct 2010 04:12:01 +0000 Subject: bugfix [#24333] Horizon Color Picker Crashes Blender if Two 3D View Windows are Open also added api function ED_area_tag_redraw_regiontype(), so an area can redraw all regions by type. In this case there is a view3d area listener that needs to draw all WINDOW regions. --- source/blender/editors/space_view3d/space_view3d.c | 84 +++++++++++----------- 1 file changed, 44 insertions(+), 40 deletions(-) (limited to 'source/blender/editors/space_view3d') diff --git a/source/blender/editors/space_view3d/space_view3d.c b/source/blender/editors/space_view3d/space_view3d.c index c1a07914b77..77f6e63e860 100644 --- a/source/blender/editors/space_view3d/space_view3d.c +++ b/source/blender/editors/space_view3d/space_view3d.c @@ -559,25 +559,9 @@ static void view3d_recalc_used_layers(ARegion *ar, wmNotifier *wmn, Scene *scene } } -static View3D *view3d_from_wmn(ARegion *ar, wmNotifier *wmn) -{ - wmWindow *win= wmn->wm->winactive; - ScrArea *sa; - - for(sa= win->screen->areabase.first; sa; sa= sa->next) { - if(sa->spacetype == SPACE_VIEW3D) - if(BLI_findindex(&sa->regionbase, ar) != -1) { - return (View3D *)sa->spacedata.first; - } - } - - return NULL; -} - static void view3d_main_area_listener(ARegion *ar, wmNotifier *wmn) { bScreen *sc; - View3D *v3d; /* context changes */ switch(wmn->category) { @@ -615,9 +599,7 @@ static void view3d_main_area_listener(ARegion *ar, wmNotifier *wmn) ED_region_tag_redraw(ar); break; case ND_WORLD: - v3d= view3d_from_wmn(ar, wmn); - if(v3d->flag2 & V3D_RENDER_OVERRIDE) - ED_region_tag_redraw(ar); + /* handled by space_view3d_listener() for v3d access */ break; } if (wmn->action == NA_EDITED) @@ -669,9 +651,7 @@ static void view3d_main_area_listener(ARegion *ar, wmNotifier *wmn) case NC_WORLD: switch(wmn->data) { case ND_WORLD_DRAW: - v3d= view3d_from_wmn(ar, wmn); - if(v3d->flag2 & V3D_RENDER_OVERRIDE) - ED_region_tag_redraw(ar); + /* handled by space_view3d_listener() for v3d access */ break; } break; @@ -910,6 +890,47 @@ static void view3d_props_area_listener(ARegion *ar, wmNotifier *wmn) } } +/*area (not region) level listener*/ +void space_view3d_listener(struct ScrArea *sa, struct wmNotifier *wmn) +{ + View3D *v3d = sa->spacedata.first; + + /* context changes */ + switch(wmn->category) { + case NC_SCENE: + switch(wmn->data) { + case ND_WORLD: + if(v3d->flag2 & V3D_RENDER_OVERRIDE) + ED_area_tag_redraw_regiontype(sa, RGN_TYPE_WINDOW); + break; + } + break; + case NC_WORLD: + switch(wmn->data) { + case ND_WORLD_DRAW: + if(v3d->flag2 & V3D_RENDER_OVERRIDE) + ED_area_tag_redraw_regiontype(sa, RGN_TYPE_WINDOW); + break; + } + break; + + } + +#if 0 // removed since BKE_image_user_calc_frame is now called in draw_bgpic because screen_ops doesnt call the notifier. + if (wmn->category == NC_SCENE && wmn->data == ND_FRAME) { + View3D *v3d = area->spacedata.first; + BGpic *bgpic = v3d->bgpicbase.first; + + for (; bgpic; bgpic = bgpic->next) { + if (bgpic->ima) { + Scene *scene = wmn->reference; + BKE_image_user_calc_frame(&bgpic->iuser, scene->r.cfra, 0); + } + } + } +#endif +} + static int view3d_context(const bContext *C, const char *member, bContextDataResult *result) { View3D *v3d= CTX_wm_view3d(C); @@ -1012,23 +1033,6 @@ static int view3d_context(const bContext *C, const char *member, bContextDataRes return -1; /* found but not available */ } -/*area (not region) level listener*/ -#if 0 // removed since BKE_image_user_calc_frame is now called in draw_bgpic because screen_ops doesnt call the notifier. -void space_view3d_listener(struct ScrArea *area, struct wmNotifier *wmn) -{ - if (wmn->category == NC_SCENE && wmn->data == ND_FRAME) { - View3D *v3d = area->spacedata.first; - BGpic *bgpic = v3d->bgpicbase.first; - - for (; bgpic; bgpic = bgpic->next) { - if (bgpic->ima) { - Scene *scene = wmn->reference; - BKE_image_user_calc_frame(&bgpic->iuser, scene->r.cfra, 0); - } - } - } -} -#endif /* only called once, from space/spacetypes.c */ void ED_spacetype_view3d(void) @@ -1042,7 +1046,7 @@ void ED_spacetype_view3d(void) st->new= view3d_new; st->free= view3d_free; st->init= view3d_init; -// st->listener = space_view3d_listener; + st->listener = space_view3d_listener; st->duplicate= view3d_duplicate; st->operatortypes= view3d_operatortypes; st->keymap= view3d_keymap; -- cgit v1.2.3 From 0ec320783ec5867cc9c29fff9a09a4d8f1b7fbdf Mon Sep 17 00:00:00 2001 From: Campbell Barton Date: Thu, 21 Oct 2010 07:38:09 +0000 Subject: fix [#24339] Auto Depth, makes viewport lag. The problem is the opensource nvidia nouveau drivers are slow running glReadPixels(), was hanging on memcpy(). However for autodepth its not needed to update the entire 3D view depths, so added view3d_update_depths_rect() to get the depths for a smaller area. --- source/blender/editors/space_view3d/view3d_draw.c | 68 ++++++++++++ source/blender/editors/space_view3d/view3d_edit.c | 117 +++++---------------- .../blender/editors/space_view3d/view3d_intern.h | 2 + 3 files changed, 95 insertions(+), 92 deletions(-) (limited to 'source/blender/editors/space_view3d') diff --git a/source/blender/editors/space_view3d/view3d_draw.c b/source/blender/editors/space_view3d/view3d_draw.c index 1d18f484ae0..7722ca5605b 100644 --- a/source/blender/editors/space_view3d/view3d_draw.c +++ b/source/blender/editors/space_view3d/view3d_draw.c @@ -1569,7 +1569,51 @@ static void draw_dupli_objects(Scene *scene, ARegion *ar, View3D *v3d, Base *bas draw_dupli_objects_color(scene, ar, v3d, base, color); } +void view3d_update_depths_rect(ARegion *ar, ViewDepths *d, rcti *rect) +{ + int x, y, w, h; + /* clamp rect by area */ + + /* Constrain rect to depth bounds */ + if (rect->xmin < 0) rect->xmin = 0; + if (rect->ymin < 0) rect->ymin = 0; + if (rect->xmax >= ar->winx) rect->xmax = ar->winx-1; + if (rect->ymax >= ar->winy) rect->ymax = ar->winy-1; + + /* assign values to compare with the ViewDepths */ + x= ar->winrct.xmin + rect->xmin; + y= ar->winrct.ymin + rect->ymin; + + w= rect->xmax - rect->xmin; + h= rect->ymax - rect->ymin; + + if( d->w != w || + d->h != h || + d->x != x || + d->y != y || + d->depths==NULL + ) { + d->x= x; + d->y= y; + d->w= w; + d->h= h; + + if(d->depths) + MEM_freeN(d->depths); + + d->depths= MEM_mallocN(sizeof(float)*d->w*d->h,"View depths Subset"); + + d->damaged= 1; + } + if(d->damaged) { + glReadPixels(ar->winrct.xmin+d->x,ar->winrct.ymin+d->y, d->w,d->h, GL_DEPTH_COMPONENT,GL_FLOAT, d->depths); + glGetDoublev(GL_DEPTH_RANGE,d->depth_range); + d->damaged= 0; + } +} + +/* note, with nouveau drivers the glReadPixels() is very slow. [#24339] */ void view3d_update_depths(ARegion *ar) { RegionView3D *rv3d= ar->regiondata; @@ -1600,6 +1644,30 @@ void view3d_update_depths(ARegion *ar) } } +/* utility function to find the closest Z value, use for autodepth */ +float view3d_depth_near(ViewDepths *d) +{ + /* convert to float for comparisons */ + const float near= (float)d->depth_range[0]; + const float far_real= (float)d->depth_range[1]; + float far= far_real; + + const float *depths= d->depths; + float depth= FLT_MAX; + int i= d->w * d->h; + + /* far is both the starting 'far' value + * and the closest value found. */ + while(i--) { + depth= *depths++; + if((depth < far) && (depth > near)) { + far= depth; + } + } + + return far == far_real ? FLT_MAX : far; +} + void draw_depth_gpencil(Scene *scene, ARegion *ar, View3D *v3d) { short zbuf= v3d->zbuf; diff --git a/source/blender/editors/space_view3d/view3d_edit.c b/source/blender/editors/space_view3d/view3d_edit.c index dc75efcc5ca..a5cca6341f6 100644 --- a/source/blender/editors/space_view3d/view3d_edit.c +++ b/source/blender/editors/space_view3d/view3d_edit.c @@ -63,6 +63,7 @@ #include "ED_screen.h" #include "ED_transform.h" #include "ED_mesh.h" +#include "ED_view3d.h" #include "PIL_time.h" /* smoothview */ @@ -1667,10 +1668,8 @@ static int view3d_zoom_border_exec(bContext *C, wmOperator *op) /* ZBuffer depth vars */ bglMats mats; - float depth, depth_close= FLT_MAX; - int had_depth = 0; + float depth_close= FLT_MAX; double cent[2], p[3]; - int xs, ys; /* note; otherwise opengl won't work */ view3d_operator_needs_opengl(C); @@ -1684,38 +1683,19 @@ static int view3d_zoom_border_exec(bContext *C, wmOperator *op) /* Get Z Depths, needed for perspective, nice for ortho */ bgl_get_mats(&mats); draw_depth(scene, ar, v3d, NULL); + + { + /* avoid allocating the whole depth buffer */ + ViewDepths depth_temp= {0}; - /* force updating */ - if (rv3d->depths) { - had_depth = 1; - rv3d->depths->damaged = 1; - } - - view3d_update_depths(ar); - - /* Constrain rect to depth bounds */ - if (rect.xmin < 0) rect.xmin = 0; - if (rect.ymin < 0) rect.ymin = 0; - if (rect.xmax >= rv3d->depths->w) rect.xmax = rv3d->depths->w-1; - if (rect.ymax >= rv3d->depths->h) rect.ymax = rv3d->depths->h-1; - - /* Find the closest Z pixel */ - for (xs=rect.xmin; xs < rect.xmax; xs++) { - for (ys=rect.ymin; ys < rect.ymax; ys++) { - depth= rv3d->depths->depths[ys*rv3d->depths->w+xs]; - if(depth < rv3d->depths->depth_range[1] && depth > rv3d->depths->depth_range[0]) { - if (depth_close > depth) { - depth_close = depth; - } - } - } - } - - if (had_depth==0) { - MEM_freeN(rv3d->depths->depths); - rv3d->depths->depths = NULL; + /* avoid view3d_update_depths() for speed. */ + view3d_update_depths_rect(ar, &depth_temp, &rect); + + /* find the closest Z pixel */ + depth_close= view3d_depth_near(&depth_temp); + + MEM_freeN(depth_temp.depths); } - rv3d->depths->damaged = 1; cent[0] = (((double)rect.xmin)+((double)rect.xmax)) / 2; cent[1] = (((double)rect.ymin)+((double)rect.ymax)) / 2; @@ -2574,88 +2554,49 @@ void VIEW3D_OT_enable_manipulator(wmOperatorType *ot) static float view_autodist_depth_margin(ARegion *ar, short *mval, int margin) { - RegionView3D *rv3d= ar->regiondata; - float depth= FLT_MAX; + ViewDepths depth_temp= {0}; + rcti rect; + float depth_close; if(margin==0) { - if (mval[0] < 0) return 0; - if (mval[1] < 0) return 0; - if (mval[0] >= rv3d->depths->w) return 0; - if (mval[1] >= rv3d->depths->h) return 0; - /* Get Z Depths, needed for perspective, nice for ortho */ - depth= rv3d->depths->depths[mval[1]*rv3d->depths->w+mval[0]]; - if(depth >= rv3d->depths->depth_range[1] || depth <= rv3d->depths->depth_range[0]) { - depth= FLT_MAX; - } + rect.xmin= mval[0]; + rect.ymin= mval[1]; + rect.xmax= mval[0] + 1; + rect.ymax= mval[1] + 1; } else { - rcti rect; - float depth_close= FLT_MAX; - int xs, ys; - rect.xmax = mval[0] + margin; rect.ymax = mval[1] + margin; rect.xmin = mval[0] - margin; rect.ymin = mval[1] - margin; + } - /* Constrain rect to depth bounds */ - if (rect.xmin < 0) rect.xmin = 0; - if (rect.ymin < 0) rect.ymin = 0; - if (rect.xmax >= rv3d->depths->w) rect.xmax = rv3d->depths->w-1; - if (rect.ymax >= rv3d->depths->h) rect.ymax = rv3d->depths->h-1; - - /* Find the closest Z pixel */ - for (xs=rect.xmin; xs < rect.xmax; xs++) { - for (ys=rect.ymin; ys < rect.ymax; ys++) { - depth= rv3d->depths->depths[ys*rv3d->depths->w+xs]; - if(depth < rv3d->depths->depth_range[1] && depth > rv3d->depths->depth_range[0]) { - if (depth_close > depth) { - depth_close = depth; - } - } - } - } + view3d_update_depths_rect(ar, &depth_temp, &rect); + depth_close= view3d_depth_near(&depth_temp); - depth= depth_close; - } + MEM_freeN(depth_temp.depths); - return depth; + return depth_close; } /* XXX todo Zooms in on a border drawn by the user */ int view_autodist(Scene *scene, ARegion *ar, View3D *v3d, short *mval, float mouse_worldloc[3] ) //, float *autodist ) { - RegionView3D *rv3d= ar->regiondata; bglMats mats; /* ZBuffer depth vars */ float depth_close= FLT_MAX; - int had_depth = 0; double cent[2], p[3]; /* Get Z Depths, needed for perspective, nice for ortho */ bgl_get_mats(&mats); draw_depth(scene, ar, v3d, NULL); - /* force updating */ - if (rv3d->depths) { - had_depth = 1; - rv3d->depths->damaged = 1; - } - - view3d_update_depths(ar); - depth_close= view_autodist_depth_margin(ar, mval, 4); if (depth_close==FLT_MAX) return 0; - if (had_depth==0) { - MEM_freeN(rv3d->depths->depths); - rv3d->depths->depths = NULL; - } - rv3d->depths->damaged = 1; - cent[0] = (double)mval[0]; cent[1] = (double)mval[1]; @@ -2670,8 +2611,6 @@ int view_autodist(Scene *scene, ARegion *ar, View3D *v3d, short *mval, float mou int view_autodist_init(Scene *scene, ARegion *ar, View3D *v3d, int mode) //, float *autodist ) { - RegionView3D *rv3d= ar->regiondata; - /* Get Z Depths, needed for perspective, nice for ortho */ switch(mode) { case 0: @@ -2682,12 +2621,6 @@ int view_autodist_init(Scene *scene, ARegion *ar, View3D *v3d, int mode) //, flo break; } - /* force updating */ - if (rv3d->depths) { - rv3d->depths->damaged = 1; - } - - view3d_update_depths(ar); return 1; } diff --git a/source/blender/editors/space_view3d/view3d_intern.h b/source/blender/editors/space_view3d/view3d_intern.h index d6d8fddd442..e81d0b87589 100644 --- a/source/blender/editors/space_view3d/view3d_intern.h +++ b/source/blender/editors/space_view3d/view3d_intern.h @@ -131,6 +131,8 @@ void add_view3d_after(ListBase *lb, Base *base, int flag); void circf(float x, float y, float rad); void circ(float x, float y, float rad); void view3d_update_depths(struct ARegion *ar); +void view3d_update_depths_rect(struct ARegion *ar, struct ViewDepths *d, struct rcti *rect); +float view3d_depth_near(struct ViewDepths *d); /* view3d_select.c */ void VIEW3D_OT_select(struct wmOperatorType *ot); -- cgit v1.2.3 From fde19bfe7e7bb01d9c78928e342afb953d28b2b2 Mon Sep 17 00:00:00 2001 From: Campbell Barton Date: Thu, 21 Oct 2010 09:02:21 +0000 Subject: bugfix [#24347] Fly mode: Immediately after pressing Shift+F, keys W and S work, keys A, D, R and F do not --- source/blender/editors/space_view3d/view3d_view.c | 20 +++++++++++--------- 1 file changed, 11 insertions(+), 9 deletions(-) (limited to 'source/blender/editors/space_view3d') diff --git a/source/blender/editors/space_view3d/view3d_view.c b/source/blender/editors/space_view3d/view3d_view.c index 8b3d99e355d..15e04f31f2f 100644 --- a/source/blender/editors/space_view3d/view3d_view.c +++ b/source/blender/editors/space_view3d/view3d_view.c @@ -2282,30 +2282,32 @@ static void flyEvent(FlyInfo *fly, wmEvent *event) /* impliment WASD keys */ case FLY_MODAL_DIR_FORWARD: if (fly->speed < 0.0f) fly->speed= -fly->speed; /* flip speed rather then stopping, game like motion */ - else fly->speed += fly->grid; /* increse like mousewheel if were already moving in that difection*/ + else if (fly->axis==2) fly->speed += fly->grid; /* increse like mousewheel if were already moving in that difection*/ fly->axis= 2; break; case FLY_MODAL_DIR_BACKWARD: - if (fly->speed>0) fly->speed= -fly->speed; - else fly->speed -= fly->grid; + if (fly->speed > 0.0f) fly->speed= -fly->speed; + else if (fly->axis==2) fly->speed -= fly->grid; fly->axis= 2; break; case FLY_MODAL_DIR_LEFT: if (fly->speed < 0.0f) fly->speed= -fly->speed; + else if (fly->axis==0) fly->speed += fly->grid; fly->axis= 0; break; case FLY_MODAL_DIR_RIGHT: if (fly->speed > 0.0f) fly->speed= -fly->speed; + else if (fly->axis==0) fly->speed -= fly->grid; fly->axis= 0; break; - - case FLY_MODAL_DIR_UP: - if (fly->speed > 0.0f) fly->speed= -fly->speed; - fly->axis= 1; - break; - case FLY_MODAL_DIR_DOWN: if (fly->speed < 0.0f) fly->speed= -fly->speed; + else if (fly->axis==1) fly->speed += fly->grid; + fly->axis= 1; + break; + case FLY_MODAL_DIR_UP: + if (fly->speed > 0.0f) fly->speed= -fly->speed; + else if (fly->axis==1) fly->speed -= fly->grid; fly->axis= 1; break; -- cgit v1.2.3 From 2fe940f8df9c4513ad1ad0674f49818417450984 Mon Sep 17 00:00:00 2001 From: Campbell Barton Date: Fri, 22 Oct 2010 03:56:50 +0000 Subject: Fix for snapping pose bones with axis-angle rotation. - armature_mat_pose_to_bone() was missing axis-angle check. - added loc_axisangle_size_to_mat4() for completeness. - use 'const' prefix where possible in math rotation functions. --- source/blender/editors/space_view3d/view3d_snap.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'source/blender/editors/space_view3d') diff --git a/source/blender/editors/space_view3d/view3d_snap.c b/source/blender/editors/space_view3d/view3d_snap.c index d6778070931..9f6054a5d4f 100644 --- a/source/blender/editors/space_view3d/view3d_snap.c +++ b/source/blender/editors/space_view3d/view3d_snap.c @@ -921,7 +921,7 @@ void VIEW3D_OT_snap_cursor_to_center(wmOperatorType *ot) /* api callbacks */ ot->exec= snap_curs_to_center; - ot->poll= ED_operator_view3d_active; + ot->poll= ED_operator_view3d_active; /* flags */ ot->flag= OPTYPE_REGISTER|OPTYPE_UNDO; -- cgit v1.2.3 From c6976e7351e448b8ab82757b9e1a665162b0960c Mon Sep 17 00:00:00 2001 From: Campbell Barton Date: Sat, 23 Oct 2010 04:05:55 +0000 Subject: use explicit file paths for CMake rather then globing, This is recommended by cmake devs. globbing vs explicit is discussed here. http://www.cmake.org/pipermail/cmake/2008-December/025694.html Practical implications are: - developers need to keep CMakeLists.txt files up to date. - Users wont get strange linking errors if they build after a file is added, since CMake detects CMakeLists.txt is modified and automatically reconfigure. --- source/blender/editors/space_view3d/CMakeLists.txt | 20 ++++++++++++++++++-- 1 file changed, 18 insertions(+), 2 deletions(-) (limited to 'source/blender/editors/space_view3d') diff --git a/source/blender/editors/space_view3d/CMakeLists.txt b/source/blender/editors/space_view3d/CMakeLists.txt index 48747898981..855d770c784 100644 --- a/source/blender/editors/space_view3d/CMakeLists.txt +++ b/source/blender/editors/space_view3d/CMakeLists.txt @@ -19,8 +19,6 @@ # # ***** END GPL LICENSE BLOCK ***** -FILE(GLOB SRC *.c) - SET(INC ../include ../../blenfont @@ -36,6 +34,24 @@ SET(INC ../../../../intern/smoke/extern ) +SET(SRC + drawanimviz.c + drawarmature.c + drawmesh.c + drawobject.c + drawvolume.c + space_view3d.c + view3d_buttons.c + view3d_draw.c + view3d_edit.c + view3d_header.c + view3d_ops.c + view3d_select.c + view3d_snap.c + view3d_toolbar.c + view3d_view.c +) + IF(WITH_GAMEENGINE) LIST(APPEND INC ../../../kernel/gen_system) ADD_DEFINITIONS(-DGAMEBLENDER) -- cgit v1.2.3 From 2d9be2226a7b8ec35f3055743f3d6e381fe78757 Mon Sep 17 00:00:00 2001 From: Campbell Barton Date: Sat, 23 Oct 2010 16:03:31 +0000 Subject: warning fixes. --- source/blender/editors/space_view3d/view3d_draw.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'source/blender/editors/space_view3d') diff --git a/source/blender/editors/space_view3d/view3d_draw.c b/source/blender/editors/space_view3d/view3d_draw.c index 7722ca5605b..30880db0c90 100644 --- a/source/blender/editors/space_view3d/view3d_draw.c +++ b/source/blender/editors/space_view3d/view3d_draw.c @@ -1459,7 +1459,7 @@ static void draw_dupli_objects_color(Scene *scene, ARegion *ar, View3D *v3d, Bas { RegionView3D *rv3d= ar->regiondata; ListBase *lb; - DupliObject *dob_prev= NULL, *dob, *dob_next; + DupliObject *dob_prev= NULL, *dob, *dob_next= NULL; Base tbase; BoundBox bb, *bb_tmp; /* use a copy because draw_object, calls clear_mesh_caches */ GLuint displist=0; -- cgit v1.2.3 From 1de1d6537ee208b9e57b293c816bacc2e8fb990f Mon Sep 17 00:00:00 2001 From: "Guillermo S. Romero" Date: Sun, 24 Oct 2010 00:09:23 +0000 Subject: Fully disable AUD's FFTW3 usage. --- source/blender/editors/space_view3d/drawobject.c | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) (limited to 'source/blender/editors/space_view3d') diff --git a/source/blender/editors/space_view3d/drawobject.c b/source/blender/editors/space_view3d/drawobject.c index bc340ef5b4b..171c5a311c1 100644 --- a/source/blender/editors/space_view3d/drawobject.c +++ b/source/blender/editors/space_view3d/drawobject.c @@ -6139,8 +6139,7 @@ void draw_object(Scene *scene, ARegion *ar, View3D *v3d, Base *base, int flag) /* patch for several 3d cards (IBM mostly) that crash on glSelect with text drawing */ /* but, we also dont draw names for sets or duplicators */ if(flag == 0) { - float zero[3]= {0,0,0}; - view3d_cached_text_draw_add(zero, ob->id.name+2, 10, 0); + view3d_cached_text_draw_add((float [3]){0,0,0}, ob->id.name+2, 10, 0); } } /*if(dtx & OB_DRAWIMAGE) drawDispListwire(&ob->disp);*/ -- cgit v1.2.3 From 715fa82769a2d239bdf73701719ae354ca527c59 Mon Sep 17 00:00:00 2001 From: Nathan Letwory Date: Sun, 24 Oct 2010 12:45:47 +0000 Subject: Make sure separation between modifier keys is communicated from GHOST upwards too (BGE at least uses this). --- source/blender/editors/space_view3d/drawobject.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) (limited to 'source/blender/editors/space_view3d') diff --git a/source/blender/editors/space_view3d/drawobject.c b/source/blender/editors/space_view3d/drawobject.c index 171c5a311c1..bc340ef5b4b 100644 --- a/source/blender/editors/space_view3d/drawobject.c +++ b/source/blender/editors/space_view3d/drawobject.c @@ -6139,7 +6139,8 @@ void draw_object(Scene *scene, ARegion *ar, View3D *v3d, Base *base, int flag) /* patch for several 3d cards (IBM mostly) that crash on glSelect with text drawing */ /* but, we also dont draw names for sets or duplicators */ if(flag == 0) { - view3d_cached_text_draw_add((float [3]){0,0,0}, ob->id.name+2, 10, 0); + float zero[3]= {0,0,0}; + view3d_cached_text_draw_add(zero, ob->id.name+2, 10, 0); } } /*if(dtx & OB_DRAWIMAGE) drawDispListwire(&ob->disp);*/ -- cgit v1.2.3 From 2882c4b6efdadf935f14fb920a38e7ff2f5db55d Mon Sep 17 00:00:00 2001 From: Campbell Barton Date: Mon, 25 Oct 2010 02:30:16 +0000 Subject: move fly mode operator into its own file. --- source/blender/editors/space_view3d/CMakeLists.txt | 1 + source/blender/editors/space_view3d/view3d_edit.c | 21 +- .../blender/editors/space_view3d/view3d_intern.h | 5 +- source/blender/editors/space_view3d/view3d_view.c | 929 --------------------- 4 files changed, 23 insertions(+), 933 deletions(-) (limited to 'source/blender/editors/space_view3d') diff --git a/source/blender/editors/space_view3d/CMakeLists.txt b/source/blender/editors/space_view3d/CMakeLists.txt index 855d770c784..fb086013798 100644 --- a/source/blender/editors/space_view3d/CMakeLists.txt +++ b/source/blender/editors/space_view3d/CMakeLists.txt @@ -44,6 +44,7 @@ SET(SRC view3d_buttons.c view3d_draw.c view3d_edit.c + view3d_fly.c view3d_header.c view3d_ops.c view3d_select.c diff --git a/source/blender/editors/space_view3d/view3d_edit.c b/source/blender/editors/space_view3d/view3d_edit.c index a5cca6341f6..42767d98c80 100644 --- a/source/blender/editors/space_view3d/view3d_edit.c +++ b/source/blender/editors/space_view3d/view3d_edit.c @@ -3051,6 +3051,21 @@ void viewmoveNDOF(Scene *scene, ARegion *ar, View3D *v3d, int UNUSED(mode)) // XXX scrarea_do_windraw(curarea); } - - - +/* give a 4x4 matrix from a perspective view, only needs viewquat, ofs and dist + * basically the same as... + * rv3d->persp= RV3D_PERSP + * setviewmatrixview3d(scene, v3d, rv3d); + * setcameratoview3d(v3d, rv3d, v3d->camera); + * ...but less of a hassle + * */ +void view3d_persp_mat4(RegionView3D *rv3d, float mat[][4]) +{ + float qt[4], dvec[3]; + copy_qt_qt(qt, rv3d->viewquat); + qt[0]= -qt[0]; + quat_to_mat4(mat, qt); + mat[3][2] -= rv3d->dist; + translate_m4(mat, rv3d->ofs[0], rv3d->ofs[1], rv3d->ofs[2]); + mul_v3_v3fl(dvec, mat[2], -rv3d->dist); + sub_v3_v3v3(mat[3], dvec, rv3d->ofs); +} diff --git a/source/blender/editors/space_view3d/view3d_intern.h b/source/blender/editors/space_view3d/view3d_intern.h index e81d0b87589..0cba387169a 100644 --- a/source/blender/editors/space_view3d/view3d_intern.h +++ b/source/blender/editors/space_view3d/view3d_intern.h @@ -91,6 +91,10 @@ void VIEW3D_OT_zoom_border(struct wmOperatorType *ot); void VIEW3D_OT_drawtype(struct wmOperatorType *ot); void view3d_boxview_copy(ScrArea *sa, ARegion *ar); +void view3d_persp_mat4(struct RegionView3D *rv3d, float mat[][4]); + +/* view3d_fly.c */ +void VIEW3D_OT_fly(struct wmOperatorType *ot); /* drawanim.c */ void draw_motion_paths_init(View3D *v3d, struct ARegion *ar); @@ -150,7 +154,6 @@ void VIEW3D_OT_setcameratoview(struct wmOperatorType *ot); void VIEW3D_OT_object_as_camera(struct wmOperatorType *ot); void VIEW3D_OT_localview(struct wmOperatorType *ot); void VIEW3D_OT_game_start(struct wmOperatorType *ot); -void VIEW3D_OT_fly(struct wmOperatorType *ot); int boundbox_clip(RegionView3D *rv3d, float obmat[][4], struct BoundBox *bb); diff --git a/source/blender/editors/space_view3d/view3d_view.c b/source/blender/editors/space_view3d/view3d_view.c index 15e04f31f2f..5849d65cb6e 100644 --- a/source/blender/editors/space_view3d/view3d_view.c +++ b/source/blender/editors/space_view3d/view3d_view.c @@ -26,12 +26,6 @@ * ***** END GPL LICENSE BLOCK ***** */ -#include -#include -#include -#include - -#include "DNA_anim_types.h" #include "DNA_camera_types.h" #include "DNA_lamp_types.h" #include "DNA_scene_types.h" @@ -40,9 +34,6 @@ #include "MEM_guardedalloc.h" #include "BLI_math.h" -#include "BLI_blenlib.h" -#include "BLI_editVert.h" -#include "BLI_rand.h" #include "BKE_anim.h" #include "BKE_action.h" @@ -51,9 +42,6 @@ #include "BKE_global.h" #include "BKE_main.h" #include "BKE_report.h" -#include "BKE_scene.h" -#include "BKE_depsgraph.h" /* for fly mode updating */ - #include "BIF_gl.h" #include "BIF_glutil.h" @@ -61,15 +49,8 @@ #include "WM_api.h" #include "WM_types.h" -#include "ED_keyframing.h" #include "ED_screen.h" #include "ED_armature.h" -#include "ED_space_api.h" - -#include "GPU_draw.h" - - -#include "PIL_time.h" /* smoothview */ #if GAMEBLENDER == 1 #include "SYS_System.h" @@ -1175,25 +1156,6 @@ static void view3d_viewlock(RegionView3D *rv3d) } } -/* give a 4x4 matrix from a perspective view, only needs viewquat, ofs and dist - * basically the same as... - * rv3d->persp= RV3D_PERSP - * setviewmatrixview3d(scene, v3d, rv3d); - * setcameratoview3d(v3d, rv3d, v3d->camera); - * ...but less of a hassle - * */ -static void view3d_persp_mat4(RegionView3D *rv3d, float mat[][4]) -{ - float qt[4], dvec[3]; - copy_qt_qt(qt, rv3d->viewquat); - qt[0]= -qt[0]; - quat_to_mat4(mat, qt); - mat[3][2] -= rv3d->dist; - translate_m4(mat, rv3d->ofs[0], rv3d->ofs[1], rv3d->ofs[2]); - mul_v3_v3fl(dvec, mat[2], -rv3d->dist); - sub_v3_v3v3(mat[3], dvec, rv3d->ofs); -} - /* dont set windows active in in here, is used by renderwin too */ void setviewmatrixview3d(Scene *scene, View3D *v3d, RegionView3D *rv3d) { @@ -1850,897 +1812,6 @@ void VIEW3D_OT_game_start(wmOperatorType *ot) ot->poll= game_engine_poll; } - -/* NOTE: these defines are saved in keymap files, do not change values but just add new ones */ -#define FLY_MODAL_CANCEL 1 -#define FLY_MODAL_CONFIRM 2 -#define FLY_MODAL_ACCELERATE 3 -#define FLY_MODAL_DECELERATE 4 -#define FLY_MODAL_PAN_ENABLE 5 -#define FLY_MODAL_PAN_DISABLE 6 -#define FLY_MODAL_DIR_FORWARD 7 -#define FLY_MODAL_DIR_BACKWARD 8 -#define FLY_MODAL_DIR_LEFT 9 -#define FLY_MODAL_DIR_RIGHT 10 -#define FLY_MODAL_DIR_UP 11 -#define FLY_MODAL_DIR_DOWN 12 -#define FLY_MODAL_AXIS_LOCK_X 13 -#define FLY_MODAL_AXIS_LOCK_Z 14 -#define FLY_MODAL_PRECISION_ENABLE 15 -#define FLY_MODAL_PRECISION_DISABLE 16 - -/* called in transform_ops.c, on each regeneration of keymaps */ -void fly_modal_keymap(wmKeyConfig *keyconf) -{ - static EnumPropertyItem modal_items[] = { - {FLY_MODAL_CANCEL, "CANCEL", 0, "Cancel", ""}, - {FLY_MODAL_CONFIRM, "CONFIRM", 0, "Confirm", ""}, - {FLY_MODAL_ACCELERATE, "ACCELERATE", 0, "Accelerate", ""}, - {FLY_MODAL_DECELERATE, "DECELERATE", 0, "Decelerate", ""}, - - {FLY_MODAL_PAN_ENABLE, "PAN_ENABLE", 0, "Pan Enable", ""}, - {FLY_MODAL_PAN_DISABLE, "PAN_DISABLE", 0, "Pan Disable", ""}, - - {FLY_MODAL_DIR_FORWARD, "FORWARD", 0, "Fly Forward", ""}, - {FLY_MODAL_DIR_BACKWARD,"BACKWARD", 0, "Fly Backward", ""}, - {FLY_MODAL_DIR_LEFT, "LEFT", 0, "Fly Left", ""}, - {FLY_MODAL_DIR_RIGHT, "RIGHT", 0, "Fly Right", ""}, - {FLY_MODAL_DIR_UP, "UP", 0, "Fly Up", ""}, - {FLY_MODAL_DIR_DOWN, "DOWN", 0, "Fly Down", ""}, - - {FLY_MODAL_AXIS_LOCK_X, "AXIS_LOCK_X", 0, "X Axis Correction", "X axis correction (toggle)"}, - {FLY_MODAL_AXIS_LOCK_Z, "AXIS_LOCK_Z", 0, "X Axis Correction", "Z axis correction (toggle)"}, - - {FLY_MODAL_PRECISION_ENABLE, "PRECISION_ENABLE", 0, "Precision Enable", ""}, - {FLY_MODAL_PRECISION_DISABLE, "PRECISION_DISABLE", 0, "Precision Disable", ""}, - - {0, NULL, 0, NULL, NULL}}; - - wmKeyMap *keymap= WM_modalkeymap_get(keyconf, "View3D Fly Modal"); - - /* this function is called for each spacetype, only needs to add map once */ - if(keymap) return; - - keymap= WM_modalkeymap_add(keyconf, "View3D Fly Modal", modal_items); - - /* items for modal map */ - WM_modalkeymap_add_item(keymap, ESCKEY, KM_PRESS, KM_ANY, 0, FLY_MODAL_CANCEL); - WM_modalkeymap_add_item(keymap, RIGHTMOUSE, KM_ANY, KM_ANY, 0, FLY_MODAL_CANCEL); - - WM_modalkeymap_add_item(keymap, LEFTMOUSE, KM_ANY, KM_ANY, 0, FLY_MODAL_CONFIRM); - WM_modalkeymap_add_item(keymap, RETKEY, KM_PRESS, KM_ANY, 0, FLY_MODAL_CONFIRM); - WM_modalkeymap_add_item(keymap, SPACEKEY, KM_PRESS, KM_ANY, 0, FLY_MODAL_CONFIRM); - WM_modalkeymap_add_item(keymap, PADENTER, KM_PRESS, KM_ANY, 0, FLY_MODAL_CONFIRM); - - WM_modalkeymap_add_item(keymap, PADPLUSKEY, KM_PRESS, 0, 0, FLY_MODAL_ACCELERATE); - WM_modalkeymap_add_item(keymap, PADMINUS, KM_PRESS, 0, 0, FLY_MODAL_DECELERATE); - WM_modalkeymap_add_item(keymap, WHEELUPMOUSE, KM_PRESS, 0, 0, FLY_MODAL_ACCELERATE); - WM_modalkeymap_add_item(keymap, WHEELDOWNMOUSE, KM_PRESS, 0, 0, FLY_MODAL_DECELERATE); - - WM_modalkeymap_add_item(keymap, MIDDLEMOUSE, KM_PRESS, KM_ANY, 0, FLY_MODAL_PAN_ENABLE); - WM_modalkeymap_add_item(keymap, MIDDLEMOUSE, KM_RELEASE, KM_ANY, 0, FLY_MODAL_PAN_DISABLE); /* XXX - Bug in the event system, middle mouse release doesnt work */ - - /* WASD */ - WM_modalkeymap_add_item(keymap, WKEY, KM_PRESS, 0, 0, FLY_MODAL_DIR_FORWARD); - WM_modalkeymap_add_item(keymap, SKEY, KM_PRESS, 0, 0, FLY_MODAL_DIR_BACKWARD); - WM_modalkeymap_add_item(keymap, AKEY, KM_PRESS, 0, 0, FLY_MODAL_DIR_LEFT); - WM_modalkeymap_add_item(keymap, DKEY, KM_PRESS, 0, 0, FLY_MODAL_DIR_RIGHT); - WM_modalkeymap_add_item(keymap, RKEY, KM_PRESS, 0, 0, FLY_MODAL_DIR_UP); - WM_modalkeymap_add_item(keymap, FKEY, KM_PRESS, 0, 0, FLY_MODAL_DIR_DOWN); - - WM_modalkeymap_add_item(keymap, XKEY, KM_PRESS, 0, 0, FLY_MODAL_AXIS_LOCK_X); - WM_modalkeymap_add_item(keymap, ZKEY, KM_PRESS, 0, 0, FLY_MODAL_AXIS_LOCK_Z); - - WM_modalkeymap_add_item(keymap, LEFTSHIFTKEY, KM_PRESS, KM_ANY, 0, FLY_MODAL_PRECISION_ENABLE); - WM_modalkeymap_add_item(keymap, LEFTSHIFTKEY, KM_RELEASE, KM_ANY, 0, FLY_MODAL_PRECISION_DISABLE); - - /* assign map to operators */ - WM_modalkeymap_assign(keymap, "VIEW3D_OT_fly"); - -} - -typedef struct FlyInfo { - /* context stuff */ - RegionView3D *rv3d; - View3D *v3d; - ARegion *ar; - Scene *scene; - - wmTimer *timer; /* needed for redraws */ - - short state; - short use_precision; - short redraw; - short mval[2]; - - /* fly state state */ - float speed; /* the speed the view is moving per redraw */ - short axis; /* Axis index to move allong by default Z to move allong the view */ - short pan_view; /* when true, pan the view instead of rotating */ - - /* relative view axis locking - xlock, zlock - 0; disabled - 1; enabled but not checking because mouse hasnt moved outside the margin since locking was checked an not needed - when the mouse moves, locking is set to 2 so checks are done. - 2; mouse moved and checking needed, if no view altering is donem its changed back to 1 */ - short xlock, zlock; - float xlock_momentum, zlock_momentum; /* nicer dynamics */ - float grid; /* world scale 1.0 default */ - - /* root most parent */ - Object *root_parent; - - /* backup values */ - float dist_backup; /* backup the views distance since we use a zero dist for fly mode */ - float ofs_backup[3]; /* backup the views offset incase the user cancels flying in non camera mode */ - float rot_backup[4]; /* backup the views quat incase the user cancels flying in non camera mode. (quat for view, eul for camera) */ - short persp_backup; /* remember if were ortho or not, only used for restoring the view if it was a ortho view */ - - void *obtfm; /* backup the objects transform */ - - /* compare between last state */ - double time_lastwheel; /* used to accelerate when using the mousewheel a lot */ - double time_lastdraw; /* time between draws */ - - void *draw_handle_pixel; - - /* use for some lag */ - float dvec_prev[3]; /* old for some lag */ - -} FlyInfo; - -static void drawFlyPixel(const struct bContext *UNUSED(C), struct ARegion *UNUSED(ar), void *arg) -{ - FlyInfo *fly = arg; - - /* draws 4 edge brackets that frame the safe area where the - mouse can move during fly mode without spinning the view */ - float x1, x2, y1, y2; - - x1= 0.45*(float)fly->ar->winx; - y1= 0.45*(float)fly->ar->winy; - x2= 0.55*(float)fly->ar->winx; - y2= 0.55*(float)fly->ar->winy; - cpack(0); - - - glBegin(GL_LINES); - /* bottom left */ - glVertex2f(x1,y1); - glVertex2f(x1,y1+5); - - glVertex2f(x1,y1); - glVertex2f(x1+5,y1); - - /* top right */ - glVertex2f(x2,y2); - glVertex2f(x2,y2-5); - - glVertex2f(x2,y2); - glVertex2f(x2-5,y2); - - /* top left */ - glVertex2f(x1,y2); - glVertex2f(x1,y2-5); - - glVertex2f(x1,y2); - glVertex2f(x1+5,y2); - - /* bottom right */ - glVertex2f(x2,y1); - glVertex2f(x2,y1+5); - - glVertex2f(x2,y1); - glVertex2f(x2-5,y1); - glEnd(); -} - -/* FlyInfo->state */ -#define FLY_RUNNING 0 -#define FLY_CANCEL 1 -#define FLY_CONFIRM 2 - -static int initFlyInfo (bContext *C, FlyInfo *fly, wmOperator *op, wmEvent *event) -{ - float upvec[3]; // tmp - float mat[3][3]; - - fly->rv3d= CTX_wm_region_view3d(C); - fly->v3d = CTX_wm_view3d(C); - fly->ar = CTX_wm_region(C); - fly->scene= CTX_data_scene(C); - - if(fly->rv3d->persp==RV3D_CAMOB && fly->v3d->camera->id.lib) { - BKE_report(op->reports, RPT_ERROR, "Cannot fly a camera from an external library"); - return FALSE; - } - - if(fly->v3d->ob_centre) { - BKE_report(op->reports, RPT_ERROR, "Cannot fly when the view is locked to an object"); - return FALSE; - } - - if(fly->rv3d->persp==RV3D_CAMOB && fly->v3d->camera->constraints.first) { - BKE_report(op->reports, RPT_ERROR, "Cannot fly an object with constraints"); - return FALSE; - } - - fly->state= FLY_RUNNING; - fly->speed= 0.0f; - fly->axis= 2; - fly->pan_view= FALSE; - fly->xlock= FALSE; - fly->zlock= FALSE; - fly->xlock_momentum=0.0f; - fly->zlock_momentum=0.0f; - fly->grid= 1.0f; - fly->use_precision= 0; - - fly->dvec_prev[0]= fly->dvec_prev[1]= fly->dvec_prev[2]= 0.0f; - - fly->timer= WM_event_add_timer(CTX_wm_manager(C), CTX_wm_window(C), TIMER, 0.01f); - - fly->mval[0] = event->x - fly->ar->winrct.xmin; - fly->mval[1] = event->y - fly->ar->winrct.ymin; - - - fly->time_lastdraw= fly->time_lastwheel= PIL_check_seconds_timer(); - - fly->draw_handle_pixel = ED_region_draw_cb_activate(fly->ar->type, drawFlyPixel, fly, REGION_DRAW_POST_PIXEL); - - fly->rv3d->rflag |= RV3D_NAVIGATING; /* so we draw the corner margins */ - - /* detect weather to start with Z locking */ - upvec[0]=1.0f; upvec[1]=0.0f; upvec[2]=0.0f; - copy_m3_m4(mat, fly->rv3d->viewinv); - mul_m3_v3(mat, upvec); - if (fabs(upvec[2]) < 0.1) - fly->zlock = 1; - upvec[0]=0; upvec[1]=0; upvec[2]=0; - - fly->persp_backup= fly->rv3d->persp; - fly->dist_backup= fly->rv3d->dist; - if (fly->rv3d->persp==RV3D_CAMOB) { - Object *ob_back; - if((fly->root_parent=fly->v3d->camera->parent)) { - while(fly->root_parent->parent) - fly->root_parent= fly->root_parent->parent; - ob_back= fly->root_parent; - } - else { - ob_back= fly->v3d->camera; - } - - /* store the original camera loc and rot */ - /* TODO. axis angle etc */ - - fly->obtfm= object_tfm_backup(ob_back); - - where_is_object(fly->scene, fly->v3d->camera); - negate_v3_v3(fly->rv3d->ofs, fly->v3d->camera->obmat[3]); - - fly->rv3d->dist=0.0; - } else { - /* perspective or ortho */ - if (fly->rv3d->persp==RV3D_ORTHO) - fly->rv3d->persp= RV3D_PERSP; /*if ortho projection, make perspective */ - copy_qt_qt(fly->rot_backup, fly->rv3d->viewquat); - copy_v3_v3(fly->ofs_backup, fly->rv3d->ofs); - fly->rv3d->dist= 0.0f; - - upvec[2]= fly->dist_backup; /*x and y are 0*/ - mul_m3_v3(mat, upvec); - sub_v3_v3(fly->rv3d->ofs, upvec); - /*Done with correcting for the dist*/ - } - - - /* center the mouse, probably the UI mafia are against this but without its quite annoying */ - WM_cursor_warp(CTX_wm_window(C), fly->ar->winrct.xmin + fly->ar->winx/2, fly->ar->winrct.ymin + fly->ar->winy/2); - - return 1; -} - -static int flyEnd(bContext *C, FlyInfo *fly) -{ - RegionView3D *rv3d= fly->rv3d; - View3D *v3d = fly->v3d; - - float upvec[3]; - - if(fly->state == FLY_RUNNING) - return OPERATOR_RUNNING_MODAL; - - WM_event_remove_timer(CTX_wm_manager(C), CTX_wm_window(C), fly->timer); - - ED_region_draw_cb_exit(fly->ar->type, fly->draw_handle_pixel); - - rv3d->dist= fly->dist_backup; - - if (fly->state == FLY_CANCEL) { - /* Revert to original view? */ - if (fly->persp_backup==RV3D_CAMOB) { /* a camera view */ - Object *ob_back; - if(fly->root_parent)ob_back= fly->root_parent; - else ob_back= fly->v3d->camera; - - /* store the original camera loc and rot */ - object_tfm_restore(ob_back, fly->obtfm); - - DAG_id_flush_update(&ob_back->id, OB_RECALC_OB); - } else { - /* Non Camera we need to reset the view back to the original location bacause the user canceled*/ - copy_qt_qt(rv3d->viewquat, fly->rot_backup); - copy_v3_v3(rv3d->ofs, fly->ofs_backup); - rv3d->persp= fly->persp_backup; - } - } - else if (fly->persp_backup==RV3D_CAMOB) { /* camera */ - float mat3[3][3]; - if(fly->root_parent) { - DAG_id_flush_update(&fly->root_parent->id, OB_RECALC_OB); - } - else { - copy_m3_m4(mat3, v3d->camera->obmat); - object_mat3_to_rot(v3d->camera, mat3, TRUE); - DAG_id_flush_update(&v3d->camera->id, OB_RECALC_OB); - } - } - else { /* not camera */ - /* Apply the fly mode view */ - /*restore the dist*/ - float mat[3][3]; - upvec[0]= upvec[1]= 0; - upvec[2]= fly->dist_backup; /*x and y are 0*/ - copy_m3_m4(mat, rv3d->viewinv); - mul_m3_v3(mat, upvec); - add_v3_v3(rv3d->ofs, upvec); - /*Done with correcting for the dist */ - } - - rv3d->rflag &= ~RV3D_NAVIGATING; -//XXX2.5 BIF_view3d_previewrender_signal(fly->sa, PR_DBASE|PR_DISPRECT); /* not working at the moment not sure why */ - - if(fly->obtfm) - MEM_freeN(fly->obtfm); - - if(fly->state == FLY_CONFIRM) { - MEM_freeN(fly); - return OPERATOR_FINISHED; - } - - MEM_freeN(fly); - return OPERATOR_CANCELLED; -} - -static void flyEvent(FlyInfo *fly, wmEvent *event) -{ - if (event->type == TIMER && event->customdata == fly->timer) { - fly->redraw = 1; - } - else if (event->type == MOUSEMOVE) { - fly->mval[0] = event->x - fly->ar->winrct.xmin; - fly->mval[1] = event->y - fly->ar->winrct.ymin; - } /* handle modal keymap first */ - else if (event->type == EVT_MODAL_MAP) { - switch (event->val) { - case FLY_MODAL_CANCEL: - fly->state = FLY_CANCEL; - break; - case FLY_MODAL_CONFIRM: - fly->state = FLY_CONFIRM; - break; - - case FLY_MODAL_ACCELERATE: - { - double time_currwheel; - float time_wheel; - - time_currwheel= PIL_check_seconds_timer(); - time_wheel = (float)(time_currwheel - fly->time_lastwheel); - fly->time_lastwheel = time_currwheel; - /*printf("Wheel %f\n", time_wheel);*/ - /*Mouse wheel delays range from 0.5==slow to 0.01==fast*/ - time_wheel = 1+ (10 - (20*MIN2(time_wheel, 0.5))); /* 0-0.5 -> 0-5.0 */ - - if (fly->speed<0.0f) fly->speed= 0.0f; - else { - if (event->shift) - fly->speed+= fly->grid*time_wheel*0.1; - else - fly->speed+= fly->grid*time_wheel; - } - break; - } - case FLY_MODAL_DECELERATE: - { - double time_currwheel; - float time_wheel; - - time_currwheel= PIL_check_seconds_timer(); - time_wheel = (float)(time_currwheel - fly->time_lastwheel); - fly->time_lastwheel = time_currwheel; - time_wheel = 1+ (10 - (20*MIN2(time_wheel, 0.5))); /* 0-0.5 -> 0-5.0 */ - - if (fly->speed>0) fly->speed=0; - else { - if (event->shift) - fly->speed-= fly->grid*time_wheel*0.1; - else - fly->speed-= fly->grid*time_wheel; - } - break; - } - case FLY_MODAL_PAN_ENABLE: - fly->pan_view= TRUE; - break; - case FLY_MODAL_PAN_DISABLE: -//XXX2.5 warp_pointer(cent_orig[0], cent_orig[1]); - fly->pan_view= FALSE; - break; - - /* impliment WASD keys */ - case FLY_MODAL_DIR_FORWARD: - if (fly->speed < 0.0f) fly->speed= -fly->speed; /* flip speed rather then stopping, game like motion */ - else if (fly->axis==2) fly->speed += fly->grid; /* increse like mousewheel if were already moving in that difection*/ - fly->axis= 2; - break; - case FLY_MODAL_DIR_BACKWARD: - if (fly->speed > 0.0f) fly->speed= -fly->speed; - else if (fly->axis==2) fly->speed -= fly->grid; - fly->axis= 2; - break; - case FLY_MODAL_DIR_LEFT: - if (fly->speed < 0.0f) fly->speed= -fly->speed; - else if (fly->axis==0) fly->speed += fly->grid; - fly->axis= 0; - break; - case FLY_MODAL_DIR_RIGHT: - if (fly->speed > 0.0f) fly->speed= -fly->speed; - else if (fly->axis==0) fly->speed -= fly->grid; - fly->axis= 0; - break; - case FLY_MODAL_DIR_DOWN: - if (fly->speed < 0.0f) fly->speed= -fly->speed; - else if (fly->axis==1) fly->speed += fly->grid; - fly->axis= 1; - break; - case FLY_MODAL_DIR_UP: - if (fly->speed > 0.0f) fly->speed= -fly->speed; - else if (fly->axis==1) fly->speed -= fly->grid; - fly->axis= 1; - break; - - case FLY_MODAL_AXIS_LOCK_X: - if (fly->xlock) fly->xlock=0; - else { - fly->xlock = 2; - fly->xlock_momentum = 0.0; - } - break; - case FLY_MODAL_AXIS_LOCK_Z: - if (fly->zlock) fly->zlock=0; - else { - fly->zlock = 2; - fly->zlock_momentum = 0.0; - } - break; - - case FLY_MODAL_PRECISION_ENABLE: - fly->use_precision= TRUE; - break; - case FLY_MODAL_PRECISION_DISABLE: - fly->use_precision= FALSE; - break; - - } - } -} - -static int flyApply(bContext *C, FlyInfo *fly) -{ - -#define FLY_ROTATE_FAC 2.5f /* more is faster */ -#define FLY_ZUP_CORRECT_FAC 0.1f /* ammount to correct per step */ -#define FLY_ZUP_CORRECT_ACCEL 0.05f /* increase upright momentum each step */ - - /* - fly mode - Shift+F - a fly loop where the user can move move the view as if they are flying - */ - RegionView3D *rv3d= fly->rv3d; - View3D *v3d = fly->v3d; - ARegion *ar = fly->ar; - Scene *scene= fly->scene; - - float prev_view_mat[4][4]; - - float mat[3][3], /* 3x3 copy of the view matrix so we can move allong the view axis */ - dvec[3]={0,0,0}, /* this is the direction thast added to the view offset per redraw */ - - /* Camera Uprighting variables */ - upvec[3]={0,0,0}, /* stores the view's up vector */ - - moffset[2], /* mouse offset from the views center */ - tmp_quat[4]; /* used for rotating the view */ - - int cent_orig[2], /* view center */ -//XXX- can avoid using // cent[2], /* view center modified */ - xmargin, ymargin; /* x and y margin are define the safe area where the mouses movement wont rotate the view */ - unsigned char - apply_rotation= 1; /* if the user presses shift they can look about without movinf the direction there looking*/ - - if(fly->root_parent) - view3d_persp_mat4(rv3d, prev_view_mat); - - /* the dist defines a vector that is infront of the offset - to rotate the view about. - this is no good for fly mode because we - want to rotate about the viewers center. - but to correct the dist removal we must - alter offset so the view doesn't jump. */ - - xmargin= ar->winx/20.0f; - ymargin= ar->winy/20.0f; - - cent_orig[0]= ar->winrct.xmin + ar->winx/2; - cent_orig[1]= ar->winrct.ymin + ar->winy/2; - - { - - /* mouse offset from the center */ - moffset[0]= fly->mval[0]- ar->winx/2; - moffset[1]= fly->mval[1]- ar->winy/2; - - /* enforce a view margin */ - if (moffset[0]>xmargin) moffset[0]-=xmargin; - else if (moffset[0] < -xmargin) moffset[0]+=xmargin; - else moffset[0]=0; - - if (moffset[1]>ymargin) moffset[1]-=ymargin; - else if (moffset[1] < -ymargin) moffset[1]+=ymargin; - else moffset[1]=0; - - - /* scale the mouse movement by this value - scales mouse movement to the view size - * moffset[0]/(ar->winx-xmargin*2) - window size minus margin (same for y) - * - * the mouse moves isnt linear */ - - if(moffset[0]) { - moffset[0] /= ar->winx - (xmargin*2); - moffset[0] *= fabs(moffset[0]); - } - - if(moffset[1]) { - moffset[1] /= ar->winy - (ymargin*2); - moffset[1] *= fabs(moffset[1]); - } - - /* Should we redraw? */ - if(fly->speed != 0.0f || moffset[0] || moffset[1] || fly->zlock || fly->xlock || dvec[0] || dvec[1] || dvec[2] ) { - float dvec_tmp[3]; - double time_current, time_redraw; /*time how fast it takes for us to redraw, this is so simple scenes dont fly too fast */ - float time_redraw_clamped; - - time_current= PIL_check_seconds_timer(); - time_redraw= (float)(time_current - fly->time_lastdraw); - time_redraw_clamped= MIN2(0.05f, time_redraw); /* clamt the redraw time to avoid jitter in roll correction */ - fly->time_lastdraw= time_current; - /*fprintf(stderr, "%f\n", time_redraw);*/ /* 0.002 is a small redraw 0.02 is larger */ - - /* Scale the time to use shift to scale the speed down- just like - shift slows many other areas of blender down */ - if (fly->use_precision) - fly->speed= fly->speed * (1.0f-time_redraw_clamped); - - copy_m3_m4(mat, rv3d->viewinv); - - if (fly->pan_view==TRUE) { - /* pan only */ - dvec_tmp[0]= -moffset[0]; - dvec_tmp[1]= -moffset[1]; - dvec_tmp[2]= 0; - - if (fly->use_precision) { - dvec_tmp[0] *= 0.1; - dvec_tmp[1] *= 0.1; - } - - mul_m3_v3(mat, dvec_tmp); - mul_v3_fl(dvec_tmp, time_redraw*200.0 * fly->grid); - - } else { - float roll; /* similar to the angle between the camera's up and the Z-up, but its very rough so just roll*/ - - /* rotate about the X axis- look up/down */ - if (moffset[1]) { - upvec[0]=1; - upvec[1]=0; - upvec[2]=0; - mul_m3_v3(mat, upvec); - axis_angle_to_quat( tmp_quat, upvec, (float)moffset[1] * time_redraw * -FLY_ROTATE_FAC); /* Rotate about the relative up vec */ - mul_qt_qtqt(rv3d->viewquat, rv3d->viewquat, tmp_quat); - - if (fly->xlock) fly->xlock = 2; /*check for rotation*/ - if (fly->zlock) fly->zlock = 2; - fly->xlock_momentum= 0.0f; - } - - /* rotate about the Y axis- look left/right */ - if (moffset[0]) { - - /* if we're upside down invert the moffset */ - upvec[0]=0; - upvec[1]=1; - upvec[2]=0; - mul_m3_v3(mat, upvec); - - if(upvec[2] < 0.0f) - moffset[0]= -moffset[0]; - - /* make the lock vectors */ - if (fly->zlock) { - upvec[0]=0; - upvec[1]=0; - upvec[2]=1; - } else { - upvec[0]=0; - upvec[1]=1; - upvec[2]=0; - mul_m3_v3(mat, upvec); - } - - axis_angle_to_quat( tmp_quat, upvec, (float)moffset[0] * time_redraw * FLY_ROTATE_FAC); /* Rotate about the relative up vec */ - mul_qt_qtqt(rv3d->viewquat, rv3d->viewquat, tmp_quat); - - if (fly->xlock) fly->xlock = 2;/*check for rotation*/ - if (fly->zlock) fly->zlock = 2; - } - - if (fly->zlock==2) { - upvec[0]=1; - upvec[1]=0; - upvec[2]=0; - mul_m3_v3(mat, upvec); - - /*make sure we have some z rolling*/ - if (fabs(upvec[2]) > 0.00001f) { - roll= upvec[2]*5; - upvec[0]=0; /*rotate the view about this axis*/ - upvec[1]=0; - upvec[2]=1; - - mul_m3_v3(mat, upvec); - axis_angle_to_quat( tmp_quat, upvec, roll*time_redraw_clamped*fly->zlock_momentum * FLY_ZUP_CORRECT_FAC); /* Rotate about the relative up vec */ - mul_qt_qtqt(rv3d->viewquat, rv3d->viewquat, tmp_quat); - - fly->zlock_momentum += FLY_ZUP_CORRECT_ACCEL; - } else { - fly->zlock=1; /* dont check until the view rotates again */ - fly->zlock_momentum= 0.0f; - } - } - - if (fly->xlock==2 && moffset[1]==0) { /*only apply xcorrect when mouse isnt applying x rot*/ - upvec[0]=0; - upvec[1]=0; - upvec[2]=1; - mul_m3_v3(mat, upvec); - /*make sure we have some z rolling*/ - if (fabs(upvec[2]) > 0.00001) { - roll= upvec[2] * -5; - - upvec[0]= 1.0f; /*rotate the view about this axis*/ - upvec[1]= 0.0f; - upvec[2]= 0.0f; - - mul_m3_v3(mat, upvec); - - axis_angle_to_quat( tmp_quat, upvec, roll*time_redraw_clamped*fly->xlock_momentum*0.1f); /* Rotate about the relative up vec */ - mul_qt_qtqt(rv3d->viewquat, rv3d->viewquat, tmp_quat); - - fly->xlock_momentum += 0.05f; - } else { - fly->xlock=1; /* see above */ - fly->xlock_momentum= 0.0f; - } - } - - - if (apply_rotation) { - /* Normal operation */ - /* define dvec, view direction vector */ - dvec_tmp[0]= dvec_tmp[1]= dvec_tmp[2]= 0.0f; - /* move along the current axis */ - dvec_tmp[fly->axis]= 1.0f; - - mul_m3_v3(mat, dvec_tmp); - - mul_v3_fl(dvec_tmp, fly->speed * time_redraw * 0.25f); - } - } - - /* impose a directional lag */ - interp_v3_v3v3(dvec, dvec_tmp, fly->dvec_prev, (1.0f/(1.0f+(time_redraw*5.0f)))); - - if (rv3d->persp==RV3D_CAMOB) { - Object *lock_ob= fly->root_parent ? fly->root_parent : fly->v3d->camera; - if (lock_ob->protectflag & OB_LOCK_LOCX) dvec[0] = 0.0; - if (lock_ob->protectflag & OB_LOCK_LOCY) dvec[1] = 0.0; - if (lock_ob->protectflag & OB_LOCK_LOCZ) dvec[2] = 0.0; - } - - add_v3_v3(rv3d->ofs, dvec); - - /* todo, dynamic keys */ -#if 0 - if (fly->zlock && fly->xlock) - ED_area_headerprint(fly->ar, "FlyKeys Speed:(+/- | Wheel), Upright Axis:X on/Z on, Slow:Shift, Direction:WASDRF, Ok:LMB, Pan:MMB, Cancel:RMB"); - else if (fly->zlock) - ED_area_headerprint(fly->ar, "FlyKeys Speed:(+/- | Wheel), Upright Axis:X off/Z on, Slow:Shift, Direction:WASDRF, Ok:LMB, Pan:MMB, Cancel:RMB"); - else if (fly->xlock) - ED_area_headerprint(fly->ar, "FlyKeys Speed:(+/- | Wheel), Upright Axis:X on/Z off, Slow:Shift, Direction:WASDRF, Ok:LMB, Pan:MMB, Cancel:RMB"); - else - ED_area_headerprint(fly->ar, "FlyKeys Speed:(+/- | Wheel), Upright Axis:X off/Z off, Slow:Shift, Direction:WASDRF, Ok:LMB, Pan:MMB, Cancel:RMB"); -#endif - - /* we are in camera view so apply the view ofs and quat to the view matrix and set the camera to the view */ - if (rv3d->persp==RV3D_CAMOB) { - ID *id_key; - /* transform the parent or the camera? */ - if(fly->root_parent) { - Object *ob_update; - - float view_mat[4][4]; - float prev_view_imat[4][4]; - float diff_mat[4][4]; - float parent_mat[4][4]; - - invert_m4_m4(prev_view_imat, prev_view_mat); - view3d_persp_mat4(rv3d, view_mat); - mul_m4_m4m4(diff_mat, prev_view_imat, view_mat); - mul_m4_m4m4(parent_mat, fly->root_parent->obmat, diff_mat); - object_apply_mat4(fly->root_parent, parent_mat); - - // where_is_object(scene, fly->root_parent); - - ob_update= v3d->camera->parent; - while(ob_update) { - DAG_id_flush_update(&ob_update->id, OB_RECALC_OB); - ob_update= ob_update->parent; - } - - copy_m4_m4(prev_view_mat, view_mat); - - id_key= &fly->root_parent->id; - - } - else { - float view_mat[4][4]; - view3d_persp_mat4(rv3d, view_mat); - object_apply_mat4(v3d->camera, view_mat); - id_key= &v3d->camera->id; - } - - /* record the motion */ - if (autokeyframe_cfra_can_key(scene, id_key)) { - ListBase dsources = {NULL, NULL}; - - /* add datasource override for the camera object */ - ANIM_relative_keyingset_add_source(&dsources, id_key, NULL, NULL); - - /* insert keyframes - * 1) on the first frame - * 2) on each subsequent frame - * TODO: need to check in future that frame changed before doing this - */ - if (fly->xlock || fly->zlock || moffset[0] || moffset[1]) { - KeyingSet *ks= ANIM_builtin_keyingset_get_named(NULL, "Rotation"); - ANIM_apply_keyingset(C, &dsources, NULL, ks, MODIFYKEY_MODE_INSERT, (float)CFRA); - } - if (fly->speed) { - KeyingSet *ks= ANIM_builtin_keyingset_get_named(NULL, "Location"); - ANIM_apply_keyingset(C, &dsources, NULL, ks, MODIFYKEY_MODE_INSERT, (float)CFRA); - } - - /* free temp data */ - BLI_freelistN(&dsources); - } - } - } else - /*were not redrawing but we need to update the time else the view will jump */ - fly->time_lastdraw= PIL_check_seconds_timer(); - /* end drawing */ - copy_v3_v3(fly->dvec_prev, dvec); - } - -/* moved to flyEnd() */ - - return OPERATOR_FINISHED; -} - - - -static int fly_invoke(bContext *C, wmOperator *op, wmEvent *event) -{ - RegionView3D *rv3d= CTX_wm_region_view3d(C); - FlyInfo *fly; - - if(rv3d->viewlock) - return OPERATOR_CANCELLED; - - fly= MEM_callocN(sizeof(FlyInfo), "FlyOperation"); - - op->customdata= fly; - - if(initFlyInfo(C, fly, op, event)==FALSE) { - MEM_freeN(op->customdata); - return OPERATOR_CANCELLED; - } - - flyEvent(fly, event); - - WM_event_add_modal_handler(C, op); - - return OPERATOR_RUNNING_MODAL; -} - -static int fly_cancel(bContext *C, wmOperator *op) -{ - FlyInfo *fly = op->customdata; - - fly->state = FLY_CANCEL; - flyEnd(C, fly); - op->customdata= NULL; - - return OPERATOR_CANCELLED; -} - -static int fly_modal(bContext *C, wmOperator *op, wmEvent *event) -{ - int exit_code; - - FlyInfo *fly = op->customdata; - - fly->redraw= 0; - - flyEvent(fly, event); - - if(event->type==TIMER && event->customdata == fly->timer) - flyApply(C, fly); - - if(fly->redraw) { - ED_region_tag_redraw(CTX_wm_region(C)); - } - - exit_code = flyEnd(C, fly); - - if(exit_code!=OPERATOR_RUNNING_MODAL) - ED_region_tag_redraw(CTX_wm_region(C)); - - return exit_code; -} - -void VIEW3D_OT_fly(wmOperatorType *ot) -{ - - /* identifiers */ - ot->name= "Fly Navigation"; - ot->description= "Interactively fly around the scene"; - ot->idname= "VIEW3D_OT_fly"; - - /* api callbacks */ - ot->invoke= fly_invoke; - ot->cancel= fly_cancel; - ot->modal= fly_modal; - ot->poll= ED_operator_view3d_active; - - /* flags */ - ot->flag= OPTYPE_BLOCKING; - -} - /* ************************************** */ void view3d_align_axis_to_vector(View3D *v3d, RegionView3D *rv3d, int axisidx, float vec[3]) -- cgit v1.2.3 From 3320b6fdd6ac436ffa55567d0577791ffa5e736c Mon Sep 17 00:00:00 2001 From: Campbell Barton Date: Mon, 25 Oct 2010 07:09:38 +0000 Subject: missed adding the file when moving fly mode. --- source/blender/editors/space_view3d/view3d_fly.c | 941 +++++++++++++++++++++++ 1 file changed, 941 insertions(+) create mode 100644 source/blender/editors/space_view3d/view3d_fly.c (limited to 'source/blender/editors/space_view3d') diff --git a/source/blender/editors/space_view3d/view3d_fly.c b/source/blender/editors/space_view3d/view3d_fly.c new file mode 100644 index 00000000000..db83cd4b364 --- /dev/null +++ b/source/blender/editors/space_view3d/view3d_fly.c @@ -0,0 +1,941 @@ +/** + * $Id: view3d_view.c 32630 2010-10-21 09:02:21Z campbellbarton $ + * + * ***** BEGIN GPL LICENSE BLOCK ***** + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; either version 2 + * of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software Foundation, + * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + * + * Contributor(s): Campbell Barton + * + * ***** END GPL LICENSE BLOCK ***** + */ + +/* defines VIEW3D_OT_fly modal operator */ + +#include "DNA_anim_types.h" +#include "DNA_scene_types.h" +#include "DNA_object_types.h" + +#include "MEM_guardedalloc.h" + +#include "BLI_math.h" +#include "BLI_blenlib.h" + +#include "BKE_context.h" +#include "BKE_object.h" +#include "BKE_report.h" + +#include "BKE_depsgraph.h" /* for fly mode updating */ + +#include "BIF_gl.h" + +#include "WM_api.h" +#include "WM_types.h" + +#include "ED_keyframing.h" +#include "ED_screen.h" +#include "ED_space_api.h" + +#include "PIL_time.h" /* smoothview */ + +#include "view3d_intern.h" // own include + +/* NOTE: these defines are saved in keymap files, do not change values but just add new ones */ +#define FLY_MODAL_CANCEL 1 +#define FLY_MODAL_CONFIRM 2 +#define FLY_MODAL_ACCELERATE 3 +#define FLY_MODAL_DECELERATE 4 +#define FLY_MODAL_PAN_ENABLE 5 +#define FLY_MODAL_PAN_DISABLE 6 +#define FLY_MODAL_DIR_FORWARD 7 +#define FLY_MODAL_DIR_BACKWARD 8 +#define FLY_MODAL_DIR_LEFT 9 +#define FLY_MODAL_DIR_RIGHT 10 +#define FLY_MODAL_DIR_UP 11 +#define FLY_MODAL_DIR_DOWN 12 +#define FLY_MODAL_AXIS_LOCK_X 13 +#define FLY_MODAL_AXIS_LOCK_Z 14 +#define FLY_MODAL_PRECISION_ENABLE 15 +#define FLY_MODAL_PRECISION_DISABLE 16 + +/* called in transform_ops.c, on each regeneration of keymaps */ +void fly_modal_keymap(wmKeyConfig *keyconf) +{ + static EnumPropertyItem modal_items[] = { + {FLY_MODAL_CANCEL, "CANCEL", 0, "Cancel", ""}, + {FLY_MODAL_CONFIRM, "CONFIRM", 0, "Confirm", ""}, + {FLY_MODAL_ACCELERATE, "ACCELERATE", 0, "Accelerate", ""}, + {FLY_MODAL_DECELERATE, "DECELERATE", 0, "Decelerate", ""}, + + {FLY_MODAL_PAN_ENABLE, "PAN_ENABLE", 0, "Pan Enable", ""}, + {FLY_MODAL_PAN_DISABLE, "PAN_DISABLE", 0, "Pan Disable", ""}, + + {FLY_MODAL_DIR_FORWARD, "FORWARD", 0, "Fly Forward", ""}, + {FLY_MODAL_DIR_BACKWARD,"BACKWARD", 0, "Fly Backward", ""}, + {FLY_MODAL_DIR_LEFT, "LEFT", 0, "Fly Left", ""}, + {FLY_MODAL_DIR_RIGHT, "RIGHT", 0, "Fly Right", ""}, + {FLY_MODAL_DIR_UP, "UP", 0, "Fly Up", ""}, + {FLY_MODAL_DIR_DOWN, "DOWN", 0, "Fly Down", ""}, + + {FLY_MODAL_AXIS_LOCK_X, "AXIS_LOCK_X", 0, "X Axis Correction", "X axis correction (toggle)"}, + {FLY_MODAL_AXIS_LOCK_Z, "AXIS_LOCK_Z", 0, "X Axis Correction", "Z axis correction (toggle)"}, + + {FLY_MODAL_PRECISION_ENABLE, "PRECISION_ENABLE", 0, "Precision Enable", ""}, + {FLY_MODAL_PRECISION_DISABLE, "PRECISION_DISABLE", 0, "Precision Disable", ""}, + + {0, NULL, 0, NULL, NULL}}; + + wmKeyMap *keymap= WM_modalkeymap_get(keyconf, "View3D Fly Modal"); + + /* this function is called for each spacetype, only needs to add map once */ + if(keymap) return; + + keymap= WM_modalkeymap_add(keyconf, "View3D Fly Modal", modal_items); + + /* items for modal map */ + WM_modalkeymap_add_item(keymap, ESCKEY, KM_PRESS, KM_ANY, 0, FLY_MODAL_CANCEL); + WM_modalkeymap_add_item(keymap, RIGHTMOUSE, KM_ANY, KM_ANY, 0, FLY_MODAL_CANCEL); + + WM_modalkeymap_add_item(keymap, LEFTMOUSE, KM_ANY, KM_ANY, 0, FLY_MODAL_CONFIRM); + WM_modalkeymap_add_item(keymap, RETKEY, KM_PRESS, KM_ANY, 0, FLY_MODAL_CONFIRM); + WM_modalkeymap_add_item(keymap, SPACEKEY, KM_PRESS, KM_ANY, 0, FLY_MODAL_CONFIRM); + WM_modalkeymap_add_item(keymap, PADENTER, KM_PRESS, KM_ANY, 0, FLY_MODAL_CONFIRM); + + WM_modalkeymap_add_item(keymap, PADPLUSKEY, KM_PRESS, 0, 0, FLY_MODAL_ACCELERATE); + WM_modalkeymap_add_item(keymap, PADMINUS, KM_PRESS, 0, 0, FLY_MODAL_DECELERATE); + WM_modalkeymap_add_item(keymap, WHEELUPMOUSE, KM_PRESS, 0, 0, FLY_MODAL_ACCELERATE); + WM_modalkeymap_add_item(keymap, WHEELDOWNMOUSE, KM_PRESS, 0, 0, FLY_MODAL_DECELERATE); + + WM_modalkeymap_add_item(keymap, MIDDLEMOUSE, KM_PRESS, KM_ANY, 0, FLY_MODAL_PAN_ENABLE); + WM_modalkeymap_add_item(keymap, MIDDLEMOUSE, KM_RELEASE, KM_ANY, 0, FLY_MODAL_PAN_DISABLE); /* XXX - Bug in the event system, middle mouse release doesnt work */ + + /* WASD */ + WM_modalkeymap_add_item(keymap, WKEY, KM_PRESS, 0, 0, FLY_MODAL_DIR_FORWARD); + WM_modalkeymap_add_item(keymap, SKEY, KM_PRESS, 0, 0, FLY_MODAL_DIR_BACKWARD); + WM_modalkeymap_add_item(keymap, AKEY, KM_PRESS, 0, 0, FLY_MODAL_DIR_LEFT); + WM_modalkeymap_add_item(keymap, DKEY, KM_PRESS, 0, 0, FLY_MODAL_DIR_RIGHT); + WM_modalkeymap_add_item(keymap, RKEY, KM_PRESS, 0, 0, FLY_MODAL_DIR_UP); + WM_modalkeymap_add_item(keymap, FKEY, KM_PRESS, 0, 0, FLY_MODAL_DIR_DOWN); + + WM_modalkeymap_add_item(keymap, XKEY, KM_PRESS, 0, 0, FLY_MODAL_AXIS_LOCK_X); + WM_modalkeymap_add_item(keymap, ZKEY, KM_PRESS, 0, 0, FLY_MODAL_AXIS_LOCK_Z); + + WM_modalkeymap_add_item(keymap, LEFTSHIFTKEY, KM_PRESS, KM_ANY, 0, FLY_MODAL_PRECISION_ENABLE); + WM_modalkeymap_add_item(keymap, LEFTSHIFTKEY, KM_RELEASE, KM_ANY, 0, FLY_MODAL_PRECISION_DISABLE); + + /* assign map to operators */ + WM_modalkeymap_assign(keymap, "VIEW3D_OT_fly"); + +} + +typedef struct FlyInfo { + /* context stuff */ + RegionView3D *rv3d; + View3D *v3d; + ARegion *ar; + Scene *scene; + + wmTimer *timer; /* needed for redraws */ + + short state; + short use_precision; + short redraw; + short mval[2]; + + /* fly state state */ + float speed; /* the speed the view is moving per redraw */ + short axis; /* Axis index to move allong by default Z to move allong the view */ + short pan_view; /* when true, pan the view instead of rotating */ + + /* relative view axis locking - xlock, zlock + 0; disabled + 1; enabled but not checking because mouse hasnt moved outside the margin since locking was checked an not needed + when the mouse moves, locking is set to 2 so checks are done. + 2; mouse moved and checking needed, if no view altering is donem its changed back to 1 */ + short xlock, zlock; + float xlock_momentum, zlock_momentum; /* nicer dynamics */ + float grid; /* world scale 1.0 default */ + + /* root most parent */ + Object *root_parent; + + /* backup values */ + float dist_backup; /* backup the views distance since we use a zero dist for fly mode */ + float ofs_backup[3]; /* backup the views offset incase the user cancels flying in non camera mode */ + float rot_backup[4]; /* backup the views quat incase the user cancels flying in non camera mode. (quat for view, eul for camera) */ + short persp_backup; /* remember if were ortho or not, only used for restoring the view if it was a ortho view */ + + void *obtfm; /* backup the objects transform */ + + /* compare between last state */ + double time_lastwheel; /* used to accelerate when using the mousewheel a lot */ + double time_lastdraw; /* time between draws */ + + void *draw_handle_pixel; + + /* use for some lag */ + float dvec_prev[3]; /* old for some lag */ + +} FlyInfo; + +static void drawFlyPixel(const struct bContext *UNUSED(C), struct ARegion *UNUSED(ar), void *arg) +{ + FlyInfo *fly = arg; + + /* draws 4 edge brackets that frame the safe area where the + mouse can move during fly mode without spinning the view */ + float x1, x2, y1, y2; + + x1= 0.45*(float)fly->ar->winx; + y1= 0.45*(float)fly->ar->winy; + x2= 0.55*(float)fly->ar->winx; + y2= 0.55*(float)fly->ar->winy; + cpack(0); + + + glBegin(GL_LINES); + /* bottom left */ + glVertex2f(x1,y1); + glVertex2f(x1,y1+5); + + glVertex2f(x1,y1); + glVertex2f(x1+5,y1); + + /* top right */ + glVertex2f(x2,y2); + glVertex2f(x2,y2-5); + + glVertex2f(x2,y2); + glVertex2f(x2-5,y2); + + /* top left */ + glVertex2f(x1,y2); + glVertex2f(x1,y2-5); + + glVertex2f(x1,y2); + glVertex2f(x1+5,y2); + + /* bottom right */ + glVertex2f(x2,y1); + glVertex2f(x2,y1+5); + + glVertex2f(x2,y1); + glVertex2f(x2-5,y1); + glEnd(); +} + +/* FlyInfo->state */ +#define FLY_RUNNING 0 +#define FLY_CANCEL 1 +#define FLY_CONFIRM 2 + +static int initFlyInfo (bContext *C, FlyInfo *fly, wmOperator *op, wmEvent *event) +{ + float upvec[3]; // tmp + float mat[3][3]; + + fly->rv3d= CTX_wm_region_view3d(C); + fly->v3d = CTX_wm_view3d(C); + fly->ar = CTX_wm_region(C); + fly->scene= CTX_data_scene(C); + + if(fly->rv3d->persp==RV3D_CAMOB && fly->v3d->camera->id.lib) { + BKE_report(op->reports, RPT_ERROR, "Cannot fly a camera from an external library"); + return FALSE; + } + + if(fly->v3d->ob_centre) { + BKE_report(op->reports, RPT_ERROR, "Cannot fly when the view is locked to an object"); + return FALSE; + } + + if(fly->rv3d->persp==RV3D_CAMOB && fly->v3d->camera->constraints.first) { + BKE_report(op->reports, RPT_ERROR, "Cannot fly an object with constraints"); + return FALSE; + } + + fly->state= FLY_RUNNING; + fly->speed= 0.0f; + fly->axis= 2; + fly->pan_view= FALSE; + fly->xlock= FALSE; + fly->zlock= FALSE; + fly->xlock_momentum=0.0f; + fly->zlock_momentum=0.0f; + fly->grid= 1.0f; + fly->use_precision= 0; + + fly->dvec_prev[0]= fly->dvec_prev[1]= fly->dvec_prev[2]= 0.0f; + + fly->timer= WM_event_add_timer(CTX_wm_manager(C), CTX_wm_window(C), TIMER, 0.01f); + + fly->mval[0] = event->x - fly->ar->winrct.xmin; + fly->mval[1] = event->y - fly->ar->winrct.ymin; + + + fly->time_lastdraw= fly->time_lastwheel= PIL_check_seconds_timer(); + + fly->draw_handle_pixel = ED_region_draw_cb_activate(fly->ar->type, drawFlyPixel, fly, REGION_DRAW_POST_PIXEL); + + fly->rv3d->rflag |= RV3D_NAVIGATING; /* so we draw the corner margins */ + + /* detect weather to start with Z locking */ + upvec[0]=1.0f; upvec[1]=0.0f; upvec[2]=0.0f; + copy_m3_m4(mat, fly->rv3d->viewinv); + mul_m3_v3(mat, upvec); + if (fabs(upvec[2]) < 0.1) + fly->zlock = 1; + upvec[0]=0; upvec[1]=0; upvec[2]=0; + + fly->persp_backup= fly->rv3d->persp; + fly->dist_backup= fly->rv3d->dist; + if (fly->rv3d->persp==RV3D_CAMOB) { + Object *ob_back; + if((fly->root_parent=fly->v3d->camera->parent)) { + while(fly->root_parent->parent) + fly->root_parent= fly->root_parent->parent; + ob_back= fly->root_parent; + } + else { + ob_back= fly->v3d->camera; + } + + /* store the original camera loc and rot */ + /* TODO. axis angle etc */ + + fly->obtfm= object_tfm_backup(ob_back); + + where_is_object(fly->scene, fly->v3d->camera); + negate_v3_v3(fly->rv3d->ofs, fly->v3d->camera->obmat[3]); + + fly->rv3d->dist=0.0; + } else { + /* perspective or ortho */ + if (fly->rv3d->persp==RV3D_ORTHO) + fly->rv3d->persp= RV3D_PERSP; /*if ortho projection, make perspective */ + copy_qt_qt(fly->rot_backup, fly->rv3d->viewquat); + copy_v3_v3(fly->ofs_backup, fly->rv3d->ofs); + fly->rv3d->dist= 0.0f; + + upvec[2]= fly->dist_backup; /*x and y are 0*/ + mul_m3_v3(mat, upvec); + sub_v3_v3(fly->rv3d->ofs, upvec); + /*Done with correcting for the dist*/ + } + + + /* center the mouse, probably the UI mafia are against this but without its quite annoying */ + WM_cursor_warp(CTX_wm_window(C), fly->ar->winrct.xmin + fly->ar->winx/2, fly->ar->winrct.ymin + fly->ar->winy/2); + + return 1; +} + +static int flyEnd(bContext *C, FlyInfo *fly) +{ + RegionView3D *rv3d= fly->rv3d; + View3D *v3d = fly->v3d; + + float upvec[3]; + + if(fly->state == FLY_RUNNING) + return OPERATOR_RUNNING_MODAL; + + WM_event_remove_timer(CTX_wm_manager(C), CTX_wm_window(C), fly->timer); + + ED_region_draw_cb_exit(fly->ar->type, fly->draw_handle_pixel); + + rv3d->dist= fly->dist_backup; + + if (fly->state == FLY_CANCEL) { + /* Revert to original view? */ + if (fly->persp_backup==RV3D_CAMOB) { /* a camera view */ + Object *ob_back; + if(fly->root_parent)ob_back= fly->root_parent; + else ob_back= fly->v3d->camera; + + /* store the original camera loc and rot */ + object_tfm_restore(ob_back, fly->obtfm); + + DAG_id_flush_update(&ob_back->id, OB_RECALC_OB); + } else { + /* Non Camera we need to reset the view back to the original location bacause the user canceled*/ + copy_qt_qt(rv3d->viewquat, fly->rot_backup); + copy_v3_v3(rv3d->ofs, fly->ofs_backup); + rv3d->persp= fly->persp_backup; + } + } + else if (fly->persp_backup==RV3D_CAMOB) { /* camera */ + float mat3[3][3]; + if(fly->root_parent) { + DAG_id_flush_update(&fly->root_parent->id, OB_RECALC_OB); + } + else { + copy_m3_m4(mat3, v3d->camera->obmat); + object_mat3_to_rot(v3d->camera, mat3, TRUE); + DAG_id_flush_update(&v3d->camera->id, OB_RECALC_OB); + } + } + else { /* not camera */ + /* Apply the fly mode view */ + /*restore the dist*/ + float mat[3][3]; + upvec[0]= upvec[1]= 0; + upvec[2]= fly->dist_backup; /*x and y are 0*/ + copy_m3_m4(mat, rv3d->viewinv); + mul_m3_v3(mat, upvec); + add_v3_v3(rv3d->ofs, upvec); + /*Done with correcting for the dist */ + } + + rv3d->rflag &= ~RV3D_NAVIGATING; +//XXX2.5 BIF_view3d_previewrender_signal(fly->sa, PR_DBASE|PR_DISPRECT); /* not working at the moment not sure why */ + + if(fly->obtfm) + MEM_freeN(fly->obtfm); + + if(fly->state == FLY_CONFIRM) { + MEM_freeN(fly); + return OPERATOR_FINISHED; + } + + MEM_freeN(fly); + return OPERATOR_CANCELLED; +} + +static void flyEvent(FlyInfo *fly, wmEvent *event) +{ + if (event->type == TIMER && event->customdata == fly->timer) { + fly->redraw = 1; + } + else if (event->type == MOUSEMOVE) { + fly->mval[0] = event->x - fly->ar->winrct.xmin; + fly->mval[1] = event->y - fly->ar->winrct.ymin; + } /* handle modal keymap first */ + else if (event->type == EVT_MODAL_MAP) { + switch (event->val) { + case FLY_MODAL_CANCEL: + fly->state = FLY_CANCEL; + break; + case FLY_MODAL_CONFIRM: + fly->state = FLY_CONFIRM; + break; + + case FLY_MODAL_ACCELERATE: + { + double time_currwheel; + float time_wheel; + + time_currwheel= PIL_check_seconds_timer(); + time_wheel = (float)(time_currwheel - fly->time_lastwheel); + fly->time_lastwheel = time_currwheel; + /*printf("Wheel %f\n", time_wheel);*/ + /*Mouse wheel delays range from 0.5==slow to 0.01==fast*/ + time_wheel = 1+ (10 - (20*MIN2(time_wheel, 0.5))); /* 0-0.5 -> 0-5.0 */ + + if (fly->speed<0.0f) fly->speed= 0.0f; + else { + if (event->shift) + fly->speed+= fly->grid*time_wheel*0.1; + else + fly->speed+= fly->grid*time_wheel; + } + break; + } + case FLY_MODAL_DECELERATE: + { + double time_currwheel; + float time_wheel; + + time_currwheel= PIL_check_seconds_timer(); + time_wheel = (float)(time_currwheel - fly->time_lastwheel); + fly->time_lastwheel = time_currwheel; + time_wheel = 1+ (10 - (20*MIN2(time_wheel, 0.5))); /* 0-0.5 -> 0-5.0 */ + + if (fly->speed>0) fly->speed=0; + else { + if (event->shift) + fly->speed-= fly->grid*time_wheel*0.1; + else + fly->speed-= fly->grid*time_wheel; + } + break; + } + case FLY_MODAL_PAN_ENABLE: + fly->pan_view= TRUE; + break; + case FLY_MODAL_PAN_DISABLE: +//XXX2.5 warp_pointer(cent_orig[0], cent_orig[1]); + fly->pan_view= FALSE; + break; + + /* impliment WASD keys */ + case FLY_MODAL_DIR_FORWARD: + if (fly->speed < 0.0f) fly->speed= -fly->speed; /* flip speed rather then stopping, game like motion */ + else if (fly->axis==2) fly->speed += fly->grid; /* increse like mousewheel if were already moving in that difection*/ + fly->axis= 2; + break; + case FLY_MODAL_DIR_BACKWARD: + if (fly->speed > 0.0f) fly->speed= -fly->speed; + else if (fly->axis==2) fly->speed -= fly->grid; + fly->axis= 2; + break; + case FLY_MODAL_DIR_LEFT: + if (fly->speed < 0.0f) fly->speed= -fly->speed; + else if (fly->axis==0) fly->speed += fly->grid; + fly->axis= 0; + break; + case FLY_MODAL_DIR_RIGHT: + if (fly->speed > 0.0f) fly->speed= -fly->speed; + else if (fly->axis==0) fly->speed -= fly->grid; + fly->axis= 0; + break; + case FLY_MODAL_DIR_DOWN: + if (fly->speed < 0.0f) fly->speed= -fly->speed; + else if (fly->axis==1) fly->speed += fly->grid; + fly->axis= 1; + break; + case FLY_MODAL_DIR_UP: + if (fly->speed > 0.0f) fly->speed= -fly->speed; + else if (fly->axis==1) fly->speed -= fly->grid; + fly->axis= 1; + break; + + case FLY_MODAL_AXIS_LOCK_X: + if (fly->xlock) fly->xlock=0; + else { + fly->xlock = 2; + fly->xlock_momentum = 0.0; + } + break; + case FLY_MODAL_AXIS_LOCK_Z: + if (fly->zlock) fly->zlock=0; + else { + fly->zlock = 2; + fly->zlock_momentum = 0.0; + } + break; + + case FLY_MODAL_PRECISION_ENABLE: + fly->use_precision= TRUE; + break; + case FLY_MODAL_PRECISION_DISABLE: + fly->use_precision= FALSE; + break; + + } + } +} + +static int flyApply(bContext *C, FlyInfo *fly) +{ + +#define FLY_ROTATE_FAC 2.5f /* more is faster */ +#define FLY_ZUP_CORRECT_FAC 0.1f /* ammount to correct per step */ +#define FLY_ZUP_CORRECT_ACCEL 0.05f /* increase upright momentum each step */ + + /* + fly mode - Shift+F + a fly loop where the user can move move the view as if they are flying + */ + RegionView3D *rv3d= fly->rv3d; + View3D *v3d = fly->v3d; + ARegion *ar = fly->ar; + Scene *scene= fly->scene; + + float prev_view_mat[4][4]; + + float mat[3][3], /* 3x3 copy of the view matrix so we can move allong the view axis */ + dvec[3]={0,0,0}, /* this is the direction thast added to the view offset per redraw */ + + /* Camera Uprighting variables */ + upvec[3]={0,0,0}, /* stores the view's up vector */ + + moffset[2], /* mouse offset from the views center */ + tmp_quat[4]; /* used for rotating the view */ + + int cent_orig[2], /* view center */ +//XXX- can avoid using // cent[2], /* view center modified */ + xmargin, ymargin; /* x and y margin are define the safe area where the mouses movement wont rotate the view */ + unsigned char + apply_rotation= 1; /* if the user presses shift they can look about without movinf the direction there looking*/ + + if(fly->root_parent) + view3d_persp_mat4(rv3d, prev_view_mat); + + /* the dist defines a vector that is infront of the offset + to rotate the view about. + this is no good for fly mode because we + want to rotate about the viewers center. + but to correct the dist removal we must + alter offset so the view doesn't jump. */ + + xmargin= ar->winx/20.0f; + ymargin= ar->winy/20.0f; + + cent_orig[0]= ar->winrct.xmin + ar->winx/2; + cent_orig[1]= ar->winrct.ymin + ar->winy/2; + + { + + /* mouse offset from the center */ + moffset[0]= fly->mval[0]- ar->winx/2; + moffset[1]= fly->mval[1]- ar->winy/2; + + /* enforce a view margin */ + if (moffset[0]>xmargin) moffset[0]-=xmargin; + else if (moffset[0] < -xmargin) moffset[0]+=xmargin; + else moffset[0]=0; + + if (moffset[1]>ymargin) moffset[1]-=ymargin; + else if (moffset[1] < -ymargin) moffset[1]+=ymargin; + else moffset[1]=0; + + + /* scale the mouse movement by this value - scales mouse movement to the view size + * moffset[0]/(ar->winx-xmargin*2) - window size minus margin (same for y) + * + * the mouse moves isnt linear */ + + if(moffset[0]) { + moffset[0] /= ar->winx - (xmargin*2); + moffset[0] *= fabs(moffset[0]); + } + + if(moffset[1]) { + moffset[1] /= ar->winy - (ymargin*2); + moffset[1] *= fabs(moffset[1]); + } + + /* Should we redraw? */ + if(fly->speed != 0.0f || moffset[0] || moffset[1] || fly->zlock || fly->xlock || dvec[0] || dvec[1] || dvec[2] ) { + float dvec_tmp[3]; + double time_current, time_redraw; /*time how fast it takes for us to redraw, this is so simple scenes dont fly too fast */ + float time_redraw_clamped; + + time_current= PIL_check_seconds_timer(); + time_redraw= (float)(time_current - fly->time_lastdraw); + time_redraw_clamped= MIN2(0.05f, time_redraw); /* clamt the redraw time to avoid jitter in roll correction */ + fly->time_lastdraw= time_current; + /*fprintf(stderr, "%f\n", time_redraw);*/ /* 0.002 is a small redraw 0.02 is larger */ + + /* Scale the time to use shift to scale the speed down- just like + shift slows many other areas of blender down */ + if (fly->use_precision) + fly->speed= fly->speed * (1.0f-time_redraw_clamped); + + copy_m3_m4(mat, rv3d->viewinv); + + if (fly->pan_view==TRUE) { + /* pan only */ + dvec_tmp[0]= -moffset[0]; + dvec_tmp[1]= -moffset[1]; + dvec_tmp[2]= 0; + + if (fly->use_precision) { + dvec_tmp[0] *= 0.1; + dvec_tmp[1] *= 0.1; + } + + mul_m3_v3(mat, dvec_tmp); + mul_v3_fl(dvec_tmp, time_redraw*200.0 * fly->grid); + + } else { + float roll; /* similar to the angle between the camera's up and the Z-up, but its very rough so just roll*/ + + /* rotate about the X axis- look up/down */ + if (moffset[1]) { + upvec[0]=1; + upvec[1]=0; + upvec[2]=0; + mul_m3_v3(mat, upvec); + axis_angle_to_quat( tmp_quat, upvec, (float)moffset[1] * time_redraw * -FLY_ROTATE_FAC); /* Rotate about the relative up vec */ + mul_qt_qtqt(rv3d->viewquat, rv3d->viewquat, tmp_quat); + + if (fly->xlock) fly->xlock = 2; /*check for rotation*/ + if (fly->zlock) fly->zlock = 2; + fly->xlock_momentum= 0.0f; + } + + /* rotate about the Y axis- look left/right */ + if (moffset[0]) { + + /* if we're upside down invert the moffset */ + upvec[0]=0; + upvec[1]=1; + upvec[2]=0; + mul_m3_v3(mat, upvec); + + if(upvec[2] < 0.0f) + moffset[0]= -moffset[0]; + + /* make the lock vectors */ + if (fly->zlock) { + upvec[0]=0; + upvec[1]=0; + upvec[2]=1; + } else { + upvec[0]=0; + upvec[1]=1; + upvec[2]=0; + mul_m3_v3(mat, upvec); + } + + axis_angle_to_quat( tmp_quat, upvec, (float)moffset[0] * time_redraw * FLY_ROTATE_FAC); /* Rotate about the relative up vec */ + mul_qt_qtqt(rv3d->viewquat, rv3d->viewquat, tmp_quat); + + if (fly->xlock) fly->xlock = 2;/*check for rotation*/ + if (fly->zlock) fly->zlock = 2; + } + + if (fly->zlock==2) { + upvec[0]=1; + upvec[1]=0; + upvec[2]=0; + mul_m3_v3(mat, upvec); + + /*make sure we have some z rolling*/ + if (fabs(upvec[2]) > 0.00001f) { + roll= upvec[2]*5; + upvec[0]=0; /*rotate the view about this axis*/ + upvec[1]=0; + upvec[2]=1; + + mul_m3_v3(mat, upvec); + axis_angle_to_quat( tmp_quat, upvec, roll*time_redraw_clamped*fly->zlock_momentum * FLY_ZUP_CORRECT_FAC); /* Rotate about the relative up vec */ + mul_qt_qtqt(rv3d->viewquat, rv3d->viewquat, tmp_quat); + + fly->zlock_momentum += FLY_ZUP_CORRECT_ACCEL; + } else { + fly->zlock=1; /* dont check until the view rotates again */ + fly->zlock_momentum= 0.0f; + } + } + + if (fly->xlock==2 && moffset[1]==0) { /*only apply xcorrect when mouse isnt applying x rot*/ + upvec[0]=0; + upvec[1]=0; + upvec[2]=1; + mul_m3_v3(mat, upvec); + /*make sure we have some z rolling*/ + if (fabs(upvec[2]) > 0.00001) { + roll= upvec[2] * -5; + + upvec[0]= 1.0f; /*rotate the view about this axis*/ + upvec[1]= 0.0f; + upvec[2]= 0.0f; + + mul_m3_v3(mat, upvec); + + axis_angle_to_quat( tmp_quat, upvec, roll*time_redraw_clamped*fly->xlock_momentum*0.1f); /* Rotate about the relative up vec */ + mul_qt_qtqt(rv3d->viewquat, rv3d->viewquat, tmp_quat); + + fly->xlock_momentum += 0.05f; + } else { + fly->xlock=1; /* see above */ + fly->xlock_momentum= 0.0f; + } + } + + + if (apply_rotation) { + /* Normal operation */ + /* define dvec, view direction vector */ + dvec_tmp[0]= dvec_tmp[1]= dvec_tmp[2]= 0.0f; + /* move along the current axis */ + dvec_tmp[fly->axis]= 1.0f; + + mul_m3_v3(mat, dvec_tmp); + + mul_v3_fl(dvec_tmp, fly->speed * time_redraw * 0.25f); + } + } + + /* impose a directional lag */ + interp_v3_v3v3(dvec, dvec_tmp, fly->dvec_prev, (1.0f/(1.0f+(time_redraw*5.0f)))); + + if (rv3d->persp==RV3D_CAMOB) { + Object *lock_ob= fly->root_parent ? fly->root_parent : fly->v3d->camera; + if (lock_ob->protectflag & OB_LOCK_LOCX) dvec[0] = 0.0; + if (lock_ob->protectflag & OB_LOCK_LOCY) dvec[1] = 0.0; + if (lock_ob->protectflag & OB_LOCK_LOCZ) dvec[2] = 0.0; + } + + add_v3_v3(rv3d->ofs, dvec); + + /* todo, dynamic keys */ +#if 0 + if (fly->zlock && fly->xlock) + ED_area_headerprint(fly->ar, "FlyKeys Speed:(+/- | Wheel), Upright Axis:X on/Z on, Slow:Shift, Direction:WASDRF, Ok:LMB, Pan:MMB, Cancel:RMB"); + else if (fly->zlock) + ED_area_headerprint(fly->ar, "FlyKeys Speed:(+/- | Wheel), Upright Axis:X off/Z on, Slow:Shift, Direction:WASDRF, Ok:LMB, Pan:MMB, Cancel:RMB"); + else if (fly->xlock) + ED_area_headerprint(fly->ar, "FlyKeys Speed:(+/- | Wheel), Upright Axis:X on/Z off, Slow:Shift, Direction:WASDRF, Ok:LMB, Pan:MMB, Cancel:RMB"); + else + ED_area_headerprint(fly->ar, "FlyKeys Speed:(+/- | Wheel), Upright Axis:X off/Z off, Slow:Shift, Direction:WASDRF, Ok:LMB, Pan:MMB, Cancel:RMB"); +#endif + + /* we are in camera view so apply the view ofs and quat to the view matrix and set the camera to the view */ + if (rv3d->persp==RV3D_CAMOB) { + ID *id_key; + /* transform the parent or the camera? */ + if(fly->root_parent) { + Object *ob_update; + + float view_mat[4][4]; + float prev_view_imat[4][4]; + float diff_mat[4][4]; + float parent_mat[4][4]; + + invert_m4_m4(prev_view_imat, prev_view_mat); + view3d_persp_mat4(rv3d, view_mat); + mul_m4_m4m4(diff_mat, prev_view_imat, view_mat); + mul_m4_m4m4(parent_mat, fly->root_parent->obmat, diff_mat); + object_apply_mat4(fly->root_parent, parent_mat); + + // where_is_object(scene, fly->root_parent); + + ob_update= v3d->camera->parent; + while(ob_update) { + DAG_id_flush_update(&ob_update->id, OB_RECALC_OB); + ob_update= ob_update->parent; + } + + copy_m4_m4(prev_view_mat, view_mat); + + id_key= &fly->root_parent->id; + + } + else { + float view_mat[4][4]; + view3d_persp_mat4(rv3d, view_mat); + object_apply_mat4(v3d->camera, view_mat); + id_key= &v3d->camera->id; + } + + /* record the motion */ + if (autokeyframe_cfra_can_key(scene, id_key)) { + ListBase dsources = {NULL, NULL}; + + /* add datasource override for the camera object */ + ANIM_relative_keyingset_add_source(&dsources, id_key, NULL, NULL); + + /* insert keyframes + * 1) on the first frame + * 2) on each subsequent frame + * TODO: need to check in future that frame changed before doing this + */ + if (fly->xlock || fly->zlock || moffset[0] || moffset[1]) { + KeyingSet *ks= ANIM_builtin_keyingset_get_named(NULL, "Rotation"); + ANIM_apply_keyingset(C, &dsources, NULL, ks, MODIFYKEY_MODE_INSERT, (float)CFRA); + } + if (fly->speed) { + KeyingSet *ks= ANIM_builtin_keyingset_get_named(NULL, "Location"); + ANIM_apply_keyingset(C, &dsources, NULL, ks, MODIFYKEY_MODE_INSERT, (float)CFRA); + } + + /* free temp data */ + BLI_freelistN(&dsources); + } + } + } else + /*were not redrawing but we need to update the time else the view will jump */ + fly->time_lastdraw= PIL_check_seconds_timer(); + /* end drawing */ + copy_v3_v3(fly->dvec_prev, dvec); + } + +/* moved to flyEnd() */ + + return OPERATOR_FINISHED; +} + + + +static int fly_invoke(bContext *C, wmOperator *op, wmEvent *event) +{ + RegionView3D *rv3d= CTX_wm_region_view3d(C); + FlyInfo *fly; + + if(rv3d->viewlock) + return OPERATOR_CANCELLED; + + fly= MEM_callocN(sizeof(FlyInfo), "FlyOperation"); + + op->customdata= fly; + + if(initFlyInfo(C, fly, op, event)==FALSE) { + MEM_freeN(op->customdata); + return OPERATOR_CANCELLED; + } + + flyEvent(fly, event); + + WM_event_add_modal_handler(C, op); + + return OPERATOR_RUNNING_MODAL; +} + +static int fly_cancel(bContext *C, wmOperator *op) +{ + FlyInfo *fly = op->customdata; + + fly->state = FLY_CANCEL; + flyEnd(C, fly); + op->customdata= NULL; + + return OPERATOR_CANCELLED; +} + +static int fly_modal(bContext *C, wmOperator *op, wmEvent *event) +{ + int exit_code; + + FlyInfo *fly = op->customdata; + + fly->redraw= 0; + + flyEvent(fly, event); + + if(event->type==TIMER && event->customdata == fly->timer) + flyApply(C, fly); + + if(fly->redraw) { + ED_region_tag_redraw(CTX_wm_region(C)); + } + + exit_code = flyEnd(C, fly); + + if(exit_code!=OPERATOR_RUNNING_MODAL) + ED_region_tag_redraw(CTX_wm_region(C)); + + return exit_code; +} + +void VIEW3D_OT_fly(wmOperatorType *ot) +{ + /* identifiers */ + ot->name= "Fly Navigation"; + ot->description= "Interactively fly around the scene"; + ot->idname= "VIEW3D_OT_fly"; + + /* api callbacks */ + ot->invoke= fly_invoke; + ot->cancel= fly_cancel; + ot->modal= fly_modal; + ot->poll= ED_operator_view3d_active; + + /* flags */ + ot->flag= OPTYPE_BLOCKING; +} -- cgit v1.2.3 From 904f82b49fb8a5169deaab707fe01333c077119f Mon Sep 17 00:00:00 2001 From: Campbell Barton Date: Mon, 25 Oct 2010 07:12:29 +0000 Subject: bugfix [#24376] Fly mode disturbs the rotation or scale of the camera object --- source/blender/editors/space_view3d/view3d_fly.c | 28 +++++++++++------------- 1 file changed, 13 insertions(+), 15 deletions(-) (limited to 'source/blender/editors/space_view3d') diff --git a/source/blender/editors/space_view3d/view3d_fly.c b/source/blender/editors/space_view3d/view3d_fly.c index db83cd4b364..5f4c551e2d6 100644 --- a/source/blender/editors/space_view3d/view3d_fly.c +++ b/source/blender/editors/space_view3d/view3d_fly.c @@ -377,15 +377,7 @@ static int flyEnd(bContext *C, FlyInfo *fly) } } else if (fly->persp_backup==RV3D_CAMOB) { /* camera */ - float mat3[3][3]; - if(fly->root_parent) { - DAG_id_flush_update(&fly->root_parent->id, OB_RECALC_OB); - } - else { - copy_m3_m4(mat3, v3d->camera->obmat); - object_mat3_to_rot(v3d->camera, mat3, TRUE); - DAG_id_flush_update(&v3d->camera->id, OB_RECALC_OB); - } + DAG_id_flush_update(fly->root_parent ? &fly->root_parent->id : &v3d->camera->id, OB_RECALC_OB); } else { /* not camera */ /* Apply the fly mode view */ @@ -802,7 +794,7 @@ static int flyApply(bContext *C, FlyInfo *fly) view3d_persp_mat4(rv3d, view_mat); mul_m4_m4m4(diff_mat, prev_view_imat, view_mat); mul_m4_m4m4(parent_mat, fly->root_parent->obmat, diff_mat); - object_apply_mat4(fly->root_parent, parent_mat); + object_apply_mat4(fly->root_parent, parent_mat, TRUE); // where_is_object(scene, fly->root_parent); @@ -820,7 +812,7 @@ static int flyApply(bContext *C, FlyInfo *fly) else { float view_mat[4][4]; view3d_persp_mat4(rv3d, view_mat); - object_apply_mat4(v3d->camera, view_mat); + object_apply_mat4(v3d->camera, view_mat, TRUE); id_key= &v3d->camera->id; } @@ -901,7 +893,7 @@ static int fly_cancel(bContext *C, wmOperator *op) static int fly_modal(bContext *C, wmOperator *op, wmEvent *event) { int exit_code; - + short do_draw= FALSE; FlyInfo *fly = op->customdata; fly->redraw= 0; @@ -911,14 +903,20 @@ static int fly_modal(bContext *C, wmOperator *op, wmEvent *event) if(event->type==TIMER && event->customdata == fly->timer) flyApply(C, fly); - if(fly->redraw) { - ED_region_tag_redraw(CTX_wm_region(C)); - } + do_draw |= fly->redraw; exit_code = flyEnd(C, fly); if(exit_code!=OPERATOR_RUNNING_MODAL) + do_draw= TRUE; + + if(do_draw) { + if(fly->rv3d->persp==RV3D_CAMOB) { + WM_event_add_notifier(C, NC_OBJECT|ND_TRANSFORM, fly->root_parent ? fly->root_parent : fly->v3d->camera); + } + ED_region_tag_redraw(CTX_wm_region(C)); + } return exit_code; } -- cgit v1.2.3 From b1a6ffbc375077dd2da97a960abbd057fe1cbb74 Mon Sep 17 00:00:00 2001 From: "Guillermo S. Romero" Date: Mon, 25 Oct 2010 07:19:43 +0000 Subject: SVN maintenance. --- source/blender/editors/space_view3d/view3d_fly.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'source/blender/editors/space_view3d') diff --git a/source/blender/editors/space_view3d/view3d_fly.c b/source/blender/editors/space_view3d/view3d_fly.c index 5f4c551e2d6..e137270aa5b 100644 --- a/source/blender/editors/space_view3d/view3d_fly.c +++ b/source/blender/editors/space_view3d/view3d_fly.c @@ -1,5 +1,5 @@ /** - * $Id: view3d_view.c 32630 2010-10-21 09:02:21Z campbellbarton $ + * $Id$ * * ***** BEGIN GPL LICENSE BLOCK ***** * -- cgit v1.2.3 From a1336fd6f157f0009bdbab43817f53ae68cc757f Mon Sep 17 00:00:00 2001 From: Nathan Letwory Date: Mon, 25 Oct 2010 07:28:57 +0000 Subject: Add missing includes to remedy implicit declaration of functions. --- source/blender/editors/space_view3d/view3d_view.c | 4 ++++ 1 file changed, 4 insertions(+) (limited to 'source/blender/editors/space_view3d') diff --git a/source/blender/editors/space_view3d/view3d_view.c b/source/blender/editors/space_view3d/view3d_view.c index 5849d65cb6e..85c8e06a555 100644 --- a/source/blender/editors/space_view3d/view3d_view.c +++ b/source/blender/editors/space_view3d/view3d_view.c @@ -34,6 +34,7 @@ #include "MEM_guardedalloc.h" #include "BLI_math.h" +#include "BLI_rect.h" #include "BKE_anim.h" #include "BKE_action.h" @@ -42,10 +43,13 @@ #include "BKE_global.h" #include "BKE_main.h" #include "BKE_report.h" +#include "BKE_scene.h" #include "BIF_gl.h" #include "BIF_glutil.h" +#include "GPU_draw.h" + #include "WM_api.h" #include "WM_types.h" -- cgit v1.2.3 From e002bcd876082562e197d4c33e8fa10c58447f88 Mon Sep 17 00:00:00 2001 From: Campbell Barton Date: Mon, 25 Oct 2010 17:08:40 +0000 Subject: bugfix [#22277] Absolute Shapekeys crash (in BGE) running a shape actuator on a softbody would crash because it assumed the deformer was a BL_MeshDeformer. Added TODO note, since it would be nice if softbody would work with shape keys too. --- source/blender/editors/space_view3d/view3d_intern.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'source/blender/editors/space_view3d') diff --git a/source/blender/editors/space_view3d/view3d_intern.h b/source/blender/editors/space_view3d/view3d_intern.h index 0cba387169a..0d8b97a66ed 100644 --- a/source/blender/editors/space_view3d/view3d_intern.h +++ b/source/blender/editors/space_view3d/view3d_intern.h @@ -66,7 +66,6 @@ void VIEW3D_OT_layers(struct wmOperatorType *ot); /* view3d_ops.c */ void view3d_operatortypes(void); -void view3d_keymap(struct wmKeyConfig *keyconf); /* view3d_edit.c */ void VIEW3D_OT_zoom(struct wmOperatorType *ot); @@ -94,6 +93,7 @@ void view3d_boxview_copy(ScrArea *sa, ARegion *ar); void view3d_persp_mat4(struct RegionView3D *rv3d, float mat[][4]); /* view3d_fly.c */ +void view3d_keymap(struct wmKeyConfig *keyconf); void VIEW3D_OT_fly(struct wmOperatorType *ot); /* drawanim.c */ -- cgit v1.2.3 From 7869c7ee85aa48d4f4702c6e2e8812c55187d63a Mon Sep 17 00:00:00 2001 From: Janne Karhu Date: Mon, 25 Oct 2010 17:20:12 +0000 Subject: Fix for [#24383] Particles using "circle" as display, are disabled on opening file --- source/blender/editors/space_view3d/drawobject.c | 37 ++++++++++++++---------- 1 file changed, 21 insertions(+), 16 deletions(-) (limited to 'source/blender/editors/space_view3d') diff --git a/source/blender/editors/space_view3d/drawobject.c b/source/blender/editors/space_view3d/drawobject.c index bc340ef5b4b..d2285371667 100644 --- a/source/blender/editors/space_view3d/drawobject.c +++ b/source/blender/editors/space_view3d/drawobject.c @@ -3255,16 +3255,22 @@ static void draw_particle_arrays(int draw_as, int totpoint, int ob_dt, int selec static void draw_particle(ParticleKey *state, int draw_as, short draw, float pixsize, float imat[4][4], float *draw_line, ParticleBillboardData *bb, ParticleDrawData *pdd) { float vec[3], vec2[3]; - float *vd = pdd->vd; - float *cd = pdd->cd; + float *vd = NULL; + float *cd = NULL; float ma_r=0.0f; float ma_g=0.0f; float ma_b=0.0f; - if(pdd->ma_r) { - ma_r = *pdd->ma_r; - ma_g = *pdd->ma_g; - ma_b = *pdd->ma_b; + /* null only for PART_DRAW_CIRC */ + if(pdd) { + vd = pdd->vd; + cd = pdd->cd; + + if(pdd->ma_r) { + ma_r = *pdd->ma_r; + ma_g = *pdd->ma_g; + ma_b = *pdd->ma_b; + } } switch(draw_as){ @@ -3356,8 +3362,6 @@ static void draw_particle(ParticleKey *state, int draw_as, short draw, float pix } case PART_DRAW_CIRC: { - if(pdd->ma_r) - glColor3f(ma_r,ma_g,ma_b); drawcircball(GL_LINE_LOOP, state->co, pixsize, imat); break; } @@ -3491,12 +3495,6 @@ static void draw_new_particle_system(Scene *scene, View3D *v3d, RegionView3D *rv else cpack(0); - if(pdd) { - pdd->ma_r = &ma_r; - pdd->ma_g = &ma_g; - pdd->ma_b = &ma_b; - } - timestep= psys_get_timestep(&sim); if( (base->flag & OB_FROMDUPLI) && (ob->flag & OB_FROMGROUP) ) { @@ -3650,11 +3648,18 @@ static void draw_new_particle_system(Scene *scene, View3D *v3d, RegionView3D *rv pdd->tot_vec_size= tot_vec_size; } + if(pdd) { + pdd->ma_r = &ma_r; + pdd->ma_g = &ma_g; + pdd->ma_b = &ma_b; + } + psys->lattice= psys_get_lattice(&sim); - if(pdd && draw_as!=PART_DRAW_PATH){ + /* circles don't use drawdata, so have to add a special case here */ + if((pdd || draw_as==PART_DRAW_CIRC) && draw_as!=PART_DRAW_PATH){ /* 5. */ - if((pdd->flag & PARTICLE_DRAW_DATA_UPDATED) + if(pdd && (pdd->flag & PARTICLE_DRAW_DATA_UPDATED) && (pdd->vedata || part->draw & (PART_DRAW_SIZE|PART_DRAW_NUM|PART_DRAW_HEALTH))==0) { totpoint = pdd->totpoint; /* draw data is up to date */ } -- cgit v1.2.3 From f13417a969681bf60115948302341981ecaa7d2c Mon Sep 17 00:00:00 2001 From: Campbell Barton Date: Tue, 26 Oct 2010 20:51:11 +0000 Subject: keep the view centered with camera shift, camera view grease pencil intentionally ignores shift. --- source/blender/editors/space_view3d/view3d_draw.c | 11 ++++++----- source/blender/editors/space_view3d/view3d_edit.c | 2 +- source/blender/editors/space_view3d/view3d_view.c | 7 ++++++- 3 files changed, 13 insertions(+), 7 deletions(-) (limited to 'source/blender/editors/space_view3d') diff --git a/source/blender/editors/space_view3d/view3d_draw.c b/source/blender/editors/space_view3d/view3d_draw.c index 30880db0c90..0421fdadb7b 100644 --- a/source/blender/editors/space_view3d/view3d_draw.c +++ b/source/blender/editors/space_view3d/view3d_draw.c @@ -843,7 +843,7 @@ static void view3d_get_viewborder_size(Scene *scene, ARegion *ar, float size_r[2 } } -void view3d_calc_camera_border(Scene *scene, ARegion *ar, RegionView3D *rv3d, View3D *v3d, rctf *viewborder_r) +void view3d_calc_camera_border(Scene *scene, ARegion *ar, RegionView3D *rv3d, View3D *v3d, rctf *viewborder_r, short do_shift) { float zoomfac, size[2]; float dx= 0.0f, dy= 0.0f; @@ -882,12 +882,13 @@ void view3d_calc_camera_border(Scene *scene, ARegion *ar, RegionView3D *rv3d, Vi viewborder_r->xmax-= dx; viewborder_r->ymax-= dy; - if(v3d->camera && v3d->camera->type==OB_CAMERA) { + if(do_shift && v3d->camera && v3d->camera->type==OB_CAMERA) { Camera *cam= v3d->camera->data; float w = viewborder_r->xmax - viewborder_r->xmin; float h = viewborder_r->ymax - viewborder_r->ymin; float side = MAX2(w, h); - + + if(do_shift == -1) side *= -1; viewborder_r->xmin+= cam->shiftx*side; viewborder_r->xmax+= cam->shiftx*side; viewborder_r->ymin+= cam->shifty*side; @@ -922,7 +923,7 @@ static void drawviewborder(Scene *scene, ARegion *ar, View3D *v3d) if(v3d->camera->type==OB_CAMERA) ca = v3d->camera->data; - view3d_calc_camera_border(scene, ar, rv3d, v3d, &viewborder); + view3d_calc_camera_border(scene, ar, rv3d, v3d, &viewborder, FALSE); /* the offsets */ x1= viewborder.xmin; y1= viewborder.ymin; @@ -1259,7 +1260,7 @@ static void draw_bgpic(Scene *scene, ARegion *ar, View3D *v3d) if(rv3d->persp==RV3D_CAMOB) { rctf vb; - view3d_calc_camera_border(scene, ar, rv3d, v3d, &vb); + view3d_calc_camera_border(scene, ar, rv3d, v3d, &vb, FALSE); x1= vb.xmin; y1= vb.ymin; diff --git a/source/blender/editors/space_view3d/view3d_edit.c b/source/blender/editors/space_view3d/view3d_edit.c index 42767d98c80..d3f977072c1 100644 --- a/source/blender/editors/space_view3d/view3d_edit.c +++ b/source/blender/editors/space_view3d/view3d_edit.c @@ -1594,7 +1594,7 @@ static int render_border_exec(bContext *C, wmOperator *op) rect.ymax= RNA_int_get(op->ptr, "ymax"); /* calculate range */ - view3d_calc_camera_border(scene, ar, rv3d, v3d, &vb); + view3d_calc_camera_border(scene, ar, rv3d, v3d, &vb, FALSE); scene->r.border.xmin= ((float)rect.xmin-vb.xmin)/(vb.xmax-vb.xmin); scene->r.border.ymin= ((float)rect.ymin-vb.ymin)/(vb.ymax-vb.ymin); diff --git a/source/blender/editors/space_view3d/view3d_view.c b/source/blender/editors/space_view3d/view3d_view.c index 85c8e06a555..046ba29365f 100644 --- a/source/blender/editors/space_view3d/view3d_view.c +++ b/source/blender/editors/space_view3d/view3d_view.c @@ -1021,6 +1021,11 @@ int get_view3d_viewplane(View3D *v3d, RegionView3D *rv3d, int winxi, int winyi, if(cam) { float dx= 0.5*fac*rv3d->camdx*(x2-x1); float dy= 0.5*fac*rv3d->camdy*(y2-y1); + + /* shify offset */ + dx += ((cam->shiftx/10.0f) / cam->lens) * 32.0; + dy += ((cam->shifty/10.0f) / cam->lens) * 32.0; + x1+= dx; x2+= dx; y1+= dy; @@ -1762,7 +1767,7 @@ static int game_engine_exec(bContext *C, wmOperator *op) if(rv3d->persp==RV3D_CAMOB && startscene->gm.framing.type == SCE_GAMEFRAMING_BARS && startscene->gm.stereoflag != STEREO_DOME) { /* Letterbox */ rctf cam_framef; - view3d_calc_camera_border(startscene, ar, rv3d, CTX_wm_view3d(C), &cam_framef); + view3d_calc_camera_border(startscene, ar, rv3d, CTX_wm_view3d(C), &cam_framef, FALSE); cam_frame.xmin = cam_framef.xmin + ar->winrct.xmin; cam_frame.xmax = cam_framef.xmax + ar->winrct.xmin; cam_frame.ymin = cam_framef.ymin + ar->winrct.ymin; -- cgit v1.2.3 From d9757e270552fadc9e8543a7cccce5874520d166 Mon Sep 17 00:00:00 2001 From: Matt Ebb Date: Tue, 26 Oct 2010 22:49:49 +0000 Subject: Don't reset view clipping to 0.1 on entering local view, if you're working on something close up with < 0.1 clipping, then toggle into local view it gets very annoying. --- source/blender/editors/space_view3d/view3d_view.c | 1 - 1 file changed, 1 deletion(-) (limited to 'source/blender/editors/space_view3d') diff --git a/source/blender/editors/space_view3d/view3d_view.c b/source/blender/editors/space_view3d/view3d_view.c index 046ba29365f..aac03d97022 100644 --- a/source/blender/editors/space_view3d/view3d_view.c +++ b/source/blender/editors/space_view3d/view3d_view.c @@ -1484,7 +1484,6 @@ static void initlocalview(Main *bmain, Scene *scene, ScrArea *sa) v3d->cursor[2]= -rv3d->ofs[2]; } } - if (v3d->near> 0.1) v3d->near= 0.1; v3d->lay= locallay; } -- cgit v1.2.3 From defc47bcb923984f27f9e2b72db16ac1f8a7c46a Mon Sep 17 00:00:00 2001 From: Campbell Barton Date: Wed, 27 Oct 2010 08:55:13 +0000 Subject: recent fix r32626 for [#24339] wasnt correctly clamping the depth rectangle, crashing with grease pencil in some cases. --- source/blender/editors/space_view3d/view3d_draw.c | 27 ++++++++++++++--------- source/blender/editors/space_view3d/view3d_edit.c | 6 ++--- 2 files changed, 18 insertions(+), 15 deletions(-) (limited to 'source/blender/editors/space_view3d') diff --git a/source/blender/editors/space_view3d/view3d_draw.c b/source/blender/editors/space_view3d/view3d_draw.c index 0421fdadb7b..4c153c2d0c1 100644 --- a/source/blender/editors/space_view3d/view3d_draw.c +++ b/source/blender/editors/space_view3d/view3d_draw.c @@ -1573,22 +1573,27 @@ static void draw_dupli_objects(Scene *scene, ARegion *ar, View3D *v3d, Base *bas void view3d_update_depths_rect(ARegion *ar, ViewDepths *d, rcti *rect) { int x, y, w, h; + rcti r= {0, ar->winx-1, 0, ar->winy-1}; /* clamp rect by area */ - + /* Constrain rect to depth bounds */ - if (rect->xmin < 0) rect->xmin = 0; - if (rect->ymin < 0) rect->ymin = 0; - if (rect->xmax >= ar->winx) rect->xmax = ar->winx-1; - if (rect->ymax >= ar->winy) rect->ymax = ar->winy-1; + BLI_isect_rcti(&r, rect, rect); /* assign values to compare with the ViewDepths */ - x= ar->winrct.xmin + rect->xmin; - y= ar->winrct.ymin + rect->ymin; + x= rect->xmin; + y= rect->ymin; w= rect->xmax - rect->xmin; h= rect->ymax - rect->ymin; - if( d->w != w || + if(w <= 0 || h <= 0) { + if(d->depths) + MEM_freeN(d->depths); + d->depths= NULL; + + d->damaged= FALSE; + } + else if( d->w != w || d->h != h || d->x != x || d->y != y || @@ -1604,13 +1609,13 @@ void view3d_update_depths_rect(ARegion *ar, ViewDepths *d, rcti *rect) d->depths= MEM_mallocN(sizeof(float)*d->w*d->h,"View depths Subset"); - d->damaged= 1; + d->damaged= TRUE; } if(d->damaged) { glReadPixels(ar->winrct.xmin+d->x,ar->winrct.ymin+d->y, d->w,d->h, GL_DEPTH_COMPONENT,GL_FLOAT, d->depths); glGetDoublev(GL_DEPTH_RANGE,d->depth_range); - d->damaged= 0; + d->damaged= FALSE; } } @@ -1655,7 +1660,7 @@ float view3d_depth_near(ViewDepths *d) const float *depths= d->depths; float depth= FLT_MAX; - int i= d->w * d->h; + int i= (int)d->w * (int)d->h; /* cast to avoid short overflow */ /* far is both the starting 'far' value * and the closest value found. */ diff --git a/source/blender/editors/space_view3d/view3d_edit.c b/source/blender/editors/space_view3d/view3d_edit.c index d3f977072c1..a70774f27ce 100644 --- a/source/blender/editors/space_view3d/view3d_edit.c +++ b/source/blender/editors/space_view3d/view3d_edit.c @@ -2575,10 +2575,8 @@ static float view_autodist_depth_margin(ARegion *ar, short *mval, int margin) view3d_update_depths_rect(ar, &depth_temp, &rect); depth_close= view3d_depth_near(&depth_temp); - - MEM_freeN(depth_temp.depths); - - return depth_close; + if(depth_temp.depths) MEM_freeN(depth_temp.depths); + return depth_close; } /* XXX todo Zooms in on a border drawn by the user */ -- cgit v1.2.3 From d666b4fae57b5b395e48e043c2a4bb4b4ecf8723 Mon Sep 17 00:00:00 2001 From: Campbell Barton Date: Wed, 27 Oct 2010 11:05:46 +0000 Subject: fix for shift offset in own recent commit for drawing the camera border in camera view. --- source/blender/editors/space_view3d/view3d_view.c | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) (limited to 'source/blender/editors/space_view3d') diff --git a/source/blender/editors/space_view3d/view3d_view.c b/source/blender/editors/space_view3d/view3d_view.c index aac03d97022..6cbce905f33 100644 --- a/source/blender/editors/space_view3d/view3d_view.c +++ b/source/blender/editors/space_view3d/view3d_view.c @@ -1022,9 +1022,15 @@ int get_view3d_viewplane(View3D *v3d, RegionView3D *rv3d, int winxi, int winyi, float dx= 0.5*fac*rv3d->camdx*(x2-x1); float dy= 0.5*fac*rv3d->camdy*(y2-y1); - /* shify offset */ - dx += ((cam->shiftx/10.0f) / cam->lens) * 32.0; - dy += ((cam->shifty/10.0f) / cam->lens) * 32.0; + /* shift offset */ + if(cam->type==CAM_ORTHO) { + dx += cam->shiftx * cam->ortho_scale; + dy += cam->shifty * cam->ortho_scale; + } + else { + dx += cam->shiftx * (cam->clipsta / cam->lens) * 32.0; + dy += cam->shifty * (cam->clipsta / cam->lens) * 32.0; + } x1+= dx; x2+= dx; -- cgit v1.2.3 From c69f2eaca97084e0e830756b574c9ec8a55c6643 Mon Sep 17 00:00:00 2001 From: Janne Karhu Date: Sat, 30 Oct 2010 17:13:03 +0000 Subject: Fix for [#24448] User Preferences - Interface - Mini Axis - Brightness, none working? * The axis draw function was changed by Campbell recently, but the brightness value was forgotten? * Solved currently by mapping the brightness value to axis alpha. --- source/blender/editors/space_view3d/view3d_draw.c | 16 +++++++++++++--- 1 file changed, 13 insertions(+), 3 deletions(-) (limited to 'source/blender/editors/space_view3d') diff --git a/source/blender/editors/space_view3d/view3d_draw.c b/source/blender/editors/space_view3d/view3d_draw.c index 4c153c2d0c1..de373d54be6 100644 --- a/source/blender/editors/space_view3d/view3d_draw.c +++ b/source/blender/editors/space_view3d/view3d_draw.c @@ -579,6 +579,7 @@ static void draw_view_axis(RegionView3D *rv3d) const float toll = 0.5; /* used to see when view is quasi-orthogonal */ const float start = k + 1.0; /* axis center in screen coordinates, x=y */ float ydisp = 0.0; /* vertical displacement to allow obj info text */ + int bright = 25*(float)U.rvibright + 5; /* axis alpha (rvibright has range 0-10) */ float vec[3]; float dx, dy; @@ -586,6 +587,9 @@ static void draw_view_axis(RegionView3D *rv3d) /* thickness of lines is proportional to k */ glLineWidth(2); + glEnable(GL_BLEND); + glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); + /* X */ vec[0] = 1; vec[1] = vec[2] = 0; @@ -593,7 +597,7 @@ static void draw_view_axis(RegionView3D *rv3d) dx = vec[0] * k; dy = vec[1] * k; - glColor3ub(220, 0, 0); + glColor4ub(220, 0, 0, bright); glBegin(GL_LINES); glVertex2f(start, start + ydisp); glVertex2f(start + dx, start + dy + ydisp); @@ -603,6 +607,9 @@ static void draw_view_axis(RegionView3D *rv3d) BLF_draw_default(start + dx + 2, start + dy + ydisp + 2, 0.0f, "x"); } + /* BLF_draw_default disables blending */ + glEnable(GL_BLEND); + /* Y */ vec[1] = 1; vec[0] = vec[2] = 0; @@ -610,7 +617,7 @@ static void draw_view_axis(RegionView3D *rv3d) dx = vec[0] * k; dy = vec[1] * k; - glColor3ub(0, 220, 0); + glColor4ub(0, 220, 0, bright); glBegin(GL_LINES); glVertex2f(start, start + ydisp); glVertex2f(start + dx, start + dy + ydisp); @@ -619,6 +626,8 @@ static void draw_view_axis(RegionView3D *rv3d) if (fabs(dx) > toll || fabs(dy) > toll) { BLF_draw_default(start + dx + 2, start + dy + ydisp + 2, 0.0f, "y"); } + + glEnable(GL_BLEND); /* Z */ vec[2] = 1; @@ -627,7 +636,7 @@ static void draw_view_axis(RegionView3D *rv3d) dx = vec[0] * k; dy = vec[1] * k; - glColor3ub(30, 30, 220); + glColor4ub(30, 30, 220, bright); glBegin(GL_LINES); glVertex2f(start, start + ydisp); glVertex2f(start + dx, start + dy + ydisp); @@ -640,6 +649,7 @@ static void draw_view_axis(RegionView3D *rv3d) /* restore line-width */ glLineWidth(1.0); + glDisable(GL_BLEND); } -- cgit v1.2.3 From b349f7c99d770673cfd27b3ce7de311db33d6b3f Mon Sep 17 00:00:00 2001 From: Campbell Barton Date: Sat, 30 Oct 2010 23:02:38 +0000 Subject: Minor speedups for 3D view text drawing ~10-15% improved frame-rate with particle display. - ascii text drawing functions, slightly faster since they dont have to do hash lookups & utf8 conversions for each char. - used ascii drawing functions for the view3d's number display. - each text item was using fixed 128 chars, now only allocate the string length needed. --- source/blender/editors/space_view3d/drawanimviz.c | 7 ++- source/blender/editors/space_view3d/drawobject.c | 64 ++++++++++++++-------- .../blender/editors/space_view3d/view3d_intern.h | 5 +- 3 files changed, 47 insertions(+), 29 deletions(-) (limited to 'source/blender/editors/space_view3d') diff --git a/source/blender/editors/space_view3d/drawanimviz.c b/source/blender/editors/space_view3d/drawanimviz.c index 52bb90aa8f0..7035006ea70 100644 --- a/source/blender/editors/space_view3d/drawanimviz.c +++ b/source/blender/editors/space_view3d/drawanimviz.c @@ -31,6 +31,7 @@ #include #include +#include "BLO_sys_types.h" #include "DNA_anim_types.h" #include "DNA_armature_types.h" @@ -213,7 +214,7 @@ void draw_motion_path_instance(Scene *scene, if (i == 0) { sprintf(str, "%d", (i+sfra)); mul_v3_m4v3(co, ob->imat, mpv->co); - view3d_cached_text_draw_add(co, str, 0, V3D_CACHE_TEXT_WORLDSPACE); + view3d_cached_text_draw_add(co, str, 0, V3D_CACHE_TEXT_WORLDSPACE|V3D_CACHE_TEXT_ASCII); } else if ((i > stepsize) && (i < len-stepsize)) { bMotionPathVert *mpvP = (mpv - stepsize); @@ -222,7 +223,7 @@ void draw_motion_path_instance(Scene *scene, if ((equals_v3v3(mpv->co, mpvP->co)==0) || (equals_v3v3(mpv->co, mpvN->co)==0)) { sprintf(str, "%d", (sfra+i)); mul_v3_m4v3(co, ob->imat, mpv->co); - view3d_cached_text_draw_add(co, str, 0, V3D_CACHE_TEXT_WORLDSPACE); + view3d_cached_text_draw_add(co, str, 0, V3D_CACHE_TEXT_WORLDSPACE|V3D_CACHE_TEXT_ASCII); } } } @@ -280,7 +281,7 @@ void draw_motion_path_instance(Scene *scene, sprintf(str, "%d", (sfra+i)); mul_v3_m4v3(co, ob->imat, mpv->co); - view3d_cached_text_draw_add(co, str, 0, V3D_CACHE_TEXT_WORLDSPACE); + view3d_cached_text_draw_add(co, str, 0, V3D_CACHE_TEXT_WORLDSPACE|V3D_CACHE_TEXT_ASCII); } } } diff --git a/source/blender/editors/space_view3d/drawobject.c b/source/blender/editors/space_view3d/drawobject.c index d2285371667..8b9e960cdb3 100644 --- a/source/blender/editors/space_view3d/drawobject.c +++ b/source/blender/editors/space_view3d/drawobject.c @@ -558,10 +558,10 @@ static int CachedTextLevel= 0; typedef struct ViewCachedString { struct ViewCachedString *next, *prev; float vec[3], col[4]; - char str[128]; short mval[2]; short xoffs; short flag; + /* str is allocated past the end */ } ViewCachedString; void view3d_cached_text_draw_begin() @@ -573,15 +573,18 @@ void view3d_cached_text_draw_begin() void view3d_cached_text_draw_add(const float co[3], const char *str, short xoffs, short flag) { + int alloc_len= strlen(str) + 1; ListBase *strings= &CachedText[CachedTextLevel-1]; - ViewCachedString *vos= MEM_callocN(sizeof(ViewCachedString), "ViewCachedString"); + ViewCachedString *vos= MEM_callocN(sizeof(ViewCachedString) + alloc_len, "ViewCachedString"); BLI_addtail(strings, vos); - BLI_strncpy(vos->str, str, 128); copy_v3_v3(vos->vec, co); glGetFloatv(GL_CURRENT_COLOR, vos->col); vos->xoffs= xoffs; vos->flag= flag; + + /* allocate past the end */ + memcpy(++vos, str, alloc_len); } void view3d_cached_text_draw_end(View3D *v3d, ARegion *ar, int depth_write, float mat[][4]) @@ -635,8 +638,14 @@ void view3d_cached_text_draw_end(View3D *v3d, ARegion *ar, int depth_write, floa } #endif if(vos->mval[0]!=IS_CLIPPED) { + const char *str= (char *)(vos+1); glColor3fv(vos->col); - BLF_draw_default((float)vos->mval[0]+vos->xoffs, (float)vos->mval[1], (depth_write)? 0.0f: 2.0f, vos->str); + if(vos->flag & V3D_CACHE_TEXT_ASCII) { + BLF_draw_default_ascii((float)vos->mval[0]+vos->xoffs, (float)vos->mval[1], (depth_write)? 0.0f: 2.0f, str); + } + else { + BLF_draw_default((float)vos->mval[0]+vos->xoffs, (float)vos->mval[1], (depth_write)? 0.0f: 2.0f, str); + } } } @@ -1809,8 +1818,9 @@ static void draw_dm_edges_sel_interp__setDrawInterpOptions(void *userData, int i static void draw_dm_edges_sel_interp(DerivedMesh *dm, unsigned char *baseCol, unsigned char *selCol) { - unsigned char *cols[2] = {baseCol, selCol}; - + unsigned char *cols[2]; + cols[0]= baseCol; + cols[1]= selCol; dm->drawMappedEdgesInterp(dm, draw_dm_edges_sel_interp__setDrawOptions, draw_dm_edges_sel_interp__setDrawInterpOptions, cols); } @@ -2113,7 +2123,7 @@ static void draw_em_measure_stats(View3D *v3d, RegionView3D *rv3d, Object *ob, E else sprintf(val, conv_float, len_v3v3(v1, v2)); - view3d_cached_text_draw_add(vmid, val, 0, 0); + view3d_cached_text_draw_add(vmid, val, 0, V3D_CACHE_TEXT_ASCII); } } } @@ -2152,7 +2162,7 @@ static void draw_em_measure_stats(View3D *v3d, RegionView3D *rv3d, Object *ob, E else sprintf(val, conv_float, area); - view3d_cached_text_draw_add(efa->cent, val, 0, 0); + view3d_cached_text_draw_add(efa->cent, val, 0, V3D_CACHE_TEXT_ASCII); } } } @@ -2194,13 +2204,13 @@ static void draw_em_measure_stats(View3D *v3d, RegionView3D *rv3d, Object *ob, E /* Vec 1 */ sprintf(val,"%.3f", RAD2DEG(angle_v3v3v3(v4, v1, v2))); interp_v3_v3v3(fvec, efa->cent, efa->v1->co, 0.8f); - view3d_cached_text_draw_add(fvec, val, 0, 0); + view3d_cached_text_draw_add(fvec, val, 0, V3D_CACHE_TEXT_ASCII); } if( (e1->f & e2->f & SELECT) || (do_moving && (efa->v2->f & SELECT)) ) { /* Vec 2 */ sprintf(val,"%.3f", RAD2DEG(angle_v3v3v3(v1, v2, v3))); interp_v3_v3v3(fvec, efa->cent, efa->v2->co, 0.8f); - view3d_cached_text_draw_add(fvec, val, 0, 0); + view3d_cached_text_draw_add(fvec, val, 0, V3D_CACHE_TEXT_ASCII); } if( (e2->f & e3->f & SELECT) || (do_moving && (efa->v3->f & SELECT)) ) { /* Vec 3 */ @@ -2209,14 +2219,14 @@ static void draw_em_measure_stats(View3D *v3d, RegionView3D *rv3d, Object *ob, E else sprintf(val,"%.3f", RAD2DEG(angle_v3v3v3(v2, v3, v1))); interp_v3_v3v3(fvec, efa->cent, efa->v3->co, 0.8f); - view3d_cached_text_draw_add(fvec, val, 0, 0); + view3d_cached_text_draw_add(fvec, val, 0, V3D_CACHE_TEXT_ASCII); } /* Vec 4 */ if(efa->v4) { if( (e3->f & e4->f & SELECT) || (do_moving && (efa->v4->f & SELECT)) ) { sprintf(val,"%.3f", RAD2DEG(angle_v3v3v3(v3, v4, v1))); interp_v3_v3v3(fvec, efa->cent, efa->v4->co, 0.8f); - view3d_cached_text_draw_add(fvec, val, 0, 0); + view3d_cached_text_draw_add(fvec, val, 0, V3D_CACHE_TEXT_ASCII); } } } @@ -3827,16 +3837,24 @@ static void draw_new_particle_system(Scene *scene, View3D *v3d, RegionView3D *rv char *val_pos= val; val[0]= '\0'; - if(part->draw&PART_DRAW_NUM) - val_pos += sprintf(val, "%i", a); - - if((part->draw & PART_DRAW_HEALTH) && a < totpart && part->phystype==PART_PHYS_BOIDS) - sprintf(val_pos, (val_pos==val) ? "%.2f" : ":%.2f", pa_health); + if(part->draw&PART_DRAW_NUM) { + if(a < totpart && (part->draw & PART_DRAW_HEALTH) && (part->phystype==PART_PHYS_BOIDS)) { + sprintf(val_pos, "%d:%.2f", a, pa_health); + } + else { + sprintf(val_pos, "%d", a); + } + } + else { + if(a < totpart && (part->draw & PART_DRAW_HEALTH) && (part->phystype==PART_PHYS_BOIDS)) { + sprintf(val_pos, "%.2f", pa_health); + } + } /* in path drawing state.co is the end point */ /* use worldspace beause object matrix is already applied */ mul_v3_m4v3(vec_txt, ob->imat, state.co); - view3d_cached_text_draw_add(vec_txt, val, 10, V3D_CACHE_TEXT_WORLDSPACE); + view3d_cached_text_draw_add(vec_txt, val, 10, V3D_CACHE_TEXT_WORLDSPACE|V3D_CACHE_TEXT_ASCII); } } } @@ -3925,12 +3943,10 @@ static void draw_new_particle_system(Scene *scene, View3D *v3d, RegionView3D *rv for(a=0, pa=psys->particles; aimat, cache[a]->co); - view3d_cached_text_draw_add(vec_txt, val, 10, V3D_CACHE_TEXT_WORLDSPACE); + view3d_cached_text_draw_add(vec_txt, val, 10, V3D_CACHE_TEXT_WORLDSPACE|V3D_CACHE_TEXT_ASCII); } } } @@ -5513,11 +5529,11 @@ void drawRBpivot(bRigidBodyJointConstraint *data) glVertex3fv(v); glEnd(); if (axis==0) - view3d_cached_text_draw_add(v, "px", 0, 0); + view3d_cached_text_draw_add(v, "px", 0, V3D_CACHE_TEXT_ASCII); else if (axis==1) - view3d_cached_text_draw_add(v, "py", 0, 0); + view3d_cached_text_draw_add(v, "py", 0, V3D_CACHE_TEXT_ASCII); else - view3d_cached_text_draw_add(v, "pz", 0, 0); + view3d_cached_text_draw_add(v, "pz", 0, V3D_CACHE_TEXT_ASCII); } glLineWidth (1.0f); setlinestyle(0); diff --git a/source/blender/editors/space_view3d/view3d_intern.h b/source/blender/editors/space_view3d/view3d_intern.h index 0d8b97a66ed..92167f0f45e 100644 --- a/source/blender/editors/space_view3d/view3d_intern.h +++ b/source/blender/editors/space_view3d/view3d_intern.h @@ -115,8 +115,9 @@ void drawaxes(float size, char drawtype); void view3d_cached_text_draw_begin(void); void view3d_cached_text_draw_add(const float co[3], const char *str, short xoffs, short flag); void view3d_cached_text_draw_end(View3D *v3d, ARegion *ar, int depth_write, float mat[][4]); -#define V3D_CACHE_TEXT_ZBUF 1 -#define V3D_CACHE_TEXT_WORLDSPACE 2 +#define V3D_CACHE_TEXT_ZBUF (1<<0) +#define V3D_CACHE_TEXT_WORLDSPACE (1<<1) +#define V3D_CACHE_TEXT_ASCII (1<<2) /* drawarmature.c */ int draw_armature(Scene *scene, View3D *v3d, ARegion *ar, Base *base, int dt, int flag); -- cgit v1.2.3 From 73f21f20b789ed1474274b0d27778eede4108569 Mon Sep 17 00:00:00 2001 From: Nathan Letwory Date: Sun, 31 Oct 2010 01:18:26 +0000 Subject: Lock to Cursor Patch by Dan Eicher. In 3dview properties you can enable this. Rotating view then uses cursor as pivot point. Note that with this option enabled just relocating the 3d cursor also changes the 3dview. MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Sebastian König: "Now the 3d cursor is actually useful" (sitting next to me while applying patch at bconf hostel) --- source/blender/editors/space_view3d/view3d_view.c | 5 +++++ 1 file changed, 5 insertions(+) (limited to 'source/blender/editors/space_view3d') diff --git a/source/blender/editors/space_view3d/view3d_view.c b/source/blender/editors/space_view3d/view3d_view.c index 6cbce905f33..f876e420d89 100644 --- a/source/blender/editors/space_view3d/view3d_view.c +++ b/source/blender/editors/space_view3d/view3d_view.c @@ -1205,6 +1205,11 @@ void setviewmatrixview3d(Scene *scene, View3D *v3d, RegionView3D *rv3d) } translate_m4( rv3d->viewmat,-vec[0], -vec[1], -vec[2]); } + else if (v3d->ob_centre_cursor) { + float vec[3]; + copy_v3_v3(vec, give_cursor(scene, v3d)); + translate_m4(rv3d->viewmat, -vec[0], -vec[1], -vec[2]); + } else translate_m4( rv3d->viewmat,rv3d->ofs[0], rv3d->ofs[1], rv3d->ofs[2]); } } -- cgit v1.2.3 From 50dab4fc37d33352c2f1c6181da9d54799e36a12 Mon Sep 17 00:00:00 2001 From: Campbell Barton Date: Sun, 31 Oct 2010 03:20:33 +0000 Subject: rename definition for enabling the game engine GAMEBLENDER==1 --> WITH_GAMEENGINE --- source/blender/editors/space_view3d/CMakeLists.txt | 2 +- source/blender/editors/space_view3d/SConscript | 2 +- source/blender/editors/space_view3d/view3d_view.c | 8 ++++---- 3 files changed, 6 insertions(+), 6 deletions(-) (limited to 'source/blender/editors/space_view3d') diff --git a/source/blender/editors/space_view3d/CMakeLists.txt b/source/blender/editors/space_view3d/CMakeLists.txt index fb086013798..e9ed8335061 100644 --- a/source/blender/editors/space_view3d/CMakeLists.txt +++ b/source/blender/editors/space_view3d/CMakeLists.txt @@ -55,7 +55,7 @@ SET(SRC IF(WITH_GAMEENGINE) LIST(APPEND INC ../../../kernel/gen_system) - ADD_DEFINITIONS(-DGAMEBLENDER) + ADD_DEFINITIONS(-DWITH_GAMEENGINE) ENDIF(WITH_GAMEENGINE) IF(WIN32) diff --git a/source/blender/editors/space_view3d/SConscript b/source/blender/editors/space_view3d/SConscript index d9074113ba9..bb32f8b926e 100644 --- a/source/blender/editors/space_view3d/SConscript +++ b/source/blender/editors/space_view3d/SConscript @@ -12,7 +12,7 @@ incs += ' #/intern/smoke/extern' incs += ' #source/kernel/gen_system' if env['WITH_BF_GAMEENGINE']: - defs.append('GAMEBLENDER=1') + defs.append('WITH_GAMEENGINE') if env['OURPLATFORM'] in ('win32-vc', 'win32-mingw', 'linuxcross', 'win64-vc'): incs += ' ' + env['BF_PTHREADS_INC'] diff --git a/source/blender/editors/space_view3d/view3d_view.c b/source/blender/editors/space_view3d/view3d_view.c index f876e420d89..089658c6953 100644 --- a/source/blender/editors/space_view3d/view3d_view.c +++ b/source/blender/editors/space_view3d/view3d_view.c @@ -56,7 +56,7 @@ #include "ED_screen.h" #include "ED_armature.h" -#if GAMEBLENDER == 1 +#ifdef WITH_GAMEENGINE #include "SYS_System.h" #endif @@ -1609,7 +1609,7 @@ void VIEW3D_OT_localview(wmOperatorType *ot) ot->poll= ED_operator_view3d_active; } -#if GAMEBLENDER == 1 +#ifdef WITH_GAMEENGINE static ListBase queue_back; static void SaveState(bContext *C) @@ -1701,7 +1701,7 @@ void game_set_commmandline_options(GameData *gm) /* maybe we need this defined somewhere else */ extern void StartKetsjiShell(struct bContext *C, struct ARegion *ar, rcti *cam_frame, int always_use_expand_framing); -#endif // GAMEBLENDER == 1 +#endif // WITH_GAMEENGINE int game_engine_poll(bContext *C) { @@ -1753,7 +1753,7 @@ int ED_view3d_context_activate(bContext *C) static int game_engine_exec(bContext *C, wmOperator *op) { -#if GAMEBLENDER == 1 +#ifdef WITH_GAMEENGINE Scene *startscene = CTX_data_scene(C); ScrArea *sa, *prevsa= CTX_wm_area(C); ARegion *ar, *prevar= CTX_wm_region(C); -- cgit v1.2.3 From 3367ef8b6591b62b1b76f07fccb310485f6d45c7 Mon Sep 17 00:00:00 2001 From: Campbell Barton Date: Sun, 31 Oct 2010 15:39:37 +0000 Subject: initialize structs to zero rather then using memset(). --- source/blender/editors/space_view3d/view3d_draw.c | 17 +++++------------ source/blender/editors/space_view3d/view3d_view.c | 3 +-- 2 files changed, 6 insertions(+), 14 deletions(-) (limited to 'source/blender/editors/space_view3d') diff --git a/source/blender/editors/space_view3d/view3d_draw.c b/source/blender/editors/space_view3d/view3d_draw.c index de373d54be6..b8fff234347 100644 --- a/source/blender/editors/space_view3d/view3d_draw.c +++ b/source/blender/editors/space_view3d/view3d_draw.c @@ -1871,8 +1871,6 @@ static void gpu_update_lamps_shadows(Scene *scene, View3D *v3d) Scene *sce; Base *base; Object *ob; - ARegion ar; - RegionView3D rv3d; shadows.first= shadows.last= NULL; @@ -1901,6 +1899,8 @@ static void gpu_update_lamps_shadows(Scene *scene, View3D *v3d) /* this needs to be done better .. */ float viewmat[4][4], winmat[4][4]; int drawtype, lay, winsize, flag2=v3d->flag2; + ARegion ar= {0}; + RegionView3D rv3d= {{{0}}}; drawtype= v3d->drawtype; lay= v3d->lay; @@ -1912,9 +1912,6 @@ static void gpu_update_lamps_shadows(Scene *scene, View3D *v3d) GPU_lamp_shadow_buffer_bind(shadow->lamp, viewmat, &winsize, winmat); - memset(&ar, 0, sizeof(ar)); - memset(&rv3d, 0, sizeof(rv3d)); - ar.regiondata= &rv3d; ar.regiontype= RGN_TYPE_WINDOW; rv3d.persp= RV3D_CAMOB; @@ -2180,13 +2177,9 @@ ImBuf *ED_view3d_draw_offscreen_imbuf(Scene *scene, View3D *v3d, ARegion *ar, in /* creates own 3d views, used by the sequencer */ ImBuf *ED_view3d_draw_offscreen_imbuf_simple(Scene *scene, int width, int height, unsigned int flag, int drawtype) { - View3D v3d; - ARegion ar; - RegionView3D rv3d; - - memset(&v3d, 0, sizeof(v3d)); - memset(&ar, 0, sizeof(ar)); - memset(&rv3d, 0, sizeof(rv3d)); + View3D v3d= {0}; + ARegion ar= {0}; + RegionView3D rv3d= {{{0}}}; /* connect data */ v3d.regionbase.first= v3d.regionbase.last= &ar; diff --git a/source/blender/editors/space_view3d/view3d_view.c b/source/blender/editors/space_view3d/view3d_view.c index 089658c6953..8d6eec3285c 100644 --- a/source/blender/editors/space_view3d/view3d_view.c +++ b/source/blender/editors/space_view3d/view3d_view.c @@ -175,10 +175,9 @@ void smooth_view(bContext *C, Object *oldcamera, Object *camera, float *ofs, flo { View3D *v3d = CTX_wm_view3d(C); RegionView3D *rv3d= CTX_wm_region_view3d(C); - struct SmoothViewStore sms; + struct SmoothViewStore sms= {0}; /* initialize sms */ - memset(&sms,0,sizeof(struct SmoothViewStore)); copy_v3_v3(sms.new_ofs, rv3d->ofs); copy_qt_qt(sms.new_quat, rv3d->viewquat); sms.new_dist= rv3d->dist; -- cgit v1.2.3 From 8bbcef4c7a377045f6b93580efda93eb4adf800d Mon Sep 17 00:00:00 2001 From: Campbell Barton Date: Mon, 1 Nov 2010 02:22:20 +0000 Subject: bugfix [#24449] User Preferences - Interface - Manipulator --- source/blender/editors/space_view3d/space_view3d.c | 1 + 1 file changed, 1 insertion(+) (limited to 'source/blender/editors/space_view3d') diff --git a/source/blender/editors/space_view3d/space_view3d.c b/source/blender/editors/space_view3d/space_view3d.c index 77f6e63e860..22143db7769 100644 --- a/source/blender/editors/space_view3d/space_view3d.c +++ b/source/blender/editors/space_view3d/space_view3d.c @@ -206,6 +206,7 @@ static SpaceLink *view3d_new(const bContext *C) v3d->near= 0.01f; v3d->far= 500.0f; + v3d->twflag |= U.tw_flag & V3D_USE_MANIPULATOR; v3d->twtype= V3D_MANIP_TRANSLATE; v3d->around= V3D_CENTROID; -- cgit v1.2.3 From daa4feaaeae4312eb23f66b948b668a7e9dc1959 Mon Sep 17 00:00:00 2001 From: Campbell Barton Date: Mon, 1 Nov 2010 07:19:41 +0000 Subject: bugfix [#24477] Can easily create bones with duplicate names - fixed this error 7 different functions (deform groups, uv layers & similar). - support for numbers over 999. - renamed splitIDname() to BLI_split_name_num(), moved to BLI_path_utils --- source/blender/editors/space_view3d/space_view3d.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) (limited to 'source/blender/editors/space_view3d') diff --git a/source/blender/editors/space_view3d/space_view3d.c b/source/blender/editors/space_view3d/space_view3d.c index 22143db7769..f5c1612f786 100644 --- a/source/blender/editors/space_view3d/space_view3d.c +++ b/source/blender/editors/space_view3d/space_view3d.c @@ -191,7 +191,7 @@ static SpaceLink *view3d_new(const bContext *C) v3d->lay= v3d->layact= scene->lay; v3d->camera= scene->camera; } - v3d->scenelock= 1; + v3d->scenelock= TRUE; v3d->grid= 1.0f; v3d->gridlines= 16; v3d->gridsubdiv = 10; @@ -250,8 +250,8 @@ static SpaceLink *view3d_new(const bContext *C) ar->regiondata= MEM_callocN(sizeof(RegionView3D), "region view3d"); rv3d= ar->regiondata; rv3d->viewquat[0]= 1.0f; - rv3d->persp= 1; - rv3d->view= 7; + rv3d->persp= RV3D_PERSP; + rv3d->view= RV3D_VIEW_PERSPORTHO; rv3d->dist= 10.0; return (SpaceLink *)v3d; -- cgit v1.2.3 From 6b767b8018cbf5ca5657cad842271d8d6327ddd0 Mon Sep 17 00:00:00 2001 From: Campbell Barton Date: Wed, 3 Nov 2010 01:56:02 +0000 Subject: fix [#24499] Consistency Issue with LassoSelect/ExtendOption Added extend option to lasso. also... - selecting bones wasn't checking their layer of if they were hidden in a number of places. - fixed memory leak. small unrealed changes - added PBONE_VISIBLE macro - renamed functions used for paint selectoin from *_tface to paintface_*. sine they no longer have anything todo with tface's. - removed scanfill include from BLI_blenlib.h, this is only used in very few places and quite specific. Noticed lasso select is broken for metaballs and face mask mode but this has been the case for a while, will look into it next. --- source/blender/editors/space_view3d/drawarmature.c | 4 +- source/blender/editors/space_view3d/view3d_edit.c | 2 +- .../blender/editors/space_view3d/view3d_select.c | 682 +++++++++++---------- 3 files changed, 371 insertions(+), 317 deletions(-) (limited to 'source/blender/editors/space_view3d') diff --git a/source/blender/editors/space_view3d/drawarmature.c b/source/blender/editors/space_view3d/drawarmature.c index 33776abf4a0..8cfb11478be 100644 --- a/source/blender/editors/space_view3d/drawarmature.c +++ b/source/blender/editors/space_view3d/drawarmature.c @@ -1979,7 +1979,7 @@ static void draw_ebones(View3D *v3d, ARegion *ar, Object *ob, int dt) /* catch exception for bone with hidden parent */ flag= eBone->flag; - if ( (eBone->parent) && ((eBone->parent->flag & BONE_HIDDEN_A) || (eBone->parent->layer & arm->layer)==0) ) + if ( (eBone->parent) && !EBONE_VISIBLE(arm, eBone->parent)) flag &= ~BONE_CONNECTED; /* set temporary flag for drawing bone as active, but only if selected */ @@ -2018,7 +2018,7 @@ static void draw_ebones(View3D *v3d, ARegion *ar, Object *ob, int dt) /* catch exception for bone with hidden parent */ flag= eBone->flag; - if ( (eBone->parent) && ((eBone->parent->flag & BONE_HIDDEN_A) || (eBone->parent->layer & arm->layer)==0) ) + if ( (eBone->parent) && !EBONE_VISIBLE(arm, eBone->parent)) flag &= ~BONE_CONNECTED; /* set temporary flag for drawing bone as active, but only if selected */ diff --git a/source/blender/editors/space_view3d/view3d_edit.c b/source/blender/editors/space_view3d/view3d_edit.c index a70774f27ce..d706dc27404 100644 --- a/source/blender/editors/space_view3d/view3d_edit.c +++ b/source/blender/editors/space_view3d/view3d_edit.c @@ -1432,7 +1432,7 @@ static int viewselected_exec(bContext *C, wmOperator *UNUSED(op)) /* like a loca } } else if (paint_facesel_test(ob)) { - ok= minmax_tface(ob, min, max); + ok= paintface_minmax(ob, min, max); } else if (ob && (ob->mode & OB_MODE_PARTICLE_EDIT)) { ok= PE_minmax(scene, min, max); diff --git a/source/blender/editors/space_view3d/view3d_select.c b/source/blender/editors/space_view3d/view3d_select.c index e3212e8a3d1..bfc24e80f4c 100644 --- a/source/blender/editors/space_view3d/view3d_select.c +++ b/source/blender/editors/space_view3d/view3d_select.c @@ -30,6 +30,7 @@ #include #include #include +#include #include "DNA_armature_types.h" #include "DNA_curve_types.h" @@ -48,6 +49,7 @@ #include "BKE_context.h" #include "BKE_paint.h" +#include "BKE_armature.h" #include "BIF_gl.h" @@ -345,18 +347,21 @@ static void do_lasso_select_pose(ViewContext *vc, Object *ob, short mcords[][2], bPoseChannel *pchan; float vec[3]; short sco1[2], sco2[2]; + bArmature *arm= ob->data; if(ob->type!=OB_ARMATURE || ob->pose==NULL) return; - + for(pchan= ob->pose->chanbase.first; pchan; pchan= pchan->next) { - mul_v3_m4v3(vec, ob->obmat, pchan->pose_head); - project_short(vc->ar, vec, sco1); - mul_v3_m4v3(vec, ob->obmat, pchan->pose_tail); - project_short(vc->ar, vec, sco2); - - if(lasso_inside_edge(mcords, moves, sco1[0], sco1[1], sco2[0], sco2[1])) { - if(select) pchan->bone->flag |= BONE_SELECTED; - else pchan->bone->flag &= ~BONE_SELECTED; + if (PBONE_VISIBLE(arm, pchan->bone) && (pchan->bone->flag & BONE_UNSELECTABLE)==0) { + mul_v3_m4v3(vec, ob->obmat, pchan->pose_head); + project_short(vc->ar, vec, sco1); + mul_v3_m4v3(vec, ob->obmat, pchan->pose_tail); + project_short(vc->ar, vec, sco2); + + if(lasso_inside_edge(mcords, moves, sco1[0], sco1[1], sco2[0], sco2[1])) { + if(select) pchan->bone->flag |= BONE_SELECTED; + else pchan->bone->flag &= ~BONE_SELECTED; + } } } @@ -368,11 +373,24 @@ static void do_lasso_select_pose(ViewContext *vc, Object *ob, short mcords[][2], } } +static void object_deselect_all_visible(Scene *scene, View3D *v3d) +{ + Base *base; -static void do_lasso_select_objects(ViewContext *vc, short mcords[][2], short moves, short select) + for(base= scene->base.first; base; base= base->next) { + if(BASE_SELECTABLE(v3d, base)) { + ED_base_object_select(base, BA_DESELECT); + } + } +} + +static void do_lasso_select_objects(ViewContext *vc, short mcords[][2], short moves, short extend, short select) { Base *base; + if (extend == 0 && select) + object_deselect_all_visible(vc->scene, vc->v3d); + for(base= vc->scene->base.first; base; base= base->next) { if(BASE_SELECTABLE(vc->v3d, base)) { /* use this to avoid un-needed lasso lookups */ project_short(vc->ar, base->object->obmat[3], &base->sx); @@ -389,7 +407,7 @@ static void do_lasso_select_objects(ViewContext *vc, short mcords[][2], short mo } } -void lasso_select_boundbox(rcti *rect, short mcords[][2], short moves) +static void lasso_select_boundbox(rcti *rect, short mcords[][2], short moves) { short a; @@ -440,7 +458,7 @@ static void do_lasso_select_mesh__doSelectFace(void *userData, EditFace *efa, in } } -static void do_lasso_select_mesh(ViewContext *vc, short mcords[][2], short moves, short select) +static void do_lasso_select_mesh(ViewContext *vc, short mcords[][2], short moves, short extend, short select) { struct { ViewContext vc; rcti *rect; short (*mcords)[2], moves, select, pass, done; } data; ToolSettings *ts= vc->scene->toolsettings; @@ -460,8 +478,11 @@ static void do_lasso_select_mesh(ViewContext *vc, short mcords[][2], short moves data.done = 0; data.pass = 0; + if (extend == 0 && select) + EM_deselect_all(vc->em); + /* workaround: init mats first, EM_mask_init_backbuf_border can change - view matrix to pixel space, breaking edge select with backbuf. fixes bug #20936 */ + view matrix to pixel space, breaking edge select with backbuf. fixes bug [#20936] */ /* [#21018] breaks zbuf select. run below. only if bbsel fails */ /* ED_view3d_init_mats_rv3d(vc->obedit, vc->rv3d) */ @@ -589,7 +610,7 @@ static void do_lasso_select_curve__doSelect(void *userData, Nurb *UNUSED(nu), BP } } -static void do_lasso_select_curve(ViewContext *vc, short mcords[][2], short moves, short select) +static void do_lasso_select_curve(ViewContext *vc, short mcords[][2], short moves, short extend, short select) { struct { ViewContext *vc; short (*mcords)[2]; short moves; short select; } data; @@ -599,6 +620,9 @@ static void do_lasso_select_curve(ViewContext *vc, short mcords[][2], short move data.moves = moves; data.select = select; + if (extend == 0 && select) + CU_deselect_all(vc->obedit); + ED_view3d_init_mats_rv3d(vc->obedit, vc->rv3d); /* for foreach's screen/vert projection */ nurbs_foreachScreenVert(vc, do_lasso_select_curve__doSelect, &data); } @@ -611,7 +635,7 @@ static void do_lasso_select_lattice__doSelect(void *userData, BPoint *bp, int x, bp->f1 = data->select?(bp->f1|SELECT):(bp->f1&~SELECT); } } -static void do_lasso_select_lattice(ViewContext *vc, short mcords[][2], short moves, short select) +static void do_lasso_select_lattice(ViewContext *vc, short mcords[][2], short moves, short extend, short select) { struct { short (*mcords)[2]; short moves; short select; } data; @@ -620,45 +644,52 @@ static void do_lasso_select_lattice(ViewContext *vc, short mcords[][2], short mo data.moves = moves; data.select = select; + if (extend == 0 && select) + ED_setflagsLatt(vc->obedit, 0); + ED_view3d_init_mats_rv3d(vc->obedit, vc->rv3d); /* for foreach's screen/vert projection */ lattice_foreachScreenVert(vc, do_lasso_select_lattice__doSelect, &data); } -static void do_lasso_select_armature(ViewContext *vc, short mcords[][2], short moves, short select) +static void do_lasso_select_armature(ViewContext *vc, short mcords[][2], short moves, short extend, short select) { bArmature *arm= vc->obedit->data; EditBone *ebone; float vec[3]; short sco1[2], sco2[2], didpoint; int change= FALSE; - + + if (extend==0 && select) + ED_armature_deselect_all_visible(vc->obedit); + /* set editdata in vc */ for (ebone= arm->edbo->first; ebone; ebone=ebone->next) { - - mul_v3_m4v3(vec, vc->obedit->obmat, ebone->head); - project_short(vc->ar, vec, sco1); - mul_v3_m4v3(vec, vc->obedit->obmat, ebone->tail); - project_short(vc->ar, vec, sco2); - - didpoint= 0; - if(lasso_inside(mcords, moves, sco1[0], sco1[1])) { - if(select) ebone->flag |= BONE_ROOTSEL; - else ebone->flag &= ~BONE_ROOTSEL; - didpoint= 1; - change= TRUE; - } - if(lasso_inside(mcords, moves, sco2[0], sco2[1])) { - if(select) ebone->flag |= BONE_TIPSEL; - else ebone->flag &= ~BONE_TIPSEL; - didpoint= 1; - change= TRUE; - } - /* if one of points selected, we skip the bone itself */ - if(didpoint==0 && lasso_inside_edge(mcords, moves, sco1[0], sco1[1], sco2[0], sco2[1])) { - if(select) ebone->flag |= BONE_TIPSEL|BONE_ROOTSEL|BONE_SELECTED; - else ebone->flag &= ~(BONE_SELECTED|BONE_TIPSEL|BONE_ROOTSEL); - change= TRUE; + if (EBONE_VISIBLE(arm, ebone) && (ebone->flag & BONE_UNSELECTABLE)==0) { + mul_v3_m4v3(vec, vc->obedit->obmat, ebone->head); + project_short(vc->ar, vec, sco1); + mul_v3_m4v3(vec, vc->obedit->obmat, ebone->tail); + project_short(vc->ar, vec, sco2); + + didpoint= 0; + if(lasso_inside(mcords, moves, sco1[0], sco1[1])) { + if(select) ebone->flag |= BONE_ROOTSEL; + else ebone->flag &= ~BONE_ROOTSEL; + didpoint= 1; + change= TRUE; + } + if(lasso_inside(mcords, moves, sco2[0], sco2[1])) { + if(select) ebone->flag |= BONE_TIPSEL; + else ebone->flag &= ~BONE_TIPSEL; + didpoint= 1; + change= TRUE; + } + /* if one of points selected, we skip the bone itself */ + if(didpoint==0 && lasso_inside_edge(mcords, moves, sco1[0], sco1[1], sco2[0], sco2[1])) { + if(select) ebone->flag |= BONE_TIPSEL|BONE_ROOTSEL|BONE_SELECTED; + else ebone->flag &= ~(BONE_SELECTED|BONE_TIPSEL|BONE_ROOTSEL); + change= TRUE; + } } } @@ -669,25 +700,28 @@ static void do_lasso_select_armature(ViewContext *vc, short mcords[][2], short m } } -static void do_lasso_select_facemode(ViewContext *vc, short mcords[][2], short moves, short select) +static void do_lasso_select_paintface(ViewContext *vc, short mcords[][2], short moves, short extend, short select) { Object *ob= vc->obact; Mesh *me= ob?ob->data:NULL; rcti rect; - if(me==NULL || me->mtface==NULL) return; - if(me->totface==0) return; - + if(me==NULL || me->mtface==NULL || me->totface) + return; + + if(extend==0 && select) + paintface_deselect_all_visible(ob, SEL_DESELECT, FALSE); /* flush selection at the end */ + em_vertoffs= me->totface+1; /* max index array */ - + lasso_select_boundbox(&rect, mcords, moves); EM_mask_init_backbuf_border(vc, mcords, moves, rect.xmin, rect.ymin, rect.xmax, rect.ymax); EM_backbuf_checkAndSelectTFaces(me, select); - + EM_free_backbuf(); - -// XXX object_tface_flags_changed(ob, 0); + + paintface_flush_flags(ob); } #if 0 @@ -721,31 +755,31 @@ static void do_lasso_select_node(short mcords[][2], short moves, short select) } #endif -void view3d_lasso_select(bContext *C, ViewContext *vc, short mcords[][2], short moves, short select) +static void view3d_lasso_select(bContext *C, ViewContext *vc, short mcords[][2], short moves, short extend, short select) { Object *ob = CTX_data_active_object(C); if(vc->obedit==NULL) { /* Object Mode */ if(paint_facesel_test(ob)) - do_lasso_select_facemode(vc, mcords, moves, select); + do_lasso_select_paintface(vc, mcords, moves, extend, select); else if(ob && ob->mode & (OB_MODE_VERTEX_PAINT|OB_MODE_WEIGHT_PAINT|OB_MODE_TEXTURE_PAINT)) ; else if(ob && ob->mode & OB_MODE_PARTICLE_EDIT) - PE_lasso_select(C, mcords, moves, select); + PE_lasso_select(C, mcords, moves, extend, select); else { - do_lasso_select_objects(vc, mcords, moves, select); + do_lasso_select_objects(vc, mcords, moves, extend, select); WM_event_add_notifier(C, NC_SCENE|ND_OB_SELECT, vc->scene); } } else { /* Edit Mode */ if(vc->obedit->type==OB_MESH) - do_lasso_select_mesh(vc, mcords, moves, select); + do_lasso_select_mesh(vc, mcords, moves, extend, select); else if(vc->obedit->type==OB_CURVE || vc->obedit->type==OB_SURF) - do_lasso_select_curve(vc, mcords, moves, select); + do_lasso_select_curve(vc, mcords, moves, extend, select); else if(vc->obedit->type==OB_LATTICE) - do_lasso_select_lattice(vc, mcords, moves, select); + do_lasso_select_lattice(vc, mcords, moves, extend, select); else if(vc->obedit->type==OB_ARMATURE) - do_lasso_select_armature(vc, mcords, moves, select); + do_lasso_select_armature(vc, mcords, moves, extend, select); WM_event_add_notifier(C, NC_GEOM|ND_SELECT, vc->obedit->data); } @@ -757,7 +791,7 @@ void view3d_lasso_select(bContext *C, ViewContext *vc, short mcords[][2], short static int view3d_lasso_select_exec(bContext *C, wmOperator *op) { ViewContext vc; - int select, i= 0; + int i= 0; short mcords[1024][2]; RNA_BEGIN(op->ptr, itemptr, "path") { @@ -772,13 +806,15 @@ static int view3d_lasso_select_exec(bContext *C, wmOperator *op) RNA_END; if(i>1) { + short extend, select; view3d_operator_needs_opengl(C); /* setup view context for argument to callbacks */ view3d_set_viewcontext(C, &vc); + extend= RNA_boolean_get(op->ptr, "extend"); select= !RNA_boolean_get(op->ptr, "deselect"); - view3d_lasso_select(C, &vc, mcords, i, select); + view3d_lasso_select(C, &vc, mcords, i, extend, select); return OPERATOR_FINISHED; } @@ -801,6 +837,7 @@ void VIEW3D_OT_select_lasso(wmOperatorType *ot) RNA_def_collection_runtime(ot->srna, "path", &RNA_OperatorMousePath, "Path", ""); RNA_def_boolean(ot->srna, "deselect", 0, "Deselect", "Deselect rather than select items."); + RNA_def_boolean(ot->srna, "extend", 1, "Extend", "Extend selection instead of deselecting everything first."); } @@ -1319,7 +1356,7 @@ static void do_nurbs_box_select__doSelect(void *userData, Nurb *UNUSED(nu), BPoi } } } -static void do_nurbs_box_select(ViewContext *vc, rcti *rect, int select, int extend) +static int do_nurbs_box_select(ViewContext *vc, rcti *rect, int select, int extend) { struct { ViewContext *vc; rcti *rect; int select; } data; @@ -1327,12 +1364,13 @@ static void do_nurbs_box_select(ViewContext *vc, rcti *rect, int select, int ext data.rect = rect; data.select = select; - if (extend == 0 && select) { + if (extend == 0 && select) CU_deselect_all(vc->obedit); - } ED_view3d_init_mats_rv3d(vc->obedit, vc->rv3d); /* for foreach's screen/vert projection */ nurbs_foreachScreenVert(vc, do_nurbs_box_select__doSelect, &data); + + return OPERATOR_FINISHED; } static void do_lattice_box_select__doSelect(void *userData, BPoint *bp, int x, int y) @@ -1343,7 +1381,7 @@ static void do_lattice_box_select__doSelect(void *userData, BPoint *bp, int x, i bp->f1 = data->select?(bp->f1|SELECT):(bp->f1&~SELECT); } } -static void do_lattice_box_select(ViewContext *vc, rcti *rect, int select, int extend) +static int do_lattice_box_select(ViewContext *vc, rcti *rect, int select, int extend) { struct { ViewContext vc; rcti *rect; int select, pass, done; } data; @@ -1351,12 +1389,13 @@ static void do_lattice_box_select(ViewContext *vc, rcti *rect, int select, int e data.rect = rect; data.select = select; - if (extend == 0 && select) { + if (extend == 0 && select) ED_setflagsLatt(vc->obedit, 0); - } ED_view3d_init_mats_rv3d(vc->obedit, vc->rv3d); /* for foreach's screen/vert projection */ lattice_foreachScreenVert(vc, do_lattice_box_select__doSelect, &data); + + return OPERATOR_FINISHED; } static void do_mesh_box_select__doSelectVert(void *userData, EditVert *eve, int x, int y, int UNUSED(index)) @@ -1392,7 +1431,7 @@ static void do_mesh_box_select__doSelectFace(void *userData, EditFace *efa, int EM_select_face_fgon(data->vc.em, efa, data->select); } } -static void do_mesh_box_select(ViewContext *vc, rcti *rect, int select, int extend) +static int do_mesh_box_select(ViewContext *vc, rcti *rect, int select, int extend) { struct { ViewContext vc; rcti *rect; short select, pass, done; } data; ToolSettings *ts= vc->scene->toolsettings; @@ -1405,9 +1444,7 @@ static void do_mesh_box_select(ViewContext *vc, rcti *rect, int select, int exte data.done = 0; if (extend == 0 && select) - { EM_deselect_all(vc->em); - } /* workaround: init mats first, EM_mask_init_backbuf_border can change view matrix to pixel space, breaking edge select with backbuf. fixes bug #20936 */ @@ -1451,261 +1488,280 @@ static void do_mesh_box_select(ViewContext *vc, rcti *rect, int select, int exte EM_free_backbuf(); EM_selectmode_flush(vc->em); + + return OPERATOR_FINISHED; } -static int view3d_borderselect_exec(bContext *C, wmOperator *op) +static int do_meta_box_select(ViewContext *vc, rcti *rect, int select, int extend) { - ViewContext vc; - Scene *scene= CTX_data_scene(C); - ScrArea *sa= CTX_wm_area(C); - View3D *v3d= sa->spacedata.first; - Object *obedit= CTX_data_edit_object(C); - Object *obact= CTX_data_active_object(C); - rcti rect; - Base *base; + MetaBall *mb = (MetaBall*)vc->obedit->data; MetaElem *ml; + int a; + unsigned int buffer[4*MAXPICKBUF]; - int a, index; - int extend; - short hits, selecting; + short hits; - view3d_operator_needs_opengl(C); - - /* setup view context for argument to callbacks */ - view3d_set_viewcontext(C, &vc); - - selecting= (RNA_int_get(op->ptr, "gesture_mode")==GESTURE_MODAL_SELECT); - rect.xmin= RNA_int_get(op->ptr, "xmin"); - rect.ymin= RNA_int_get(op->ptr, "ymin"); - rect.xmax= RNA_int_get(op->ptr, "xmax"); - rect.ymax= RNA_int_get(op->ptr, "ymax"); - extend = RNA_boolean_get(op->ptr, "extend"); + hits= view3d_opengl_select(vc, buffer, MAXPICKBUF, rect); - if(obedit==NULL && (paint_facesel_test(OBACT))) { - face_borderselect(C, obact, &rect, selecting, extend); - return OPERATOR_FINISHED; - } - else if(obedit==NULL && (obact && obact->mode & OB_MODE_PARTICLE_EDIT)) { - return PE_border_select(C, &rect, selecting, extend); + if (extend == 0 && select) { + for(ml= mb->editelems->first; ml; ml= ml->next) { + ml->flag &= ~SELECT; + } } - else if(obedit==NULL && (obact && obact->mode & OB_MODE_SCULPT)) - return OPERATOR_CANCELLED; - if(obedit) { - if(obedit->type==OB_MESH) { - Mesh *me= obedit->data; - vc.em= me->edit_mesh; - do_mesh_box_select(&vc, &rect, selecting, extend); -// if (EM_texFaceCheck()) - WM_event_add_notifier(C, NC_GEOM|ND_SELECT, obedit->data); - - } - else if(ELEM(obedit->type, OB_CURVE, OB_SURF)) { - do_nurbs_box_select(&vc, &rect, selecting, extend); - } - else if(obedit->type==OB_MBALL) { - MetaBall *mb = (MetaBall*)obedit->data; - hits= view3d_opengl_select(&vc, buffer, MAXPICKBUF, &rect); - - if (extend == 0 && selecting) { - ml= mb->editelems->first; - - while(ml) { - ml->flag &= ~SELECT; - ml= ml->next; - } + for(ml= mb->editelems->first; ml; ml= ml->next) { + for(a=0; aselcol1==buffer[ (4 * a) + 3 ]) { + ml->flag |= MB_SCALE_RAD; + if(select) ml->flag |= SELECT; + else ml->flag &= ~SELECT; + break; } - - ml= mb->editelems->first; - - while(ml) { - for(a=0; aselcol1==buffer[ (4 * a) + 3 ]) { - ml->flag |= MB_SCALE_RAD; - if(selecting) ml->flag |= SELECT; - else ml->flag &= ~SELECT; - break; - } - if(ml->selcol2==buffer[ (4 * a) + 3 ]) { - ml->flag &= ~MB_SCALE_RAD; - if(selecting) ml->flag |= SELECT; - else ml->flag &= ~SELECT; - break; - } - } - ml= ml->next; + if(ml->selcol2==buffer[ (4 * a) + 3 ]) { + ml->flag &= ~MB_SCALE_RAD; + if(select) ml->flag |= SELECT; + else ml->flag &= ~SELECT; + break; } } - else if(obedit->type==OB_ARMATURE) { - bArmature *arm= obedit->data; - EditBone *ebone; - - /* clear flag we use to detect point was affected */ - for(ebone= arm->edbo->first; ebone; ebone= ebone->next) - ebone->flag &= ~BONE_DONE; - - if (extend==0 && selecting) { - /* Set the flags */ - CTX_DATA_BEGIN(C, EditBone *, ebone, visible_bones) { - /* ignore bone if selection can't change */ - if ((ebone->flag & BONE_UNSELECTABLE) == 0) { - ebone->flag &= ~(BONE_SELECTED | BONE_TIPSEL | BONE_ROOTSEL); - } - } - CTX_DATA_END; - } + } - hits= view3d_opengl_select(&vc, buffer, MAXPICKBUF, &rect); - - /* first we only check points inside the border */ - for (a=0; aedbo, index & ~(BONESEL_ANY)); - if (index & BONESEL_TIP) { - ebone->flag |= BONE_DONE; - if (selecting) ebone->flag |= BONE_TIPSEL; - else ebone->flag &= ~BONE_TIPSEL; - } - - if (index & BONESEL_ROOT) { - ebone->flag |= BONE_DONE; - if (selecting) ebone->flag |= BONE_ROOTSEL; - else ebone->flag &= ~BONE_ROOTSEL; - } + return OPERATOR_FINISHED; +} + +static int do_armature_box_select(ViewContext *vc, rcti *rect, short select, short extend) +{ + bArmature *arm= vc->obedit->data; + EditBone *ebone; + int a; + + unsigned int buffer[4*MAXPICKBUF]; + short hits; + + hits= view3d_opengl_select(vc, buffer, MAXPICKBUF, rect); + + /* clear flag we use to detect point was affected */ + for(ebone= arm->edbo->first; ebone; ebone= ebone->next) + ebone->flag &= ~BONE_DONE; + + if (extend==0 && select) + ED_armature_deselect_all_visible(vc->obedit); + + /* first we only check points inside the border */ + for (a=0; aedbo, index & ~(BONESEL_ANY)); + if ((ebone->flag & BONE_UNSELECTABLE)==0) { + if (index & BONESEL_TIP) { + ebone->flag |= BONE_DONE; + if (select) ebone->flag |= BONE_TIPSEL; + else ebone->flag &= ~BONE_TIPSEL; } - } - - /* now we have to flush tag from parents... */ - for(ebone= arm->edbo->first; ebone; ebone= ebone->next) { - if(ebone->parent && (ebone->flag & BONE_CONNECTED)) { - if(ebone->parent->flag & BONE_DONE) - ebone->flag |= BONE_DONE; + + if (index & BONESEL_ROOT) { + ebone->flag |= BONE_DONE; + if (select) ebone->flag |= BONE_ROOTSEL; + else ebone->flag &= ~BONE_ROOTSEL; } } - - /* only select/deselect entire bones when no points where in the rect */ - for (a=0; aedbo, index & ~(BONESEL_ANY)); - if (index & BONESEL_BONE) { - if(!(ebone->flag & BONE_DONE)) { - if (selecting) - ebone->flag |= (BONE_ROOTSEL|BONE_TIPSEL|BONE_SELECTED); - else - ebone->flag &= ~(BONE_ROOTSEL|BONE_TIPSEL|BONE_SELECTED); - } + } + } + + /* now we have to flush tag from parents... */ + for(ebone= arm->edbo->first; ebone; ebone= ebone->next) { + if(ebone->parent && (ebone->flag & BONE_CONNECTED)) { + if(ebone->parent->flag & BONE_DONE) + ebone->flag |= BONE_DONE; + } + } + + /* only select/deselect entire bones when no points where in the rect */ + for (a=0; aedbo, index & ~(BONESEL_ANY)); + if (index & BONESEL_BONE) { + if ((ebone->flag & BONE_UNSELECTABLE)==0) { + if(!(ebone->flag & BONE_DONE)) { + if (select) + ebone->flag |= (BONE_ROOTSEL|BONE_TIPSEL|BONE_SELECTED); + else + ebone->flag &= ~(BONE_ROOTSEL|BONE_TIPSEL|BONE_SELECTED); } } } - - ED_armature_sync_selection(arm->edbo); - WM_event_add_notifier(C, NC_OBJECT|ND_BONE_SELECT, vc.obedit); - } - else if(obedit->type==OB_LATTICE) { - do_lattice_box_select(&vc, &rect, selecting, extend); } } - else { /* no editmode, unified for bones and objects */ - Bone *bone; - Object *ob= OBACT; - unsigned int *vbuffer=NULL; /* selection buffer */ - unsigned int *col; /* color in buffer */ - int bone_only; - int bone_selected=0; - int totobj= MAXPICKBUF; // XXX solve later - - if((ob) && (ob->mode & OB_MODE_POSE)) - bone_only= 1; - else - bone_only= 0; - - if (extend == 0 && selecting) { - base= FIRSTBASE; + + ED_armature_sync_selection(arm->edbo); + + return OPERATOR_CANCELLED; +} - if (bone_only) { - CTX_DATA_BEGIN(C, bPoseChannel *, pchan, visible_pose_bones) { +static int do_object_pose_box_select(bContext *C, ViewContext *vc, rcti *rect, int select, int extend) +{ + Bone *bone; + Object *ob= vc->obact; + unsigned int *vbuffer=NULL; /* selection buffer */ + unsigned int *col; /* color in buffer */ + int bone_only; + int bone_selected=0; + int totobj= MAXPICKBUF; // XXX solve later + short hits; + + if((ob) && (ob->mode & OB_MODE_POSE)) + bone_only= 1; + else + bone_only= 0; + + if (extend == 0 && select) { + if (bone_only) { + CTX_DATA_BEGIN(C, bPoseChannel *, pchan, visible_pose_bones) { + if ((pchan->bone->flag & BONE_UNSELECTABLE)==0) { pchan->bone->flag &= ~(BONE_SELECTED|BONE_TIPSEL|BONE_ROOTSEL); } - CTX_DATA_END; - } else { - while(base) { - Base *next = base->next; - if(BASE_SELECTABLE(v3d, base)) { - ED_base_object_select(base, BA_DESELECT); - } - base= next; - } } + CTX_DATA_END; + } else { + object_deselect_all_visible(vc->scene, vc->v3d); } + } - /* selection buffer now has bones potentially too, so we add MAXPICKBUF */ - vbuffer = MEM_mallocN(4 * (totobj+MAXPICKBUF) * sizeof(unsigned int), "selection buffer"); - hits= view3d_opengl_select(&vc, vbuffer, 4*(totobj+MAXPICKBUF), &rect); - /* - LOGIC NOTES (theeth): - The buffer and ListBase have the same relative order, which makes the selection - very simple. Loop through both data sets at the same time, if the color - is the same as the object, we have a hit and can move to the next color - and object pair, if not, just move to the next object, - keeping the same color until we have a hit. - - The buffer order is defined by OGL standard, hopefully no stupid GFX card - does it incorrectly. - */ - - if (hits>0) { /* no need to loop if there's no hit */ - base= FIRSTBASE; - col = vbuffer + 3; - - while(base && hits) { - Base *next = base->next; - if(BASE_SELECTABLE(v3d, base)) { - while (base->selcol == (*col & 0xFFFF)) { /* we got an object */ - - if(*col & 0xFFFF0000) { /* we got a bone */ - bone = get_indexed_bone(base->object, *col & ~(BONESEL_ANY)); - if(bone) { - if(selecting) { - bone->flag |= BONE_SELECTED; - bone_selected=1; + /* selection buffer now has bones potentially too, so we add MAXPICKBUF */ + vbuffer = MEM_mallocN(4 * (totobj+MAXPICKBUF) * sizeof(unsigned int), "selection buffer"); + hits= view3d_opengl_select(vc, vbuffer, 4*(totobj+MAXPICKBUF), rect); + /* + LOGIC NOTES (theeth): + The buffer and ListBase have the same relative order, which makes the selection + very simple. Loop through both data sets at the same time, if the color + is the same as the object, we have a hit and can move to the next color + and object pair, if not, just move to the next object, + keeping the same color until we have a hit. + + The buffer order is defined by OGL standard, hopefully no stupid GFX card + does it incorrectly. + */ + + if (hits>0) { /* no need to loop if there's no hit */ + Base *base; + col = vbuffer + 3; + + for(base= vc->scene->base.first; base && hits; base= base->next) { + if(BASE_SELECTABLE(vc->v3d, base)) { + while (base->selcol == (*col & 0xFFFF)) { /* we got an object */ + + if(*col & 0xFFFF0000) { /* we got a bone */ + bone = get_indexed_bone(base->object, *col & ~(BONESEL_ANY)); + if(bone) { + if(select) { + bone->flag |= BONE_SELECTED; + bone_selected=1; // XXX select_actionchannel_by_name(base->object->action, bone->name, 1); - } - else { - bArmature *arm= base->object->data; - bone->flag &= ~BONE_SELECTED; + } + else { + bArmature *arm= base->object->data; + bone->flag &= ~BONE_SELECTED; // XXX select_actionchannel_by_name(base->object->action, bone->name, 0); - if(arm->act_bone==bone) - arm->act_bone= NULL; - - } + if(arm->act_bone==bone) + arm->act_bone= NULL; + } } - else if(!bone_only) { - if (selecting) - ED_base_object_select(base, BA_SELECT); - else - ED_base_object_select(base, BA_DESELECT); - } - - col+=4; /* next color */ - hits--; - if(hits==0) break; } + else if(!bone_only) { + if (select) + ED_base_object_select(base, BA_SELECT); + else + ED_base_object_select(base, BA_DESELECT); + } + + col+=4; /* next color */ + hits--; + if(hits==0) break; } - - if (bone_selected) WM_event_add_notifier(C, NC_OBJECT|ND_BONE_SELECT, base->object); - - base= next; } + + if (bone_selected) { + WM_event_add_notifier(C, NC_OBJECT|ND_BONE_SELECT, base->object); + } + } - WM_event_add_notifier(C, NC_SCENE|ND_OB_SELECT, scene); + WM_event_add_notifier(C, NC_SCENE|ND_OB_SELECT, vc->scene); + + } + MEM_freeN(vbuffer); + + return hits > 0 ? OPERATOR_FINISHED : OPERATOR_CANCELLED; +} + +static int view3d_borderselect_exec(bContext *C, wmOperator *op) +{ + ViewContext vc; + rcti rect; + short extend; + short select; + + int ret= OPERATOR_CANCELLED; + view3d_operator_needs_opengl(C); + + /* setup view context for argument to callbacks */ + view3d_set_viewcontext(C, &vc); + + select= (RNA_int_get(op->ptr, "gesture_mode")==GESTURE_MODAL_SELECT); + rect.xmin= RNA_int_get(op->ptr, "xmin"); + rect.ymin= RNA_int_get(op->ptr, "ymin"); + rect.xmax= RNA_int_get(op->ptr, "xmax"); + rect.ymax= RNA_int_get(op->ptr, "ymax"); + extend = RNA_boolean_get(op->ptr, "extend"); + + if(vc.obedit) { + switch(vc.obedit->type) { + case OB_MESH: + vc.em= ((Mesh *)vc.obedit->data)->edit_mesh; + ret= do_mesh_box_select(&vc, &rect, select, extend); +// if (EM_texFaceCheck()) + if(ret & OPERATOR_FINISHED) { + WM_event_add_notifier(C, NC_GEOM|ND_SELECT, vc.obedit->data); + } + break; + case OB_CURVE: + case OB_SURF: + ret= do_nurbs_box_select(&vc, &rect, select, extend); + break; + case OB_MBALL: + ret= do_meta_box_select(&vc, &rect, select, extend); + break; + case OB_ARMATURE: + ret= do_armature_box_select(&vc, &rect, select, extend); + if(ret & OPERATOR_FINISHED) { + WM_event_add_notifier(C, NC_OBJECT|ND_BONE_SELECT, vc.obedit); + } + break; + case OB_LATTICE: + ret= do_lattice_box_select(&vc, &rect, select, extend); + break; + default: + assert(!"border select on incorrect object type"); } - MEM_freeN(vbuffer); } - return OPERATOR_FINISHED; + else { /* no editmode, unified for bones and objects */ + if(vc.obact && vc.obact->mode & OB_MODE_SCULPT) { + /* pass */ + } + else if(vc.obact && paint_facesel_test(vc.obact)) { + ret= do_paintface_box_select(&vc, &rect, select, extend); + } + else if(vc.obact && vc.obact->mode & OB_MODE_PARTICLE_EDIT) { + ret= PE_border_select(C, &rect, select, extend); + } + else { /* object mode with none active */ + ret= do_object_pose_box_select(C, &vc, &rect, select, extend); + } + } + + return ret; } @@ -1764,7 +1820,7 @@ static int view3d_select_invoke(bContext *C, wmOperator *op, wmEvent *event) else if(obact && obact->mode & OB_MODE_PARTICLE_EDIT) return PE_mouse_particles(C, event->mval, extend); else if(obact && paint_facesel_test(obact)) - retval = face_select(C, obact, event->mval, extend); + retval = paintface_mouse_select(C, obact, event->mval, extend); else retval = mouse_select(C, event->mval, extend, center, enumerate); @@ -1829,7 +1885,7 @@ static void mesh_circle_doSelectFace(void *userData, EditFace *efa, int x, int y } } -static void mesh_circle_select(ViewContext *vc, int selecting, short *mval, float rad) +static void mesh_circle_select(ViewContext *vc, int select, short *mval, float rad) { ToolSettings *ts= vc->scene->toolsettings; int bbsel; @@ -1841,14 +1897,14 @@ static void mesh_circle_select(ViewContext *vc, int selecting, short *mval, floa vc->em= ((Mesh *)vc->obedit->data)->edit_mesh; data.vc = vc; - data.select = selecting; + data.select = select; data.mval[0] = mval[0]; data.mval[1] = mval[1]; data.radius = rad; if(ts->selectmode & SCE_SELECT_VERTEX) { if(bbsel) { - EM_backbuf_checkAndSelectVerts(vc->em, selecting==LEFTMOUSE); + EM_backbuf_checkAndSelectVerts(vc->em, select==LEFTMOUSE); } else { mesh_foreachScreenVert(vc, mesh_circle_doSelectVert, &data, 1); } @@ -1856,7 +1912,7 @@ static void mesh_circle_select(ViewContext *vc, int selecting, short *mval, floa if(ts->selectmode & SCE_SELECT_EDGE) { if (bbsel) { - EM_backbuf_checkAndSelectEdges(vc->em, selecting==LEFTMOUSE); + EM_backbuf_checkAndSelectEdges(vc->em, select==LEFTMOUSE); } else { mesh_foreachScreenEdge(vc, mesh_circle_doSelectEdge, &data, 0); } @@ -1864,7 +1920,7 @@ static void mesh_circle_select(ViewContext *vc, int selecting, short *mval, floa if(ts->selectmode & SCE_SELECT_FACE) { if(bbsel) { - EM_backbuf_checkAndSelectFaces(vc->em, selecting==LEFTMOUSE); + EM_backbuf_checkAndSelectFaces(vc->em, select==LEFTMOUSE); } else { mesh_foreachScreenFace(vc, mesh_circle_doSelectFace, &data); } @@ -1874,7 +1930,7 @@ static void mesh_circle_select(ViewContext *vc, int selecting, short *mval, floa EM_selectmode_flush(vc->em); } -static void paint_facesel_circle_select(ViewContext *vc, int selecting, short *mval, float rad) +static void paint_facesel_circle_select(ViewContext *vc, int select, short *mval, float rad) { Object *ob= vc->obact; Mesh *me = ob?ob->data:NULL; @@ -1884,10 +1940,8 @@ static void paint_facesel_circle_select(ViewContext *vc, int selecting, short *m em_vertoffs= me->totface+1; /* max index array */ bbsel= EM_init_backbuf_circle(vc, mval[0], mval[1], (short)(rad+1.0)); - EM_backbuf_checkAndSelectTFaces(me, selecting==LEFTMOUSE); + EM_backbuf_checkAndSelectTFaces(me, select==LEFTMOUSE); EM_free_backbuf(); - -// XXX object_tface_flags_changed(OBACT, 0); } } @@ -1923,13 +1977,13 @@ static void nurbscurve_circle_doSelect(void *userData, Nurb *UNUSED(nu), BPoint } } } -static void nurbscurve_circle_select(ViewContext *vc, int selecting, short *mval, float rad) +static void nurbscurve_circle_select(ViewContext *vc, int select, short *mval, float rad) { struct {ViewContext *vc; short select, mval[2]; float radius; } data; /* set vc-> edit data */ - data.select = selecting; + data.select = select; data.mval[0] = mval[0]; data.mval[1] = mval[1]; data.radius = rad; @@ -1950,13 +2004,13 @@ static void latticecurve_circle_doSelect(void *userData, BPoint *bp, int x, int bp->f1 = data->select?(bp->f1|SELECT):(bp->f1&~SELECT); } } -static void lattice_circle_select(ViewContext *vc, int selecting, short *mval, float rad) +static void lattice_circle_select(ViewContext *vc, int select, short *mval, float rad) { struct {ViewContext *vc; short select, mval[2]; float radius; } data; /* set vc-> edit data */ - data.select = selecting; + data.select = select; data.mval[0] = mval[0]; data.mval[1] = mval[1]; data.radius = rad; @@ -1989,7 +2043,7 @@ static short armature_circle_doSelectJoint(void *userData, EditBone *ebone, int } return 0; } -static void armature_circle_select(ViewContext *vc, int selecting, short *mval, float rad) +static void armature_circle_select(ViewContext *vc, int select, short *mval, float rad) { struct {ViewContext *vc; short select, mval[2]; float radius; } data; bArmature *arm= vc->obedit->data; @@ -1997,7 +2051,7 @@ static void armature_circle_select(ViewContext *vc, int selecting, short *mval, int change= FALSE; /* set vc->edit data */ - data.select = selecting; + data.select = select; data.mval[0] = mval[0]; data.mval[1] = mval[1]; data.radius = rad; @@ -2029,7 +2083,7 @@ static void armature_circle_select(ViewContext *vc, int selecting, short *mval, /* only if the endpoints didn't get selected, deal with the middle of the bone too */ // XXX should we just do this always? if ( (didpoint==0) && edge_inside_circle(mval[0], mval[1], rad, sco1[0], sco1[1], sco2[0], sco2[1]) ) { - if (selecting) + if (select) ebone->flag |= BONE_TIPSEL|BONE_ROOTSEL|BONE_SELECTED; else ebone->flag &= ~(BONE_SELECTED|BONE_TIPSEL|BONE_ROOTSEL); @@ -2045,21 +2099,21 @@ static void armature_circle_select(ViewContext *vc, int selecting, short *mval, /** Callbacks for circle selection in Editmode */ -static void obedit_circle_select(ViewContext *vc, short selecting, short *mval, float rad) +static void obedit_circle_select(ViewContext *vc, short select, short *mval, float rad) { switch(vc->obedit->type) { case OB_MESH: - mesh_circle_select(vc, selecting, mval, rad); + mesh_circle_select(vc, select, mval, rad); break; case OB_CURVE: case OB_SURF: - nurbscurve_circle_select(vc, selecting, mval, rad); + nurbscurve_circle_select(vc, select, mval, rad); break; case OB_LATTICE: - lattice_circle_select(vc, selecting, mval, rad); + lattice_circle_select(vc, select, mval, rad); break; case OB_ARMATURE: - armature_circle_select(vc, selecting, mval, rad); + armature_circle_select(vc, select, mval, rad); break; default: return; @@ -2078,9 +2132,9 @@ static int view3d_circle_select_exec(bContext *C, wmOperator *op) int y= RNA_int_get(op->ptr, "y"); int radius= RNA_int_get(op->ptr, "radius"); int gesture_mode= RNA_int_get(op->ptr, "gesture_mode"); - int selecting; + int select; - selecting= (gesture_mode==GESTURE_MODAL_SELECT); + select= (gesture_mode==GESTURE_MODAL_SELECT); if(CTX_data_edit_object(C) || paint_facesel_test(obact) || (obact && obact->mode & OB_MODE_PARTICLE_EDIT)) { @@ -2094,22 +2148,22 @@ static int view3d_circle_select_exec(bContext *C, wmOperator *op) mval[1]= y; if(CTX_data_edit_object(C)) { - obedit_circle_select(&vc, selecting, mval, (float)radius); + obedit_circle_select(&vc, select, mval, (float)radius); WM_event_add_notifier(C, NC_GEOM|ND_SELECT, obact->data); } else if(paint_facesel_test(obact)) { - paint_facesel_circle_select(&vc, selecting, mval, (float)radius); + paint_facesel_circle_select(&vc, select, mval, (float)radius); WM_event_add_notifier(C, NC_GEOM|ND_SELECT, obact->data); } else - return PE_circle_select(C, selecting, mval, (float)radius); + return PE_circle_select(C, select, mval, (float)radius); } else if(obact && obact->mode & OB_MODE_SCULPT) { return OPERATOR_CANCELLED; } else { Base *base; - selecting= selecting?BA_SELECT:BA_DESELECT; + select= select?BA_SELECT:BA_DESELECT; for(base= FIRSTBASE; base; base= base->next) { if(BASE_SELECTABLE(v3d, base)) { project_short(ar, base->object->obmat[3], &base->sx); @@ -2117,7 +2171,7 @@ static int view3d_circle_select_exec(bContext *C, wmOperator *op) int dx= base->sx-x; int dy= base->sy-y; if( dx*dx + dy*dy < radius*radius) - ED_base_object_select(base, selecting); + ED_base_object_select(base, select); } } } -- cgit v1.2.3 From bcd2d60557126b3e6c6f5593cfbd8c393273690f Mon Sep 17 00:00:00 2001 From: Campbell Barton Date: Wed, 3 Nov 2010 02:28:11 +0000 Subject: added metaball lasso select. --- .../blender/editors/space_view3d/view3d_select.c | 54 +++++++++++++++++++--- 1 file changed, 47 insertions(+), 7 deletions(-) (limited to 'source/blender/editors/space_view3d') diff --git a/source/blender/editors/space_view3d/view3d_select.c b/source/blender/editors/space_view3d/view3d_select.c index bfc24e80f4c..3071a1ffeea 100644 --- a/source/blender/editors/space_view3d/view3d_select.c +++ b/source/blender/editors/space_view3d/view3d_select.c @@ -700,6 +700,34 @@ static void do_lasso_select_armature(ViewContext *vc, short mcords[][2], short m } } + + + +static void do_lasso_select_meta(ViewContext *vc, short mcords[][2], short moves, short extend, short select) +{ + MetaBall *mb = (MetaBall*)vc->obedit->data; + MetaElem *ml; + float vec[3]; + short sco[2]; + + if (extend == 0 && select) { + for(ml= mb->editelems->first; ml; ml= ml->next) { + ml->flag &= ~SELECT; + } + } + + for(ml= mb->editelems->first; ml; ml= ml->next) { + + mul_v3_m4v3(vec, vc->obedit->obmat, &ml->x); + project_short(vc->ar, vec, sco); + + if(lasso_inside(mcords, moves, sco[0], sco[1])) { + if(select) ml->flag |= SELECT; + else ml->flag &= ~SELECT; + } + } +} + static void do_lasso_select_paintface(ViewContext *vc, short mcords[][2], short moves, short extend, short select) { Object *ob= vc->obact; @@ -772,15 +800,27 @@ static void view3d_lasso_select(bContext *C, ViewContext *vc, short mcords[][2], } } else { /* Edit Mode */ - if(vc->obedit->type==OB_MESH) + switch(vc->obedit->type) { + case OB_MESH: do_lasso_select_mesh(vc, mcords, moves, extend, select); - else if(vc->obedit->type==OB_CURVE || vc->obedit->type==OB_SURF) + break; + case OB_CURVE: + case OB_SURF: do_lasso_select_curve(vc, mcords, moves, extend, select); - else if(vc->obedit->type==OB_LATTICE) + break; + case OB_LATTICE: do_lasso_select_lattice(vc, mcords, moves, extend, select); - else if(vc->obedit->type==OB_ARMATURE) + break; + case OB_ARMATURE: do_lasso_select_armature(vc, mcords, moves, extend, select); - + break; + case OB_MBALL: + do_lasso_select_meta(vc, mcords, moves, extend, select); + break; + default: + assert(!"lasso select on incorrect object type"); + } + WM_event_add_notifier(C, NC_GEOM|ND_SELECT, vc->obedit->data); } } @@ -1514,13 +1554,13 @@ static int do_meta_box_select(ViewContext *vc, rcti *rect, int select, int exten if(ml->selcol1==buffer[ (4 * a) + 3 ]) { ml->flag |= MB_SCALE_RAD; if(select) ml->flag |= SELECT; - else ml->flag &= ~SELECT; + else ml->flag &= ~SELECT; break; } if(ml->selcol2==buffer[ (4 * a) + 3 ]) { ml->flag &= ~MB_SCALE_RAD; if(select) ml->flag |= SELECT; - else ml->flag &= ~SELECT; + else ml->flag &= ~SELECT; break; } } -- cgit v1.2.3 From 44f3f03f0290eb6f089fd75cbfa8be9abe0f64dc Mon Sep 17 00:00:00 2001 From: Campbell Barton Date: Wed, 3 Nov 2010 02:50:05 +0000 Subject: paint/face mask lasso select was checking for uv coords, which isnt needed, also make a mistake on this check last commit. --- source/blender/editors/space_view3d/view3d_select.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'source/blender/editors/space_view3d') diff --git a/source/blender/editors/space_view3d/view3d_select.c b/source/blender/editors/space_view3d/view3d_select.c index 3071a1ffeea..2159aef0695 100644 --- a/source/blender/editors/space_view3d/view3d_select.c +++ b/source/blender/editors/space_view3d/view3d_select.c @@ -733,8 +733,8 @@ static void do_lasso_select_paintface(ViewContext *vc, short mcords[][2], short Object *ob= vc->obact; Mesh *me= ob?ob->data:NULL; rcti rect; - - if(me==NULL || me->mtface==NULL || me->totface) + + if(me==NULL || me->totface==0) return; if(extend==0 && select) -- cgit v1.2.3 From fe8d5b81b09462d2344a50b32bfd2d8df5c6d886 Mon Sep 17 00:00:00 2001 From: Campbell Barton Date: Wed, 3 Nov 2010 06:31:53 +0000 Subject: use c90 compatible static initializers. --- source/blender/editors/space_view3d/drawobject.c | 42 +++++++++++++++++------ source/blender/editors/space_view3d/view3d_draw.c | 24 ++++++++++--- source/blender/editors/space_view3d/view3d_edit.c | 4 ++- source/blender/editors/space_view3d/view3d_view.c | 6 +++- 4 files changed, 58 insertions(+), 18 deletions(-) (limited to 'source/blender/editors/space_view3d') diff --git a/source/blender/editors/space_view3d/drawobject.c b/source/blender/editors/space_view3d/drawobject.c index 8b9e960cdb3..d59f4066680 100644 --- a/source/blender/editors/space_view3d/drawobject.c +++ b/source/blender/editors/space_view3d/drawobject.c @@ -320,8 +320,12 @@ static void draw_xyz_wire(float *c, float size, int axis) { float v1[3]= {0.f, 0.f, 0.f}, v2[3] = {0.f, 0.f, 0.f}; float dim = size * 0.1; - float dx[3]={dim, 0.0, 0.0}, dy[3]={0.0, dim, 0.0}, dz[3]={0.0, 0.0, dim}; - + float dx[3], dy[3], dz[3]; + + dx[0]=dim; dx[1]=0.f; dx[2]=0.f; + dy[0]=0.f; dy[1]=dim; dy[2]=0.f; + dz[0]=0.f; dz[1]=0.f; dz[2]=dim; + switch(axis) { case 0: /* x axis */ glBegin(GL_LINES); @@ -524,8 +528,13 @@ void drawcircball(int mode, float *cent, float rad, float tmat[][4]) /* circle for object centers, special_color is for library or ob users */ static void drawcentercircle(View3D *v3d, RegionView3D *rv3d, float *co, int selstate, int special_color) { - float vec[3]= {rv3d->persmat[0][3], rv3d->persmat[1][3], rv3d->persmat[2][3]}; float size= rv3d->pixsize*((float)U.obcenter_dia*0.5f); + float vec[3]; + + vec[0]= rv3d->persmat[0][3]; + vec[1]= rv3d->persmat[1][3]; + vec[2]= rv3d->persmat[2][3]; + size *= dot_v3v3(vec, co) + rv3d->persmat[3][3]; /* using gldepthfunc guarantees that it does write z values, but not checks for it, so centers remain visible independt order of drawing */ @@ -3430,7 +3439,7 @@ static void draw_new_particle_system(Scene *scene, View3D *v3d, RegionView3D *rv ParticleData *pars, *pa; ParticleKey state, *states=0; ParticleBillboardData bb; - ParticleSimulationData sim = {scene, ob, psys, NULL}; + ParticleSimulationData sim= {0}; ParticleDrawData *pdd = psys->pdd; Material *ma; float vel[3], imat[4][4]; @@ -3468,6 +3477,9 @@ static void draw_new_particle_system(Scene *scene, View3D *v3d, RegionView3D *rv return; /* 2. */ + sim.scene= scene; + sim.ob= ob; + sim.psys= psys; sim.psmd = psmd = psys_get_modifier(ob,psys); if(part->phystype==PART_PHYS_KEYED){ @@ -4757,9 +4769,17 @@ static void drawnurb(Scene *scene, View3D *v3d, RegionView3D *rv3d, Base *base, while (nr-->0) { /* accounts for empty bevel lists */ float fac= bevp->radius * ts->normalsize; - float vec_a[3] = { fac,0, 0}; // Offset perpendicular to the curve - float vec_b[3] = {-fac,0, 0}; // Delta along the curve + float vec_a[3]; // Offset perpendicular to the curve + float vec_b[3]; // Delta along the curve + + vec_a[0]= fac; + vec_a[1]= 0.0f; + vec_a[2]= 0.0f; + vec_b[0]= -fac; + vec_b[1]= 0.0f; + vec_b[2]= 0.0f; + mul_qt_v3(bevp->quat, vec_a); mul_qt_v3(bevp->quat, vec_b); add_v3_v3(vec_a, bevp->vec); @@ -5510,22 +5530,22 @@ static void draw_hooks(Object *ob) void drawRBpivot(bRigidBodyJointConstraint *data) { int axis; - float v1[3]= {data->pivX, data->pivY, data->pivZ}; - float eu[3]= {data->axX, data->axY, data->axZ}; float mat[4][4]; - eul_to_mat4(mat,eu); + eul_to_mat4(mat,&data->axX); glLineWidth (4.0f); setlinestyle(2); for (axis=0; axis<3; axis++) { float dir[3] = {0,0,0}; - float v[3]= {data->pivX, data->pivY, data->pivZ}; + float v[3]; + + copy_v3_v3(v, &data->pivX); dir[axis] = 1.f; glBegin(GL_LINES); mul_m4_v3(mat,dir); add_v3_v3(v, dir); - glVertex3fv(v1); + glVertex3fv(&data->pivX); glVertex3fv(v); glEnd(); if (axis==0) diff --git a/source/blender/editors/space_view3d/view3d_draw.c b/source/blender/editors/space_view3d/view3d_draw.c index b8fff234347..27afe07c4b2 100644 --- a/source/blender/editors/space_view3d/view3d_draw.c +++ b/source/blender/editors/space_view3d/view3d_draw.c @@ -1583,9 +1583,14 @@ static void draw_dupli_objects(Scene *scene, ARegion *ar, View3D *v3d, Base *bas void view3d_update_depths_rect(ARegion *ar, ViewDepths *d, rcti *rect) { int x, y, w, h; - rcti r= {0, ar->winx-1, 0, ar->winy-1}; + rcti r; /* clamp rect by area */ + r.xmin= 0; + r.xmax= ar->winx-1; + r.ymin= 0; + r.ymax= ar->winy-1; + /* Constrain rect to depth bounds */ BLI_isect_rcti(&r, rect, rect); @@ -1997,10 +2002,19 @@ static void view3d_main_area_setup_view(Scene *scene, View3D *v3d, ARegion *ar, { /* note: '1.0f / len_v3(v1)' replaced 'len_v3(rv3d->viewmat[0])' * because of float point precission problems at large values [#23908] */ - float v1[3]= {rv3d->persmat[0][0], rv3d->persmat[1][0], rv3d->persmat[2][0]}; - float v2[3]= {rv3d->persmat[0][1], rv3d->persmat[1][1], rv3d->persmat[2][1]}; - float len1= 1.0f / len_v3(v1); - float len2= 1.0f / len_v3(v2); + float v1[3], v2[3]; + float len1, len2; + + v1[0]= rv3d->persmat[0][0]; + v1[1]= rv3d->persmat[1][0]; + v1[2]= rv3d->persmat[2][0]; + + v2[0]= rv3d->persmat[0][1]; + v2[1]= rv3d->persmat[1][1]; + v2[2]= rv3d->persmat[2][1]; + + len1= 1.0f / len_v3(v1); + len2= 1.0f / len_v3(v2); rv3d->pixsize = (2.0f * MAX2(len1, len2)) / (float)MAX2(ar->winx, ar->winy); } diff --git a/source/blender/editors/space_view3d/view3d_edit.c b/source/blender/editors/space_view3d/view3d_edit.c index d706dc27404..18091942973 100644 --- a/source/blender/editors/space_view3d/view3d_edit.c +++ b/source/blender/editors/space_view3d/view3d_edit.c @@ -2423,7 +2423,9 @@ static int set_3dcursor_invoke(bContext *C, wmOperator *UNUSED(op), wmEvent *eve short depth_used = 0; if (U.uiflag & USER_ORBIT_ZBUF) { /* maybe this should be accessed some other way */ - short mval_depth[2] = {mx, my}; + short mval_depth[2]; + mval_depth[0]= mx; + mval_depth[1]= my; view3d_operator_needs_opengl(C); if (view_autodist(scene, ar, v3d, mval_depth, fp)) depth_used= 1; diff --git a/source/blender/editors/space_view3d/view3d_view.c b/source/blender/editors/space_view3d/view3d_view.c index 8d6eec3285c..2e75b5163f9 100644 --- a/source/blender/editors/space_view3d/view3d_view.c +++ b/source/blender/editors/space_view3d/view3d_view.c @@ -139,8 +139,12 @@ void view3d_settings_from_ob(Object *ob, float *ofs, float *quat, float *dist, f } if (dist) { - float vec[3] = {0.0f, 0.0f, -(*dist)}; float tquat[4]; + float vec[3]; + + vec[0]= 0.0f; + vec[1]= 0.0f; + vec[2]= -(*dist); mat4_to_quat(tquat, ob->obmat); -- cgit v1.2.3 From 6753882e42282ccf9dea49bdef2fc5455d852710 Mon Sep 17 00:00:00 2001 From: Campbell Barton Date: Thu, 4 Nov 2010 15:59:09 +0000 Subject: bugfix [#24009] Crash when switching area types and performing ops --- source/blender/editors/space_view3d/view3d_edit.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'source/blender/editors/space_view3d') diff --git a/source/blender/editors/space_view3d/view3d_edit.c b/source/blender/editors/space_view3d/view3d_edit.c index 18091942973..9fbfd12f902 100644 --- a/source/blender/editors/space_view3d/view3d_edit.c +++ b/source/blender/editors/space_view3d/view3d_edit.c @@ -1366,7 +1366,7 @@ void VIEW3D_OT_view_all(wmOperatorType *ot) /* api callbacks */ ot->exec= view3d_all_exec; - ot->poll= ED_operator_view3d_active; + ot->poll= ED_operator_region_view3d_active; /* flags */ ot->flag= 0; -- cgit v1.2.3 From 7569a25a4f00575c690968eeb0ff53b6b4ab890b Mon Sep 17 00:00:00 2001 From: Campbell Barton Date: Fri, 5 Nov 2010 05:26:34 +0000 Subject: centralize function for calculating pixel size. (no functional changes) --- source/blender/editors/space_view3d/drawobject.c | 21 ++++----------------- source/blender/editors/space_view3d/view3d_view.c | 9 +++++++++ 2 files changed, 13 insertions(+), 17 deletions(-) (limited to 'source/blender/editors/space_view3d') diff --git a/source/blender/editors/space_view3d/drawobject.c b/source/blender/editors/space_view3d/drawobject.c index d59f4066680..7d30c404bf0 100644 --- a/source/blender/editors/space_view3d/drawobject.c +++ b/source/blender/editors/space_view3d/drawobject.c @@ -528,14 +528,7 @@ void drawcircball(int mode, float *cent, float rad, float tmat[][4]) /* circle for object centers, special_color is for library or ob users */ static void drawcentercircle(View3D *v3d, RegionView3D *rv3d, float *co, int selstate, int special_color) { - float size= rv3d->pixsize*((float)U.obcenter_dia*0.5f); - float vec[3]; - - vec[0]= rv3d->persmat[0][3]; - vec[1]= rv3d->persmat[1][3]; - vec[2]= rv3d->persmat[2][3]; - - size *= dot_v3v3(vec, co) + rv3d->persmat[3][3]; + const float size= view3d_pixel_size(rv3d, co) * (float)U.obcenter_dia * 0.5f; /* using gldepthfunc guarantees that it does write z values, but not checks for it, so centers remain visible independt order of drawing */ if(v3d->zbuf) glDepthFunc(GL_ALWAYS); @@ -906,9 +899,10 @@ static void draw_transp_spot_volume(Lamp *la, float x, float z) static void drawlamp(Scene *scene, View3D *v3d, RegionView3D *rv3d, Base *base, int dt, int flag) { Object *ob= base->object; + const float pixsize= view3d_pixel_size(rv3d, ob->obmat[3]); Lamp *la= ob->data; float vec[3], lvec[3], vvec[3], circrad, x,y,z; - float pixsize, lampsize; + float lampsize; float imat[4][4], curcol[4]; char col[4]; int drawcone= (dt>OB_WIRE && !(G.f & G_PICKSEL) && la->type == LA_SPOT && (la->mode & LA_SHOW_CONE)); @@ -924,8 +918,6 @@ static void drawlamp(Scene *scene, View3D *v3d, RegionView3D *rv3d, Base *base, glLoadMatrixf(rv3d->viewmat); /* lets calculate the scale: */ - pixsize= rv3d->persmat[0][3]*ob->obmat[3][0]+ rv3d->persmat[1][3]*ob->obmat[3][1]+ rv3d->persmat[2][3]*ob->obmat[3][2]+ rv3d->persmat[3][3]; - pixsize*= rv3d->pixsize; lampsize= pixsize*((float)U.obcenter_dia*0.5f); /* and view aligned matrix: */ @@ -3552,12 +3544,7 @@ static void draw_new_particle_system(Scene *scene, View3D *v3d, RegionView3D *rv case PART_DRAW_CROSS: case PART_DRAW_AXIS: /* lets calculate the scale: */ - pixsize= rv3d->persmat[0][3]*ob->obmat[3][0]+ rv3d->persmat[1][3]*ob->obmat[3][1]+ rv3d->persmat[2][3]*ob->obmat[3][2]+ rv3d->persmat[3][3]; - pixsize*= rv3d->pixsize; - if(part->draw_size==0.0) - pixsize*=2.0; - else - pixsize*=part->draw_size; + pixsize= view3d_pixel_size(rv3d, ob->obmat[3]); if(draw_as==PART_DRAW_AXIS) create_cdata = 1; diff --git a/source/blender/editors/space_view3d/view3d_view.c b/source/blender/editors/space_view3d/view3d_view.c index 2e75b5163f9..1be7816f5ea 100644 --- a/source/blender/editors/space_view3d/view3d_view.c +++ b/source/blender/editors/space_view3d/view3d_view.c @@ -1873,3 +1873,12 @@ int view3d_is_ortho(View3D *v3d, RegionView3D *rv3d) { return (rv3d->persp == RV3D_ORTHO || (v3d->camera && ((Camera *)v3d->camera->data)->type == CAM_ORTHO)); } + +float view3d_pixel_size(struct RegionView3D *rv3d, const float co[3]) +{ + return (rv3d->persmat[3][3] + ( + rv3d->persmat[0][3]*co[0] + + rv3d->persmat[1][3]*co[1] + + rv3d->persmat[2][3]*co[2]) + ) * rv3d->pixsize; +} -- cgit v1.2.3 From e179c92a278160ad3a1523a17ef272f6f3547f46 Mon Sep 17 00:00:00 2001 From: Campbell Barton Date: Fri, 5 Nov 2010 07:35:21 +0000 Subject: tedious string copying changes - use sizeof() in more places. - fixed some off by 1 bugs copying strings. setting curve font family for instance was 1 char too short. - replace strncpy and strcpy with BLI_strncpy --- source/blender/editors/space_view3d/view3d_buttons.c | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) (limited to 'source/blender/editors/space_view3d') diff --git a/source/blender/editors/space_view3d/view3d_buttons.c b/source/blender/editors/space_view3d/view3d_buttons.c index 450b3725bdb..9d17bbfe7da 100644 --- a/source/blender/editors/space_view3d/view3d_buttons.c +++ b/source/blender/editors/space_view3d/view3d_buttons.c @@ -884,14 +884,14 @@ static void v3d_posearmature_buts(uiLayout *layout, Object *ob) void validate_editbonebutton_cb(bContext *C, void *bonev, void *namev) { EditBone *eBone= bonev; - char oldname[32], newname[32]; - + char oldname[sizeof(eBone->name)], newname[sizeof(eBone->name)]; + /* need to be on the stack */ - BLI_strncpy(newname, eBone->name, 32); - BLI_strncpy(oldname, (char *)namev, 32); + BLI_strncpy(newname, eBone->name, sizeof(eBone->name)); + BLI_strncpy(oldname, (char *)namev, sizeof(eBone->name)); /* restore */ - BLI_strncpy(eBone->name, oldname, 32); - + BLI_strncpy(eBone->name, oldname, sizeof(eBone->name)); + ED_armature_bone_rename(CTX_data_edit_object(C)->data, oldname, newname); // editarmature.c WM_event_add_notifier(C, NC_OBJECT|ND_BONE_SELECT, CTX_data_edit_object(C)); // XXX fix } -- cgit v1.2.3 From 12770dba0e9d5d3dd4b657cc9fa269add5ee18a1 Mon Sep 17 00:00:00 2001 From: Campbell Barton Date: Sun, 7 Nov 2010 10:36:06 +0000 Subject: use RV3D_CAMOB define, theres no reason to use >= comparison either. also fixed opengl render ortho test. --- source/blender/editors/space_view3d/drawobject.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) (limited to 'source/blender/editors/space_view3d') diff --git a/source/blender/editors/space_view3d/drawobject.c b/source/blender/editors/space_view3d/drawobject.c index 7d30c404bf0..5c95a6a3026 100644 --- a/source/blender/editors/space_view3d/drawobject.c +++ b/source/blender/editors/space_view3d/drawobject.c @@ -1238,7 +1238,7 @@ static void drawcamera(Scene *scene, View3D *v3d, RegionView3D *rv3d, Object *ob glDisable(GL_LIGHTING); glDisable(GL_CULL_FACE); - if(rv3d->persp>=2 && cam->type==CAM_ORTHO && ob==v3d->camera) { + if(rv3d->persp==RV3D_CAMOB && cam->type==CAM_ORTHO && ob==v3d->camera) { facx= 0.5*cam->ortho_scale*caspx; facy= 0.5*cam->ortho_scale*caspy; shx= cam->shiftx * cam->ortho_scale; @@ -1247,7 +1247,7 @@ static void drawcamera(Scene *scene, View3D *v3d, RegionView3D *rv3d, Object *ob } else { fac= cam->drawsize; - if(rv3d->persp>=2 && ob==v3d->camera) fac= cam->clipsta+0.1; /* that way it's always visible */ + if(rv3d->persp==RV3D_CAMOB && ob==v3d->camera) fac= cam->clipsta+0.1; /* that way it's always visible */ depth= - fac*cam->lens/16.0; facx= fac*caspx; @@ -1270,7 +1270,7 @@ static void drawcamera(Scene *scene, View3D *v3d, RegionView3D *rv3d, Object *ob glEnd(); - if(rv3d->persp>=2 && ob==v3d->camera) return; + if(rv3d->persp==RV3D_CAMOB && ob==v3d->camera) return; glBegin(GL_LINE_STRIP); glVertex3fv(vec[2]); -- cgit v1.2.3 From c7fab53ccb7fc4df46e9e4f0dc7583c3e4a6f8c3 Mon Sep 17 00:00:00 2001 From: Ton Roosendaal Date: Sun, 7 Nov 2010 14:57:24 +0000 Subject: Bugfix #24585 Quad view split 3D window: didn't work for "box lock" option when using "view all" or "view selected". Made it work nicely for animated 'smooth' view too. --- source/blender/editors/space_view3d/view3d_edit.c | 10 +++------- source/blender/editors/space_view3d/view3d_view.c | 3 +++ 2 files changed, 6 insertions(+), 7 deletions(-) (limited to 'source/blender/editors/space_view3d') diff --git a/source/blender/editors/space_view3d/view3d_edit.c b/source/blender/editors/space_view3d/view3d_edit.c index 9fbfd12f902..d8913e494f3 100644 --- a/source/blender/editors/space_view3d/view3d_edit.c +++ b/source/blender/editors/space_view3d/view3d_edit.c @@ -1348,9 +1348,6 @@ static int view3d_all_exec(bContext *C, wmOperator *op) /* was view3d_home() in } // XXX BIF_view3d_previewrender_signal(curarea, PR_DBASE|PR_DISPRECT); - if(rv3d->viewlock & RV3D_BOXVIEW) - view3d_boxview_copy(CTX_wm_area(C), ar); - WM_event_add_notifier(C, NC_SPACE|ND_SPACE_VIEW3D, v3d); return OPERATOR_FINISHED; @@ -1492,9 +1489,9 @@ static int viewselected_exec(bContext *C, wmOperator *UNUSED(op)) /* like a loca smooth_view(C, NULL, NULL, new_ofs, NULL, ok_dist ? &new_dist : NULL, NULL); } + /* smooth view does viewlock RV3D_BOXVIEW copy */ + // XXX BIF_view3d_previewrender_signal(curarea, PR_DBASE|PR_DISPRECT); - if(rv3d->viewlock & RV3D_BOXVIEW) - view3d_boxview_copy(CTX_wm_area(C), ar); return OPERATOR_FINISHED; } @@ -1527,8 +1524,7 @@ static int viewcenter_cursor_exec(bContext *C, wmOperator *UNUSED(op)) negate_v3_v3(new_ofs, give_cursor(scene, v3d)); smooth_view(C, NULL, NULL, new_ofs, NULL, NULL, NULL); - if (rv3d->viewlock & RV3D_BOXVIEW) - view3d_boxview_copy(CTX_wm_area(C), CTX_wm_region(C)); + /* smooth view does viewlock RV3D_BOXVIEW copy */ } return OPERATOR_FINISHED; diff --git a/source/blender/editors/space_view3d/view3d_view.c b/source/blender/editors/space_view3d/view3d_view.c index 1be7816f5ea..80de1cdc040 100644 --- a/source/blender/editors/space_view3d/view3d_view.c +++ b/source/blender/editors/space_view3d/view3d_view.c @@ -347,6 +347,9 @@ static int view3d_smoothview_invoke(bContext *C, wmOperator *UNUSED(op), wmEvent v3d->lens = sms->new_lens*step + sms->orig_lens*step_inv; } + if(rv3d->viewlock & RV3D_BOXVIEW) + view3d_boxview_copy(CTX_wm_area(C), CTX_wm_region(C)); + WM_event_add_notifier(C, NC_SPACE|ND_SPACE_VIEW3D, v3d); return OPERATOR_FINISHED; -- cgit v1.2.3 From c300d58497f2eb51614e07101f7f08a25cc167a3 Mon Sep 17 00:00:00 2001 From: Campbell Barton Date: Mon, 8 Nov 2010 02:30:46 +0000 Subject: - when orbiting the view out of camera mode use the ortho/persp setting of the camera. - display the physical size of a ortho camera since, unlike a perspective camera the ortho scale can be converted into a plane with real size. --- source/blender/editors/space_view3d/drawobject.c | 41 +++++++++++++---------- source/blender/editors/space_view3d/view3d_edit.c | 16 +++++++-- 2 files changed, 37 insertions(+), 20 deletions(-) (limited to 'source/blender/editors/space_view3d') diff --git a/source/blender/editors/space_view3d/drawobject.c b/source/blender/editors/space_view3d/drawobject.c index 5c95a6a3026..b9cbff77b02 100644 --- a/source/blender/editors/space_view3d/drawobject.c +++ b/source/blender/editors/space_view3d/drawobject.c @@ -1218,9 +1218,10 @@ static void drawcamera(Scene *scene, View3D *v3d, RegionView3D *rv3d, Object *ob { /* a standing up pyramid with (0,0,0) as top */ Camera *cam; - World *wrld; - float nobmat[4][4], vec[8][4], fac, facx, facy, depth, aspx, aspy, caspx, caspy, shx, shy; + float vec[8][4], facx, facy, depth, aspx, aspy, caspx, caspy, shx, shy; int i; + float drawsize; + const short is_view= (rv3d->persp==RV3D_CAMOB && ob==v3d->camera); cam= ob->data; aspx= (float) scene->r.xsch*scene->r.xasp; @@ -1238,40 +1239,43 @@ static void drawcamera(Scene *scene, View3D *v3d, RegionView3D *rv3d, Object *ob glDisable(GL_LIGHTING); glDisable(GL_CULL_FACE); - if(rv3d->persp==RV3D_CAMOB && cam->type==CAM_ORTHO && ob==v3d->camera) { - facx= 0.5*cam->ortho_scale*caspx; - facy= 0.5*cam->ortho_scale*caspy; + if(cam->type==CAM_ORTHO) { + facx= 0.5f * cam->ortho_scale * caspx; + facy= 0.5f * cam->ortho_scale * caspy; shx= cam->shiftx * cam->ortho_scale; shy= cam->shifty * cam->ortho_scale; - depth= -cam->clipsta-0.1; + depth= -(is_view ? cam->clipsta - 0.1f : MAX2(facx, facy)); + drawsize= 0.5f * cam->ortho_scale; } else { - fac= cam->drawsize; - if(rv3d->persp==RV3D_CAMOB && ob==v3d->camera) fac= cam->clipsta+0.1; /* that way it's always visible */ - + /* that way it's always visible - clipsta+0.1 */ + const float fac= is_view ? (cam->clipsta + 0.1f) : cam->drawsize; depth= - fac*cam->lens/16.0; facx= fac*caspx; facy= fac*caspy; shx= cam->shiftx*fac*2; shy= cam->shifty*fac*2; + drawsize= cam->drawsize; } - vec[0][0]= 0.0; vec[0][1]= 0.0; vec[0][2]= 0.001; /* GLBUG: for picking at iris Entry (well thats old!) */ + vec[0][0]= 0.0; vec[0][1]= 0.0; vec[0][2]= 0.0; vec[1][0]= shx + facx; vec[1][1]= shy + facy; vec[1][2]= depth; vec[2][0]= shx + facx; vec[2][1]= shy - facy; vec[2][2]= depth; vec[3][0]= shx - facx; vec[3][1]= shy - facy; vec[3][2]= depth; vec[4][0]= shx - facx; vec[4][1]= shy + facy; vec[4][2]= depth; + /* camera frame */ glBegin(GL_LINE_LOOP); glVertex3fv(vec[1]); glVertex3fv(vec[2]); glVertex3fv(vec[3]); glVertex3fv(vec[4]); glEnd(); - - if(rv3d->persp==RV3D_CAMOB && ob==v3d->camera) return; - + if(is_view) + return; + + /* center point to camera frame */ glBegin(GL_LINE_STRIP); glVertex3fv(vec[2]); glVertex3fv(vec[0]); @@ -1294,15 +1298,15 @@ static void drawcamera(Scene *scene, View3D *v3d, RegionView3D *rv3d, Object *ob else if (i==1 && (ob == v3d->camera)) glBegin(GL_TRIANGLES); else break; - vec[0][0]= shx + (-0.7 * cam->drawsize); - vec[0][1]= shy + (cam->drawsize * (caspy + 0.1)); + vec[0][0]= shx + (-0.7 * drawsize); + vec[0][1]= shy + (drawsize * (caspy + 0.1)); glVertex3fv(vec[0]); /* left */ - vec[0][0]= shx + (0.7 * cam->drawsize); + vec[0][0]= shx + (0.7 * drawsize); glVertex3fv(vec[0]); /* right */ vec[0][0]= shx; - vec[0][1]= shy + (1.1 * cam->drawsize * (caspy + 0.7)); + vec[0][1]= shy + (1.1 * drawsize * (caspy + 0.7)); glVertex3fv(vec[0]); /* top */ glEnd(); @@ -1310,6 +1314,9 @@ static void drawcamera(Scene *scene, View3D *v3d, RegionView3D *rv3d, Object *ob if(flag==0) { if(cam->flag & (CAM_SHOWLIMITS+CAM_SHOWMIST)) { + float nobmat[4][4]; + World *wrld; + /* draw in normalized object matrix space */ copy_m4_m4(nobmat, ob->obmat); normalize_m4(nobmat); diff --git a/source/blender/editors/space_view3d/view3d_edit.c b/source/blender/editors/space_view3d/view3d_edit.c index d8913e494f3..7faaa8c6a3f 100644 --- a/source/blender/editors/space_view3d/view3d_edit.c +++ b/source/blender/editors/space_view3d/view3d_edit.c @@ -34,6 +34,7 @@ #include "DNA_armature_types.h" #include "DNA_object_types.h" #include "DNA_scene_types.h" +#include "DNA_camera_types.h" #include "MEM_guardedalloc.h" @@ -737,10 +738,19 @@ static int viewrotate_invoke(bContext *C, wmOperator *op, wmEvent *event) /* changed since 2.4x, use the camera view */ View3D *v3d = CTX_wm_view3d(C); - if(v3d->camera) - view3d_settings_from_ob(v3d->camera, rv3d->ofs, rv3d->viewquat, &rv3d->dist, NULL); - vod->rv3d->persp= RV3D_PERSP; + if(v3d->camera) { + view3d_settings_from_ob(v3d->camera, rv3d->ofs, rv3d->viewquat, &rv3d->dist, NULL); + if(v3d->camera->type == OB_CAMERA) { + /* overwrite setting from above with cameras perspective */ + vod->rv3d->persp= (((Camera *)v3d->camera->data)->type==CAM_ORTHO) ? RV3D_ORTHO : RV3D_PERSP; + } + } + + /* if not overwritten above */ + if(vod->rv3d->persp==RV3D_CAMOB) { + vod->rv3d->persp= RV3D_PERSP; + } } ED_region_tag_redraw(vod->ar); } -- cgit v1.2.3 From 85b9652258f515b7d0f0133df9166c4aae6136af Mon Sep 17 00:00:00 2001 From: Campbell Barton Date: Mon, 8 Nov 2010 03:44:52 +0000 Subject: fix for glitches with quad-split view. - Home or Numpad Period with smoothview disabled were not syncing up the other views. - Disabling clip only disabled clip syncing but left clip enabled for all views. - Clip was being calculated for every update even when not enabled. - The perspective view was being used to copy settings from when changing box & clip settings, resetting the distance each time. Now use one of the aligned views instead. --- source/blender/editors/space_view3d/view3d_edit.c | 39 +++++++++++++++++++---- source/blender/editors/space_view3d/view3d_view.c | 23 +++++++++---- 2 files changed, 48 insertions(+), 14 deletions(-) (limited to 'source/blender/editors/space_view3d') diff --git a/source/blender/editors/space_view3d/view3d_edit.c b/source/blender/editors/space_view3d/view3d_edit.c index 7faaa8c6a3f..24e1c08617e 100644 --- a/source/blender/editors/space_view3d/view3d_edit.c +++ b/source/blender/editors/space_view3d/view3d_edit.c @@ -159,6 +159,7 @@ static void view3d_boxview_sync(ScrArea *sa, ARegion *ar) { ARegion *artest; RegionView3D *rv3d= ar->regiondata; + short clip= 0; for(artest= sa->regionbase.first; artest; artest= artest->next) { if(artest!=ar && artest->regiontype==RGN_TYPE_WINDOW) { @@ -186,11 +187,16 @@ static void view3d_boxview_sync(ScrArea *sa, ARegion *ar) rv3dtest->ofs[2]= rv3d->ofs[2]; } + clip |= rv3dtest->viewlock & RV3D_BOXCLIP; + ED_region_tag_redraw(artest); } } } - view3d_boxview_clip(sa); + + if(clip) { + view3d_boxview_clip(sa); + } } /* for home, center etc */ @@ -198,6 +204,7 @@ void view3d_boxview_copy(ScrArea *sa, ARegion *ar) { ARegion *artest; RegionView3D *rv3d= ar->regiondata; + short clip= 0; for(artest= sa->regionbase.first; artest; artest= artest->next) { if(artest!=ar && artest->regiontype==RGN_TYPE_WINDOW) { @@ -207,17 +214,23 @@ void view3d_boxview_copy(ScrArea *sa, ARegion *ar) rv3dtest->dist= rv3d->dist; copy_v3_v3(rv3dtest->ofs, rv3d->ofs); ED_region_tag_redraw(artest); + + clip |= rv3dtest->viewlock & RV3D_BOXCLIP; } } } - view3d_boxview_clip(sa); + + if(clip) { + view3d_boxview_clip(sa); + } } -void ED_view3d_quadview_update(ScrArea *sa, ARegion *ar) +/* 'clip' is used to know if our clip setting has changed */ +void ED_view3d_quadview_update(ScrArea *sa, ARegion *ar, short do_clip) { + ARegion *arsync= NULL; RegionView3D *rv3d= ar->regiondata; short viewlock; - /* this function copies flags from the first of the 3 other quadview regions to the 2 other, so it assumes this is the region whose properties are always being edited, weak */ @@ -225,18 +238,30 @@ void ED_view3d_quadview_update(ScrArea *sa, ARegion *ar) if((viewlock & RV3D_LOCKED)==0) viewlock= 0; - else if((viewlock & RV3D_BOXVIEW)==0) + else if((viewlock & RV3D_BOXVIEW)==0) { viewlock &= ~RV3D_BOXCLIP; + do_clip= TRUE; + } for(; ar; ar= ar->prev) { if(ar->alignment==RGN_ALIGN_QSPLIT) { rv3d= ar->regiondata; rv3d->viewlock= viewlock; + + if(do_clip && (viewlock & RV3D_BOXCLIP)==0) { + rv3d->rflag &= ~RV3D_BOXCLIP; + } + + /* use arsync so we sync with one of the aligned views below + * else the view jumps on changing view settings like 'clip' + * since it copies from the perspective view */ + arsync= ar; } } - if(rv3d->viewlock & RV3D_BOXVIEW) - view3d_boxview_copy(sa, sa->regionbase.last); + if(rv3d->viewlock & RV3D_BOXVIEW) { + view3d_boxview_copy(sa, arsync ? arsync : sa->regionbase.last); + } ED_area_tag_redraw(sa); } diff --git a/source/blender/editors/space_view3d/view3d_view.c b/source/blender/editors/space_view3d/view3d_view.c index 80de1cdc040..52fe0b2304d 100644 --- a/source/blender/editors/space_view3d/view3d_view.c +++ b/source/blender/editors/space_view3d/view3d_view.c @@ -180,6 +180,7 @@ void smooth_view(bContext *C, Object *oldcamera, Object *camera, float *ofs, flo View3D *v3d = CTX_wm_view3d(C); RegionView3D *rv3d= CTX_wm_region_view3d(C); struct SmoothViewStore sms= {0}; + short ok= FALSE; /* initialize sms */ copy_v3_v3(sms.new_ofs, rv3d->ofs); @@ -269,18 +270,26 @@ void smooth_view(bContext *C, Object *oldcamera, Object *camera, float *ofs, flo /* TIMER1 is hardcoded in keymap */ rv3d->smooth_timer= WM_event_add_timer(CTX_wm_manager(C), CTX_wm_window(C), TIMER1, 1.0/100.0); /* max 30 frs/sec */ - return; + ok= TRUE; } } /* if we get here nothing happens */ - if(sms.to_camera==0) { - copy_v3_v3(rv3d->ofs, sms.new_ofs); - copy_qt_qt(rv3d->viewquat, sms.new_quat); - rv3d->dist = sms.new_dist; - v3d->lens = sms.new_lens; + if(ok == FALSE) { + ARegion *ar= CTX_wm_region(C); + + if(sms.to_camera==0) { + copy_v3_v3(rv3d->ofs, sms.new_ofs); + copy_qt_qt(rv3d->viewquat, sms.new_quat); + rv3d->dist = sms.new_dist; + v3d->lens = sms.new_lens; + } + + if(rv3d->viewlock & RV3D_BOXVIEW) + view3d_boxview_copy(CTX_wm_area(C), ar); + + ED_region_tag_redraw(ar); } - ED_region_tag_redraw(CTX_wm_region(C)); } /* only meant for timer usage */ -- cgit v1.2.3 From a6525449099e9912073479a8ca1789ba5773799d Mon Sep 17 00:00:00 2001 From: Campbell Barton Date: Mon, 8 Nov 2010 03:55:03 +0000 Subject: change from recent commit. when orbiting out of the camera view switch to the last used perspective. --- source/blender/editors/space_view3d/view3d_edit.c | 12 ++++-------- 1 file changed, 4 insertions(+), 8 deletions(-) (limited to 'source/blender/editors/space_view3d') diff --git a/source/blender/editors/space_view3d/view3d_edit.c b/source/blender/editors/space_view3d/view3d_edit.c index 24e1c08617e..5af548da170 100644 --- a/source/blender/editors/space_view3d/view3d_edit.c +++ b/source/blender/editors/space_view3d/view3d_edit.c @@ -757,8 +757,9 @@ static int viewrotate_invoke(bContext *C, wmOperator *op, wmEvent *event) /* switch from camera view when: */ if(vod->rv3d->persp != RV3D_PERSP) { - if (U.uiflag & USER_AUTOPERSP) + if (U.uiflag & USER_AUTOPERSP) { vod->rv3d->persp= RV3D_PERSP; + } else if(vod->rv3d->persp==RV3D_CAMOB) { /* changed since 2.4x, use the camera view */ @@ -766,15 +767,10 @@ static int viewrotate_invoke(bContext *C, wmOperator *op, wmEvent *event) if(v3d->camera) { view3d_settings_from_ob(v3d->camera, rv3d->ofs, rv3d->viewquat, &rv3d->dist, NULL); - if(v3d->camera->type == OB_CAMERA) { - /* overwrite setting from above with cameras perspective */ - vod->rv3d->persp= (((Camera *)v3d->camera->data)->type==CAM_ORTHO) ? RV3D_ORTHO : RV3D_PERSP; - } } - - /* if not overwritten above */ + if(vod->rv3d->persp==RV3D_CAMOB) { - vod->rv3d->persp= RV3D_PERSP; + vod->rv3d->persp= vod->rv3d->lpersp; } } ED_region_tag_redraw(vod->ar); -- cgit v1.2.3 From cc395e4d2fe810edac2ee2ff55af0e9cd7e696c1 Mon Sep 17 00:00:00 2001 From: Campbell Barton Date: Mon, 8 Nov 2010 09:38:48 +0000 Subject: fix for not being able to select the camera while in the camera view, also draw the camera unscaled in the 3D view. --- source/blender/editors/space_view3d/drawobject.c | 41 ++++++++++++++---------- 1 file changed, 24 insertions(+), 17 deletions(-) (limited to 'source/blender/editors/space_view3d') diff --git a/source/blender/editors/space_view3d/drawobject.c b/source/blender/editors/space_view3d/drawobject.c index b9cbff77b02..ba33b19cad7 100644 --- a/source/blender/editors/space_view3d/drawobject.c +++ b/source/blender/editors/space_view3d/drawobject.c @@ -1223,6 +1223,10 @@ static void drawcamera(Scene *scene, View3D *v3d, RegionView3D *rv3d, Object *ob float drawsize; const short is_view= (rv3d->persp==RV3D_CAMOB && ob==v3d->camera); + const float scax= 1.0f / len_v3(ob->obmat[0]); + const float scay= 1.0f / len_v3(ob->obmat[1]); + const float scaz= 1.0f / len_v3(ob->obmat[2]); + cam= ob->data; aspx= (float) scene->r.xsch*scene->r.xasp; aspy= (float) scene->r.ysch*scene->r.yasp; @@ -1240,22 +1244,25 @@ static void drawcamera(Scene *scene, View3D *v3d, RegionView3D *rv3d, Object *ob glDisable(GL_CULL_FACE); if(cam->type==CAM_ORTHO) { - facx= 0.5f * cam->ortho_scale * caspx; - facy= 0.5f * cam->ortho_scale * caspy; - shx= cam->shiftx * cam->ortho_scale; - shy= cam->shifty * cam->ortho_scale; - depth= -(is_view ? cam->clipsta - 0.1f : MAX2(facx, facy)); + facx= 0.5f * cam->ortho_scale * caspx * scax; + facy= 0.5f * cam->ortho_scale * caspy * scay; + shx= cam->shiftx * cam->ortho_scale * scax; + shy= cam->shifty * cam->ortho_scale * scay; + depth= is_view ? -((cam->clipsta * scaz) + 0.1f) : - cam->drawsize * cam->ortho_scale * scaz; + drawsize= 0.5f * cam->ortho_scale; } else { /* that way it's always visible - clipsta+0.1 */ - const float fac= is_view ? (cam->clipsta + 0.1f) : cam->drawsize; - depth= - fac*cam->lens/16.0; - facx= fac*caspx; - facy= fac*caspy; - shx= cam->shiftx*fac*2; - shy= cam->shifty*fac*2; - drawsize= cam->drawsize; + float fac; + drawsize= cam->drawsize / ((scax + scay + scaz) / 3.0f); + fac= is_view ? (cam->clipsta + 0.1f) : drawsize; + depth= - fac*cam->lens/16.0 * scaz; + facx= fac * caspx * scax; + facy= fac * caspy * scay; + shx= cam->shiftx*fac*2 * scax; + shy= cam->shifty*fac*2 * scay; + } vec[0][0]= 0.0; vec[0][1]= 0.0; vec[0][2]= 0.0; @@ -1289,7 +1296,7 @@ static void drawcamera(Scene *scene, View3D *v3d, RegionView3D *rv3d, Object *ob /* arrow on top */ vec[0][2]= depth; - + /* draw an outline arrow for inactive cameras and filled * for active cameras. We actually draw both outline+filled * for active cameras so the wire can be seen side-on */ @@ -1298,15 +1305,15 @@ static void drawcamera(Scene *scene, View3D *v3d, RegionView3D *rv3d, Object *ob else if (i==1 && (ob == v3d->camera)) glBegin(GL_TRIANGLES); else break; - vec[0][0]= shx + (-0.7 * drawsize); - vec[0][1]= shy + (drawsize * (caspy + 0.1)); + vec[0][0]= shx + ((-0.7 * drawsize) * scax); + vec[0][1]= shy + ((drawsize * (caspy + 0.1)) * scay); glVertex3fv(vec[0]); /* left */ - vec[0][0]= shx + (0.7 * drawsize); + vec[0][0]= shx + ((0.7 * drawsize) * scax); glVertex3fv(vec[0]); /* right */ vec[0][0]= shx; - vec[0][1]= shy + (1.1 * drawsize * (caspy + 0.7)); + vec[0][1]= shy + ((1.1 * drawsize * (caspy + 0.7)) * scay); glVertex3fv(vec[0]); /* top */ glEnd(); -- cgit v1.2.3 From c4967b5dde966a3342a835fc8831fa170f856a97 Mon Sep 17 00:00:00 2001 From: Campbell Barton Date: Mon, 8 Nov 2010 22:32:28 +0000 Subject: bugfix [#24616] Apply Visual Transform doesn't always apply location - object updates were not being flushed, so children weren't updating. - apply the matrix relative to the parent, added this as an option to object_apply_mat4() which allows assigning the worldspace matrix in python without worrying about the parent. --- source/blender/editors/space_view3d/view3d_fly.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'source/blender/editors/space_view3d') diff --git a/source/blender/editors/space_view3d/view3d_fly.c b/source/blender/editors/space_view3d/view3d_fly.c index e137270aa5b..b6372242a9a 100644 --- a/source/blender/editors/space_view3d/view3d_fly.c +++ b/source/blender/editors/space_view3d/view3d_fly.c @@ -794,7 +794,7 @@ static int flyApply(bContext *C, FlyInfo *fly) view3d_persp_mat4(rv3d, view_mat); mul_m4_m4m4(diff_mat, prev_view_imat, view_mat); mul_m4_m4m4(parent_mat, fly->root_parent->obmat, diff_mat); - object_apply_mat4(fly->root_parent, parent_mat, TRUE); + object_apply_mat4(fly->root_parent, parent_mat, TRUE, FALSE); // where_is_object(scene, fly->root_parent); @@ -812,7 +812,7 @@ static int flyApply(bContext *C, FlyInfo *fly) else { float view_mat[4][4]; view3d_persp_mat4(rv3d, view_mat); - object_apply_mat4(v3d->camera, view_mat, TRUE); + object_apply_mat4(v3d->camera, view_mat, TRUE, FALSE); id_key= &v3d->camera->id; } -- cgit v1.2.3 From 80a650dfb1e73363ae6924dc5738b732bb89ded4 Mon Sep 17 00:00:00 2001 From: Campbell Barton Date: Thu, 11 Nov 2010 06:35:45 +0000 Subject: BLF_draw functions take an extra length argument, so the console drawing doenst need to swap in NULL chars to draw word wrapping. --- source/blender/editors/space_view3d/drawobject.c | 4 +-- source/blender/editors/space_view3d/view3d_draw.c | 33 +++++++++-------------- 2 files changed, 15 insertions(+), 22 deletions(-) (limited to 'source/blender/editors/space_view3d') diff --git a/source/blender/editors/space_view3d/drawobject.c b/source/blender/editors/space_view3d/drawobject.c index ba33b19cad7..662acb82b3e 100644 --- a/source/blender/editors/space_view3d/drawobject.c +++ b/source/blender/editors/space_view3d/drawobject.c @@ -643,10 +643,10 @@ void view3d_cached_text_draw_end(View3D *v3d, ARegion *ar, int depth_write, floa const char *str= (char *)(vos+1); glColor3fv(vos->col); if(vos->flag & V3D_CACHE_TEXT_ASCII) { - BLF_draw_default_ascii((float)vos->mval[0]+vos->xoffs, (float)vos->mval[1], (depth_write)? 0.0f: 2.0f, str); + BLF_draw_default_ascii((float)vos->mval[0]+vos->xoffs, (float)vos->mval[1], (depth_write)? 0.0f: 2.0f, str, 65535); /* XXX, use real length */ } else { - BLF_draw_default((float)vos->mval[0]+vos->xoffs, (float)vos->mval[1], (depth_write)? 0.0f: 2.0f, str); + BLF_draw_default((float)vos->mval[0]+vos->xoffs, (float)vos->mval[1], (depth_write)? 0.0f: 2.0f, str, 65535); /* XXX, use real length */ } } } diff --git a/source/blender/editors/space_view3d/view3d_draw.c b/source/blender/editors/space_view3d/view3d_draw.c index 27afe07c4b2..c890c884f64 100644 --- a/source/blender/editors/space_view3d/view3d_draw.c +++ b/source/blender/editors/space_view3d/view3d_draw.c @@ -604,7 +604,7 @@ static void draw_view_axis(RegionView3D *rv3d) glEnd(); if (fabs(dx) > toll || fabs(dy) > toll) { - BLF_draw_default(start + dx + 2, start + dy + ydisp + 2, 0.0f, "x"); + BLF_draw_default(start + dx + 2, start + dy + ydisp + 2, 0.0f, "x", 1); } /* BLF_draw_default disables blending */ @@ -624,7 +624,7 @@ static void draw_view_axis(RegionView3D *rv3d) glEnd(); if (fabs(dx) > toll || fabs(dy) > toll) { - BLF_draw_default(start + dx + 2, start + dy + ydisp + 2, 0.0f, "y"); + BLF_draw_default(start + dx + 2, start + dy + ydisp + 2, 0.0f, "y", 1); } glEnable(GL_BLEND); @@ -643,7 +643,7 @@ static void draw_view_axis(RegionView3D *rv3d) glEnd(); if (fabs(dx) > toll || fabs(dy) > toll) { - BLF_draw_default(start + dx + 2, start + dy + ydisp + 2, 0.0f, "z"); + BLF_draw_default(start + dx + 2, start + dy + ydisp + 2, 0.0f, "z", 1); } /* restore line-width */ @@ -724,24 +724,17 @@ static char *view3d_get_name(View3D *v3d, RegionView3D *rv3d) static void draw_viewport_name(ARegion *ar, View3D *v3d) { RegionView3D *rv3d= ar->regiondata; - char *name = view3d_get_name(v3d, rv3d); - char *printable = NULL; + char *name= view3d_get_name(v3d, rv3d); + char tmpstr[24]; if (v3d->localvd) { - printable = MEM_mallocN(strlen(name) + strlen(" (Local)_"), "viewport_name"); /* '_' gives space for '\0' */ - strcpy(printable, name); - strcat(printable, " (Local)"); - } else { - printable = name; + snprintf(tmpstr, sizeof(tmpstr), "%s (Local)", name); + name= tmpstr; } - if (printable) { + if (name) { UI_ThemeColor(TH_TEXT_HI); - BLF_draw_default(22, ar->winy-17, 0.0f, printable); - } - - if (v3d->localvd) { - MEM_freeN(printable); + BLF_draw_default(22, ar->winy-17, 0.0f, name, sizeof(tmpstr)); } } @@ -836,7 +829,7 @@ static void draw_selected_name(Scene *scene, Object *ob, View3D *v3d) if (U.uiflag & USER_SHOW_ROTVIEWICON) offset = 14 + (U.rvisize * 2); - BLF_draw_default(offset, 10, 0.0f, info); + BLF_draw_default(offset, 10, 0.0f, info, sizeof(info)-1); } static void view3d_get_viewborder_size(Scene *scene, ARegion *ar, float size_r[2]) @@ -1015,7 +1008,7 @@ static void drawviewborder(Scene *scene, ARegion *ar, View3D *v3d) /* camera name - draw in highlighted text color */ if (ca && (ca->flag & CAM_SHOWNAME)) { UI_ThemeColor(TH_TEXT_HI); - BLF_draw_default(x1i, y1i-15, 0.0f, v3d->camera->id.name+2); + BLF_draw_default(x1i, y1i-15, 0.0f, v3d->camera->id.name+2, sizeof(v3d->camera->id.name)-2); UI_ThemeColor(TH_WIRE); } } @@ -2274,7 +2267,7 @@ static void draw_viewport_fps(Scene *scene, ARegion *ar) BLI_snprintf(printable, sizeof(printable), "fps: %i", (int)(fps+0.5)); } - BLF_draw_default(22, ar->winy-17, 0.0f, printable); + BLF_draw_default(22, ar->winy-17, 0.0f, printable, sizeof(printable)-1); } void view3d_main_area_draw(const bContext *C, ARegion *ar) @@ -2507,7 +2500,7 @@ void view3d_main_area_draw(const bContext *C, ARegion *ar) } if (grid_unit) { /* draw below the viewport name */ UI_ThemeColor(TH_TEXT_HI); - BLF_draw_default(22, ar->winy-(USER_SHOW_VIEWPORTNAME?40:20), 0.0f, grid_unit); + BLF_draw_default(22, ar->winy-(USER_SHOW_VIEWPORTNAME?40:20), 0.0f, grid_unit, 65535); /* XXX, use real length */ } ob= OBACT; -- cgit v1.2.3 From 36901ff5bb346c0e43591bb9f8f0e8cc079dbcd0 Mon Sep 17 00:00:00 2001 From: Campbell Barton Date: Thu, 11 Nov 2010 11:46:45 +0000 Subject: use BLI_snprintf, fixed building on msvc. --- source/blender/editors/space_view3d/view3d_draw.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'source/blender/editors/space_view3d') diff --git a/source/blender/editors/space_view3d/view3d_draw.c b/source/blender/editors/space_view3d/view3d_draw.c index c890c884f64..d21a0ac6721 100644 --- a/source/blender/editors/space_view3d/view3d_draw.c +++ b/source/blender/editors/space_view3d/view3d_draw.c @@ -728,7 +728,7 @@ static void draw_viewport_name(ARegion *ar, View3D *v3d) char tmpstr[24]; if (v3d->localvd) { - snprintf(tmpstr, sizeof(tmpstr), "%s (Local)", name); + BLI_snprintf(tmpstr, sizeof(tmpstr), "%s (Local)", name); name= tmpstr; } -- cgit v1.2.3 From 7be25eba132aecc74cb1ccaecbac150ee0bb87a6 Mon Sep 17 00:00:00 2001 From: Campbell Barton Date: Mon, 15 Nov 2010 00:07:38 +0000 Subject: fix [#24712] 3ds_import fix Rather then applying the proposed fix, enabling 'Apply Transform' works in almost all cases including the reported one. There are some files that don't work with 'Apply Transform', which is why the option is worth keeping. also remove unneeded calls to paint_facesel_test() --- source/blender/editors/space_view3d/drawobject.c | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) (limited to 'source/blender/editors/space_view3d') diff --git a/source/blender/editors/space_view3d/drawobject.c b/source/blender/editors/space_view3d/drawobject.c index 662acb82b3e..fa5000a5c9e 100644 --- a/source/blender/editors/space_view3d/drawobject.c +++ b/source/blender/editors/space_view3d/drawobject.c @@ -2335,7 +2335,7 @@ static void draw_em_fancy(Scene *scene, View3D *v3d, RegionView3D *rv3d, Object } } - if((me->drawflag & (ME_DRAWFACES)) || paint_facesel_test(ob)) { /* transp faces */ + if(me->drawflag & ME_DRAWFACES) { /* transp faces */ unsigned char col1[4], col2[4], col3[4]; UI_GetThemeColor4ubv(TH_FACE, (char *)col1); @@ -2472,7 +2472,8 @@ static void draw_mesh_fancy(Scene *scene, ARegion *ar, View3D *v3d, RegionView3D Object *ob= base->object; Mesh *me = ob->data; Material *ma= give_current_material(ob, 1); - int hasHaloMat = (ma && (ma->material_type == MA_TYPE_HALO)); + const short hasHaloMat = (ma && (ma->material_type == MA_TYPE_HALO)); + const short is_paint_sel= (ob==OBACT && paint_facesel_test(ob)); int draw_wire = 0; int totvert, totedge, totface; DispList *dl; @@ -2494,7 +2495,7 @@ static void draw_mesh_fancy(Scene *scene, ARegion *ar, View3D *v3d, RegionView3D glFrontFace((ob->transflag&OB_NEG_SCALE)?GL_CW:GL_CCW); // Unwanted combination. - if (ob==OBACT && paint_facesel_test(ob)) draw_wire = 0; + if (is_paint_sel) draw_wire = 0; if(dt==OB_BOUNDBOX) { if((v3d->flag2 & V3D_RENDER_OVERRIDE && v3d->drawtype >= OB_WIRE)==0) @@ -2508,11 +2509,10 @@ static void draw_mesh_fancy(Scene *scene, ARegion *ar, View3D *v3d, RegionView3D else if(dt==OB_WIRE || totface==0) { draw_wire = 1; /* draw wire only, no depth buffer stuff */ } - else if( (ob==OBACT && (ob->mode & OB_MODE_TEXTURE_PAINT || paint_facesel_test(ob))) || + else if( (is_paint_sel && (ob->mode & OB_MODE_TEXTURE_PAINT)) || CHECK_OB_DRAWTEXTURE(v3d, dt)) { - int faceselect= (ob==OBACT && paint_facesel_test(ob)); - if ((v3d->flag&V3D_SELECT_OUTLINE) && ((v3d->flag2 & V3D_RENDER_OVERRIDE)==0) && (base->flag&SELECT) && !(G.f&G_PICKSEL || paint_facesel_test(ob)) && !draw_wire) { + if ((v3d->flag&V3D_SELECT_OUTLINE) && ((v3d->flag2 & V3D_RENDER_OVERRIDE)==0) && (base->flag&SELECT) && !(G.f&G_PICKSEL || is_paint_sel) && !draw_wire) { draw_mesh_object_outline(v3d, ob, dm); } @@ -2527,10 +2527,10 @@ static void draw_mesh_fancy(Scene *scene, ARegion *ar, View3D *v3d, RegionView3D glFrontFace(GL_CCW); } else { - draw_mesh_textured(scene, v3d, rv3d, ob, dm, faceselect); + draw_mesh_textured(scene, v3d, rv3d, ob, dm, is_paint_sel); } - if(!faceselect) { + if(!is_paint_sel) { if(base->flag & SELECT) UI_ThemeColor((ob==OBACT)?TH_ACTIVE:TH_SELECT); else -- cgit v1.2.3 From df9bedddcfd1cc4888eeafb71586830e95d03ebc Mon Sep 17 00:00:00 2001 From: Campbell Barton Date: Mon, 15 Nov 2010 08:53:35 +0000 Subject: bugfix [#24708] World Notifier Problems also draw stars when 'Only Render' option is enabled. --- source/blender/editors/space_view3d/space_view3d.c | 7 +++++++ source/blender/editors/space_view3d/view3d_draw.c | 23 ++++++++++++---------- 2 files changed, 20 insertions(+), 10 deletions(-) (limited to 'source/blender/editors/space_view3d') diff --git a/source/blender/editors/space_view3d/space_view3d.c b/source/blender/editors/space_view3d/space_view3d.c index f5c1612f786..612f2b4af48 100644 --- a/source/blender/editors/space_view3d/space_view3d.c +++ b/source/blender/editors/space_view3d/space_view3d.c @@ -654,6 +654,13 @@ static void view3d_main_area_listener(ARegion *ar, wmNotifier *wmn) case ND_WORLD_DRAW: /* handled by space_view3d_listener() for v3d access */ break; + case ND_WORLD_STARS: + { + RegionView3D *rv3d= ar->regiondata; + if(rv3d->persp == RV3D_CAMOB) { + ED_region_tag_redraw(ar); + } + } } break; case NC_LAMP: diff --git a/source/blender/editors/space_view3d/view3d_draw.c b/source/blender/editors/space_view3d/view3d_draw.c index d21a0ac6721..2bdba27a237 100644 --- a/source/blender/editors/space_view3d/view3d_draw.c +++ b/source/blender/editors/space_view3d/view3d_draw.c @@ -2332,22 +2332,25 @@ void view3d_main_area_draw(const bContext *C, ARegion *ar) // needs to be done always, gridview is adjusted in drawgrid() now rv3d->gridview= v3d->grid; - - if ((v3d->flag2 & V3D_RENDER_OVERRIDE)==0) { - if(rv3d->view==0 || rv3d->persp != RV3D_ORTHO) { + if(rv3d->view==0 || rv3d->persp != RV3D_ORTHO) { + if ((v3d->flag2 & V3D_RENDER_OVERRIDE)==0) { drawfloor(scene, v3d); - if(rv3d->persp==RV3D_CAMOB) { - if(scene->world) { - if(scene->world->mode & WO_STARS) { - RE_make_stars(NULL, scene, star_stuff_init_func, star_stuff_vertex_func, - star_stuff_term_func); - } + } + if(rv3d->persp==RV3D_CAMOB) { + if(scene->world) { + if(scene->world->mode & WO_STARS) { + RE_make_stars(NULL, scene, star_stuff_init_func, star_stuff_vertex_func, + star_stuff_term_func); } + } + if ((v3d->flag2 & V3D_RENDER_OVERRIDE)==0) { if(v3d->flag & V3D_DISPBGPICS) draw_bgpic(scene, ar, v3d); } } - else { + } + else { + if ((v3d->flag2 & V3D_RENDER_OVERRIDE)==0) { ED_region_pixelspace(ar); drawgrid(&scene->unit, ar, v3d, &grid_unit); /* XXX make function? replaces persp(1) */ -- cgit v1.2.3 From ccf1f08f378db5f39e2ac1a3208e36998af56268 Mon Sep 17 00:00:00 2001 From: Ton Roosendaal Date: Mon, 15 Nov 2010 11:45:54 +0000 Subject: Bugfix (IRC report) Bone drawing code failed to check the correnct parent pointer, causing NULL pointer to be read. Thanks Wahooney! --- source/blender/editors/space_view3d/drawarmature.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'source/blender/editors/space_view3d') diff --git a/source/blender/editors/space_view3d/drawarmature.c b/source/blender/editors/space_view3d/drawarmature.c index 8cfb11478be..e65751e1f9d 100644 --- a/source/blender/editors/space_view3d/drawarmature.c +++ b/source/blender/editors/space_view3d/drawarmature.c @@ -1772,7 +1772,7 @@ static void draw_pose_bones(Scene *scene, View3D *v3d, ARegion *ar, Base *base, if ((bone) && !(bone->flag & (BONE_HIDDEN_P|BONE_HIDDEN_PG))) { if (bone->layer & arm->layer) { - if ((do_dashed & 1) && (bone->parent)) { + if ((do_dashed & 1) && (pchan->parent)) { /* Draw a line from our root to the parent's tip * - only if V3D_HIDE_HELPLINES is enabled... */ -- cgit v1.2.3 From 5a1fdcdc2aad2543c2b615273baff0d8d0329096 Mon Sep 17 00:00:00 2001 From: Campbell Barton Date: Tue, 16 Nov 2010 09:35:58 +0000 Subject: bugfix [#24746] Align Camera to View locks 3D Editor in Camera Perspective View --- source/blender/editors/space_view3d/view3d_edit.c | 39 ++++++++++++----------- source/blender/editors/space_view3d/view3d_view.c | 4 ++- 2 files changed, 24 insertions(+), 19 deletions(-) (limited to 'source/blender/editors/space_view3d') diff --git a/source/blender/editors/space_view3d/view3d_edit.c b/source/blender/editors/space_view3d/view3d_edit.c index 5af548da170..3bfe4fa604a 100644 --- a/source/blender/editors/space_view3d/view3d_edit.c +++ b/source/blender/editors/space_view3d/view3d_edit.c @@ -733,7 +733,7 @@ static int viewrotate_modal(bContext *C, wmOperator *op, wmEvent *event) viewrotate_apply(vod, event->x, event->y); } else if (event_code==VIEW_CONFIRM) { - request_depth_update(CTX_wm_region_view3d(C)); + request_depth_update(vod->rv3d); viewops_data_free(C, op); return OPERATOR_FINISHED; @@ -744,33 +744,36 @@ static int viewrotate_modal(bContext *C, wmOperator *op, wmEvent *event) static int viewrotate_invoke(bContext *C, wmOperator *op, wmEvent *event) { - RegionView3D *rv3d= CTX_wm_region_view3d(C); ViewOpsData *vod; - - if(rv3d->viewlock) - return OPERATOR_CANCELLED; + RegionView3D *rv3d; /* makes op->customdata */ viewops_data_create(C, op, event); vod= op->customdata; + rv3d= vod->rv3d; + + if(rv3d->viewlock) { /* poll should check but in some cases fails, see poll func for details */ + viewops_data_free(C, op); + return OPERATOR_CANCELLED; + } /* switch from camera view when: */ - if(vod->rv3d->persp != RV3D_PERSP) { + if(rv3d->persp != RV3D_PERSP) { if (U.uiflag & USER_AUTOPERSP) { - vod->rv3d->persp= RV3D_PERSP; + rv3d->persp= RV3D_PERSP; } - else if(vod->rv3d->persp==RV3D_CAMOB) { + else if(rv3d->persp==RV3D_CAMOB) { /* changed since 2.4x, use the camera view */ - View3D *v3d = CTX_wm_view3d(C); + View3D *v3d = vod->sa->spacedata.first; if(v3d->camera) { view3d_settings_from_ob(v3d->camera, rv3d->ofs, rv3d->viewquat, &rv3d->dist, NULL); } - if(vod->rv3d->persp==RV3D_CAMOB) { - vod->rv3d->persp= vod->rv3d->lpersp; + if(rv3d->persp==RV3D_CAMOB) { + rv3d->persp= rv3d->lpersp; } } ED_region_tag_redraw(vod->ar); @@ -778,7 +781,7 @@ static int viewrotate_invoke(bContext *C, wmOperator *op, wmEvent *event) if (event->type == MOUSEPAN) { viewrotate_apply(vod, event->prevx, event->prevy); - request_depth_update(CTX_wm_region_view3d(C)); + request_depth_update(rv3d); viewops_data_free(C, op); @@ -787,7 +790,7 @@ static int viewrotate_invoke(bContext *C, wmOperator *op, wmEvent *event) else if (event->type == MOUSEROTATE) { /* MOUSEROTATE performs orbital rotation, so y axis delta is set to 0 */ viewrotate_apply(vod, event->prevx, event->y); - request_depth_update(CTX_wm_region_view3d(C)); + request_depth_update(rv3d); viewops_data_free(C, op); @@ -945,7 +948,7 @@ static int viewmove_modal(bContext *C, wmOperator *op, wmEvent *event) viewmove_apply(vod, event->x, event->y); } else if (event_code==VIEW_CONFIRM) { - request_depth_update(CTX_wm_region_view3d(C)); + request_depth_update(vod->rv3d); viewops_data_free(C, op); @@ -963,7 +966,7 @@ static int viewmove_invoke(bContext *C, wmOperator *op, wmEvent *event) if (event->type == MOUSEPAN) { ViewOpsData *vod= op->customdata; viewmove_apply(vod, event->prevx, event->prevy); - request_depth_update(CTX_wm_region_view3d(C)); + request_depth_update(vod->rv3d); viewops_data_free(C, op); @@ -1177,7 +1180,7 @@ static int viewzoom_modal(bContext *C, wmOperator *op, wmEvent *event) viewzoom_apply(vod, event->x, event->y, U.viewzoom); } else if (event_code==VIEW_CONFIRM) { - request_depth_update(CTX_wm_region_view3d(C)); + request_depth_update(vod->rv3d); viewops_data_free(C, op); return OPERATOR_FINISHED; @@ -1217,7 +1220,7 @@ static int viewzoom_exec(bContext *C, wmOperator *op) if(rv3d->viewlock & RV3D_BOXVIEW) view3d_boxview_sync(CTX_wm_area(C), CTX_wm_region(C)); - request_depth_update(CTX_wm_region_view3d(C)); + request_depth_update(rv3d); ED_region_tag_redraw(CTX_wm_region(C)); viewops_data_free(C, op); @@ -1263,7 +1266,7 @@ static int viewzoom_invoke(bContext *C, wmOperator *op, wmEvent *event) vod->origy = vod->oldy = vod->origy + event->x - event->prevx; viewzoom_apply(vod, event->prevx, event->prevy, USER_ZOOM_DOLLY); } - request_depth_update(CTX_wm_region_view3d(C)); + request_depth_update(vod->rv3d); viewops_data_free(C, op); return OPERATOR_FINISHED; diff --git a/source/blender/editors/space_view3d/view3d_view.c b/source/blender/editors/space_view3d/view3d_view.c index 52fe0b2304d..d0d4c9ee5c8 100644 --- a/source/blender/editors/space_view3d/view3d_view.c +++ b/source/blender/editors/space_view3d/view3d_view.c @@ -406,7 +406,9 @@ static int view3d_setcameratoview_exec(bContext *C, wmOperator *UNUSED(op)) copy_qt_qt(rv3d->lviewquat, rv3d->viewquat); rv3d->lview= rv3d->view; - rv3d->lpersp= rv3d->persp; + if(rv3d->persp != RV3D_CAMOB) { + rv3d->lpersp= rv3d->persp; + } setcameratoview3d(rv3d, v3d->camera); rv3d->persp = RV3D_CAMOB; -- cgit v1.2.3 From 51dcbdde033f6e8e55c4b1b4a47ca0624a6571ee Mon Sep 17 00:00:00 2001 From: Campbell Barton Date: Wed, 17 Nov 2010 09:45:45 +0000 Subject: use 'const char *' by default with RNA functions except when the value is flagged as PROP_THICK_WRAP. Also use const char in many other parts of blenders code. Currently this gives warnings for setting operator id, label and description since these are an exception and allocated beforehand. --- source/blender/editors/space_view3d/view3d_toolbar.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'source/blender/editors/space_view3d') diff --git a/source/blender/editors/space_view3d/view3d_toolbar.c b/source/blender/editors/space_view3d/view3d_toolbar.c index 16896f75915..840a5c1e6ba 100644 --- a/source/blender/editors/space_view3d/view3d_toolbar.c +++ b/source/blender/editors/space_view3d/view3d_toolbar.c @@ -177,7 +177,7 @@ static void operator_call_cb(struct bContext *C, void *arg_listbase, void *arg2) } -static void operator_search_cb(const struct bContext *C, void *UNUSED(arg), char *str, uiSearchItems *items) +static void operator_search_cb(const struct bContext *C, void *UNUSED(arg), const char *str, uiSearchItems *items) { wmOperatorType *ot = WM_operatortype_first(); -- cgit v1.2.3 From 5f4f4e607b23061cd9519d24b5830f4060bde976 Mon Sep 17 00:00:00 2001 From: Ton Roosendaal Date: Wed, 17 Nov 2010 16:25:30 +0000 Subject: Bugfix #24767 Operator redo in 3D window now moves context to the main region, makes knife cut work (and probably others) Todo: this callback should be shared with other redo panels. On the todo list. --- source/blender/editors/space_view3d/view3d_toolbar.c | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) (limited to 'source/blender/editors/space_view3d') diff --git a/source/blender/editors/space_view3d/view3d_toolbar.c b/source/blender/editors/space_view3d/view3d_toolbar.c index 840a5c1e6ba..1064611b84f 100644 --- a/source/blender/editors/space_view3d/view3d_toolbar.c +++ b/source/blender/editors/space_view3d/view3d_toolbar.c @@ -64,23 +64,34 @@ /* ******************* view3d space & buttons ************** */ -/* op->invoke */ +/* op->exec */ +/* XXX DUPLICATE CODE */ static void redo_cb(bContext *C, void *arg_op, void *UNUSED(arg2)) { wmOperator *lastop= arg_op; if(lastop) { + ARegion *ar= CTX_wm_region(C); + ARegion *ar1= BKE_area_find_region_type(CTX_wm_area(C), RGN_TYPE_WINDOW); int retval; + if(ar1) + CTX_wm_region_set(C, ar1); + if (G.f & G_DEBUG) printf("operator redo %s\n", lastop->type->name); + ED_undo_pop_op(C, lastop); retval= WM_operator_repeat(C, lastop); + if((retval & OPERATOR_FINISHED)==0) { if (G.f & G_DEBUG) printf("operator redo failed %s\n", lastop->type->name); ED_undo_redo(C); } + + /* set region back */ + CTX_wm_region_set(C, ar); } } -- cgit v1.2.3 From 7045ef617fa097e6f9a7919f36c5a494ce046a7b Mon Sep 17 00:00:00 2001 From: Campbell Barton Date: Thu, 18 Nov 2010 03:03:17 +0000 Subject: - many settings in a new scene didn't match the startup.blend defaults, copied into scene.c. - view3d metaball panel wasn't updated for rna name change 'location' -> 'co' --- source/blender/editors/space_view3d/view3d_buttons.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'source/blender/editors/space_view3d') diff --git a/source/blender/editors/space_view3d/view3d_buttons.c b/source/blender/editors/space_view3d/view3d_buttons.c index 9d17bbfe7da..95de2dae777 100644 --- a/source/blender/editors/space_view3d/view3d_buttons.c +++ b/source/blender/editors/space_view3d/view3d_buttons.c @@ -946,7 +946,7 @@ static void v3d_editmetaball_buts(uiLayout *layout, Object *ob) RNA_pointer_create(&mball->id, &RNA_MetaElement, mball->lastelem, &ptr); col= uiLayoutColumn(layout, 0); - uiItemR(col, &ptr, "location", 0, "Location", 0); + uiItemR(col, &ptr, "co", 0, "Location", 0); uiItemR(col, &ptr, "radius", 0, "Radius", 0); uiItemR(col, &ptr, "stiffness", 0, "Stiffness", 0); -- cgit v1.2.3 From 48524d6e9122c323a43ef9fc8ba30b20e101308c Mon Sep 17 00:00:00 2001 From: Campbell Barton Date: Thu, 18 Nov 2010 04:26:50 +0000 Subject: fix [#24780] Metaballs are not drawn correctly in new scenes this is a can of worms, at the moment blender depends on broken behavior for metaballs: find_basis_mball() can return a metaball object that fails a is_basis_mball() check which makes this logic very confusing (added note about this in mball.c). Metaballs needs a refactor however at least make drawing fail consistently, For wire draw is_basis_mball() wasn't being checked, for solid drawing it was (hence the strange wire frame). For now the motherball needs to exist in the main scene else it wont work. --- source/blender/editors/space_view3d/drawobject.c | 18 ++++++++++++------ 1 file changed, 12 insertions(+), 6 deletions(-) (limited to 'source/blender/editors/space_view3d') diff --git a/source/blender/editors/space_view3d/drawobject.c b/source/blender/editors/space_view3d/drawobject.c index fa5000a5c9e..220e6700d5d 100644 --- a/source/blender/editors/space_view3d/drawobject.c +++ b/source/blender/editors/space_view3d/drawobject.c @@ -5352,10 +5352,12 @@ static void draw_bounding_volume(Scene *scene, Object *ob) bb= ob->bb ? ob->bb : ( (Curve *)ob->data )->bb; } else if(ob->type==OB_MBALL) { - bb= ob->bb; - if(bb==0) { - makeDispListMBall(scene, ob); + if(is_basis_mball(ob)) { bb= ob->bb; + if(bb==0) { + makeDispListMBall(scene, ob); + bb= ob->bb; + } } } else { @@ -5435,8 +5437,10 @@ static void drawSolidSelect(Scene *scene, View3D *v3d, ARegion *ar, Base *base) draw_index_wire= 1; } } else if (ob->type==OB_MBALL) { - if((base->flag & OB_FROMDUPLI)==0) - drawDispListwire(&ob->disp); + if(is_basis_mball(ob)) { + if((base->flag & OB_FROMDUPLI)==0) + drawDispListwire(&ob->disp); + } } else if(ob->type==OB_ARMATURE) { if(!(ob->mode & OB_MODE_POSE)) @@ -5490,7 +5494,9 @@ static void drawWireExtra(Scene *scene, RegionView3D *rv3d, Object *ob) draw_index_wire= 1; } } else if (ob->type==OB_MBALL) { - drawDispListwire(&ob->disp); + if(is_basis_mball(ob)) { + drawDispListwire(&ob->disp); + } } glDepthMask(1); -- cgit v1.2.3 From aef3e99eab6db507bf852adf9aa269a76158d991 Mon Sep 17 00:00:00 2001 From: Ton Roosendaal Date: Thu, 18 Nov 2010 19:11:05 +0000 Subject: Bugfix #22052 OpenGL viewport render gave squeezed results in cases. Reason: some graphics cards only give offscreen buffers in multiples of 256 or 512 (my case). Current fix uses the actual size returned by graphics card, which is also safe for too large renders. More elaborate cropping or matching is for another time. (Added printf for feedback on this, might disappear) --- source/blender/editors/space_view3d/view3d_draw.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'source/blender/editors/space_view3d') diff --git a/source/blender/editors/space_view3d/view3d_draw.c b/source/blender/editors/space_view3d/view3d_draw.c index 2bdba27a237..9765c740698 100644 --- a/source/blender/editors/space_view3d/view3d_draw.c +++ b/source/blender/editors/space_view3d/view3d_draw.c @@ -2140,7 +2140,7 @@ ImBuf *ED_view3d_draw_offscreen_imbuf(Scene *scene, View3D *v3d, ARegion *ar, in GPUOffScreen *ofs; /* bind */ - ofs= GPU_offscreen_create(sizex, sizey); + ofs= GPU_offscreen_create(&sizex, &sizey); if(ofs == NULL) return NULL; -- cgit v1.2.3 From 39de1914abb3ba8dac522c849bf744c8558d5756 Mon Sep 17 00:00:00 2001 From: Campbell Barton Date: Fri, 19 Nov 2010 07:31:24 +0000 Subject: bugfix [#24796] Drivers are ineffective on Text & Curve obj. geometry parameters also added note that adjusting bone radius changes the parent bone for connected child bones, and fix typo on failing to read startup.blend (both pointed out by MikeS on IRC) --- source/blender/editors/space_view3d/view3d_buttons.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'source/blender/editors/space_view3d') diff --git a/source/blender/editors/space_view3d/view3d_buttons.c b/source/blender/editors/space_view3d/view3d_buttons.c index 95de2dae777..5c95423e77f 100644 --- a/source/blender/editors/space_view3d/view3d_buttons.c +++ b/source/blender/editors/space_view3d/view3d_buttons.c @@ -919,7 +919,7 @@ static void v3d_editarmature_buts(uiLayout *layout, Object *ob) uiItemR(col, &eboneptr, "head", 0, "Head", 0); if (ebone->parent && ebone->flag & BONE_CONNECTED ) { PointerRNA parptr = RNA_pointer_get(&eboneptr, "parent"); - uiItemR(col, &parptr, "tail_radius", 0, "Radius", 0); + uiItemR(col, &parptr, "tail_radius", 0, "Radius (Parent)", 0); } else { uiItemR(col, &eboneptr, "head_radius", 0, "Radius", 0); } -- cgit v1.2.3 From b2a227b442016fd2f460ab0d6b5e9aa709dbc71c Mon Sep 17 00:00:00 2001 From: Janne Karhu Date: Fri, 19 Nov 2010 16:19:15 +0000 Subject: Tsk! Circle, cross and axis draw types for particles weren't using the particle draw size. --- source/blender/editors/space_view3d/drawobject.c | 5 +++++ 1 file changed, 5 insertions(+) (limited to 'source/blender/editors/space_view3d') diff --git a/source/blender/editors/space_view3d/drawobject.c b/source/blender/editors/space_view3d/drawobject.c index 220e6700d5d..07128fe4d94 100644 --- a/source/blender/editors/space_view3d/drawobject.c +++ b/source/blender/editors/space_view3d/drawobject.c @@ -3559,6 +3559,11 @@ static void draw_new_particle_system(Scene *scene, View3D *v3d, RegionView3D *rv case PART_DRAW_AXIS: /* lets calculate the scale: */ pixsize= view3d_pixel_size(rv3d, ob->obmat[3]); + + if(part->draw_size==0.0) + pixsize*=2.0; + else + pixsize*=part->draw_size; if(draw_as==PART_DRAW_AXIS) create_cdata = 1; -- cgit v1.2.3 From e8647ff5c70de8f7a11cdef0f0c6d19650a629f5 Mon Sep 17 00:00:00 2001 From: Campbell Barton Date: Fri, 19 Nov 2010 17:16:25 +0000 Subject: bugfix [#24812] Cannot change top/left/front views in quad view after camera change --- source/blender/editors/space_view3d/view3d_edit.c | 10 +++++++++- source/blender/editors/space_view3d/view3d_intern.h | 1 + source/blender/editors/space_view3d/view3d_view.c | 2 +- 3 files changed, 11 insertions(+), 2 deletions(-) (limited to 'source/blender/editors/space_view3d') diff --git a/source/blender/editors/space_view3d/view3d_edit.c b/source/blender/editors/space_view3d/view3d_edit.c index 3bfe4fa604a..59453707361 100644 --- a/source/blender/editors/space_view3d/view3d_edit.c +++ b/source/blender/editors/space_view3d/view3d_edit.c @@ -2030,6 +2030,14 @@ static int viewnumpad_exec(bContext *C, wmOperator *op) return OPERATOR_FINISHED; } + +int region3d_unlocked_poll(bContext *C) +{ + RegionView3D *rv3d= CTX_wm_region_view3d(C); + return (rv3d && rv3d->viewlock==0); +} + + void VIEW3D_OT_viewnumpad(wmOperatorType *ot) { /* identifiers */ @@ -2039,7 +2047,7 @@ void VIEW3D_OT_viewnumpad(wmOperatorType *ot) /* api callbacks */ ot->exec= viewnumpad_exec; - ot->poll= ED_operator_region_view3d_active; + ot->poll= region3d_unlocked_poll; /* flags */ ot->flag= 0; diff --git a/source/blender/editors/space_view3d/view3d_intern.h b/source/blender/editors/space_view3d/view3d_intern.h index 92167f0f45e..b77c68b2735 100644 --- a/source/blender/editors/space_view3d/view3d_intern.h +++ b/source/blender/editors/space_view3d/view3d_intern.h @@ -91,6 +91,7 @@ void VIEW3D_OT_drawtype(struct wmOperatorType *ot); void view3d_boxview_copy(ScrArea *sa, ARegion *ar); void view3d_persp_mat4(struct RegionView3D *rv3d, float mat[][4]); +int region3d_unlocked_poll(struct bContext *C); /* view3d_fly.c */ void view3d_keymap(struct wmKeyConfig *keyconf); diff --git a/source/blender/editors/space_view3d/view3d_view.c b/source/blender/editors/space_view3d/view3d_view.c index d0d4c9ee5c8..123c15bdb5b 100644 --- a/source/blender/editors/space_view3d/view3d_view.c +++ b/source/blender/editors/space_view3d/view3d_view.c @@ -479,7 +479,7 @@ void VIEW3D_OT_object_as_camera(wmOperatorType *ot) /* api callbacks */ ot->exec= view3d_setobjectascamera_exec; - ot->poll= ED_operator_region_view3d_active; + ot->poll= region3d_unlocked_poll; /* flags */ ot->flag= OPTYPE_REGISTER|OPTYPE_UNDO; -- cgit v1.2.3 From 06fdd5b95df436d2b9dc158a0e36e8e357f8538d Mon Sep 17 00:00:00 2001 From: Ton Roosendaal Date: Sat, 20 Nov 2010 19:20:27 +0000 Subject: Bugfix #24792 On file save, the 3d view thumbnail creation caused changes in lighting enables. Solved with a glPushAttrib() and pop. --- source/blender/editors/space_view3d/view3d_draw.c | 5 +++++ 1 file changed, 5 insertions(+) (limited to 'source/blender/editors/space_view3d') diff --git a/source/blender/editors/space_view3d/view3d_draw.c b/source/blender/editors/space_view3d/view3d_draw.c index 9765c740698..bdc79e4f0f3 100644 --- a/source/blender/editors/space_view3d/view3d_draw.c +++ b/source/blender/editors/space_view3d/view3d_draw.c @@ -2138,6 +2138,9 @@ ImBuf *ED_view3d_draw_offscreen_imbuf(Scene *scene, View3D *v3d, ARegion *ar, in RegionView3D *rv3d= ar->regiondata; ImBuf *ibuf; GPUOffScreen *ofs; + + /* state changes make normal drawing go weird otherwise */ + glPushAttrib(GL_LIGHTING_BIT); /* bind */ ofs= GPU_offscreen_create(&sizex, &sizey); @@ -2175,6 +2178,8 @@ ImBuf *ED_view3d_draw_offscreen_imbuf(Scene *scene, View3D *v3d, ARegion *ar, in GPU_offscreen_unbind(ofs); GPU_offscreen_free(ofs); + glPopAttrib(); + if(ibuf->rect_float && ibuf->rect) IMB_rect_from_float(ibuf); -- cgit v1.2.3 From cd2ab75b737f17c00bca6caa6c54af76d6dcfa6f Mon Sep 17 00:00:00 2001 From: Campbell Barton Date: Sun, 21 Nov 2010 09:10:50 +0000 Subject: - include pthreads for win32 globally (as with opengl). - MSVC CFLAGS were being set by only checking WIN32, (breaking non-msvc win32 builds) --- source/blender/editors/space_view3d/CMakeLists.txt | 4 ---- 1 file changed, 4 deletions(-) (limited to 'source/blender/editors/space_view3d') diff --git a/source/blender/editors/space_view3d/CMakeLists.txt b/source/blender/editors/space_view3d/CMakeLists.txt index e9ed8335061..0820b69ee46 100644 --- a/source/blender/editors/space_view3d/CMakeLists.txt +++ b/source/blender/editors/space_view3d/CMakeLists.txt @@ -58,10 +58,6 @@ IF(WITH_GAMEENGINE) ADD_DEFINITIONS(-DWITH_GAMEENGINE) ENDIF(WITH_GAMEENGINE) -IF(WIN32) - LIST(APPEND INC ${PTHREADS_INC}) -ENDIF(WIN32) - ADD_DEFINITIONS(-DGLEW_STATIC) BLENDERLIB(bf_editor_space_view3d "${SRC}" "${INC}") -- cgit v1.2.3 From 5fff1a98a1b0f5159129e6fb2311878dd3b0249b Mon Sep 17 00:00:00 2001 From: Sergey Sharybin Date: Sun, 21 Nov 2010 14:05:18 +0000 Subject: Fixed missed selection oulines for curves/surfaces/fonts/armature when texture shading is active --- source/blender/editors/space_view3d/drawobject.c | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) (limited to 'source/blender/editors/space_view3d') diff --git a/source/blender/editors/space_view3d/drawobject.c b/source/blender/editors/space_view3d/drawobject.c index 07128fe4d94..6e20bcb37ef 100644 --- a/source/blender/editors/space_view3d/drawobject.c +++ b/source/blender/editors/space_view3d/drawobject.c @@ -5413,7 +5413,7 @@ static void drawtexspace(Object *ob) } /* draws wire outline */ -static void drawSolidSelect(Scene *scene, View3D *v3d, ARegion *ar, Base *base) +static void drawObjectSelect(Scene *scene, View3D *v3d, ARegion *ar, Base *base) { RegionView3D *rv3d= ar->regiondata; Object *ob= base->object; @@ -5811,12 +5811,12 @@ void draw_object(Scene *scene, ARegion *ar, View3D *v3d, Base *base, int flag) if (cu->disp.first==NULL) makeDispListCurveTypes(scene, ob, 0); } - /* draw outline for selected solid objects, mesh does itself */ + /* draw outline for selected objects, mesh does itself */ if((v3d->flag & V3D_SELECT_OUTLINE) && ((v3d->flag2 & V3D_RENDER_OVERRIDE)==0) && ob->type!=OB_MESH) { - if(dt>OB_WIRE && dtmode & OB_MODE_EDIT)==0 && (flag & DRAW_SCENESET)==0) { + if(dt>OB_WIRE && (ob->mode & OB_MODE_EDIT)==0 && (flag & DRAW_SCENESET)==0) { if (!(ob->dtx&OB_DRAWWIRE) && (ob->flag&SELECT) && !(flag&DRAW_PICKING)) { - drawSolidSelect(scene, v3d, ar, base); + drawObjectSelect(scene, v3d, ar, base); } } } -- cgit v1.2.3 From 8f37be3c0bec16c4236135ee19cc7a1684daa13d Mon Sep 17 00:00:00 2001 From: Campbell Barton Date: Tue, 23 Nov 2010 13:28:13 +0000 Subject: transform snapping to a unit scaled grid was broken. --- source/blender/editors/space_view3d/view3d_draw.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'source/blender/editors/space_view3d') diff --git a/source/blender/editors/space_view3d/view3d_draw.c b/source/blender/editors/space_view3d/view3d_draw.c index bdc79e4f0f3..f05c28fad27 100644 --- a/source/blender/editors/space_view3d/view3d_draw.c +++ b/source/blender/editors/space_view3d/view3d_draw.c @@ -306,7 +306,7 @@ static void drawgrid(UnitSettings *unit, ARegion *ar, View3D *v3d, char **grid_u /* Store the smallest drawn grid size units name so users know how big each grid cell is */ if(*grid_unit==NULL) { *grid_unit= bUnit_GetNameDisplay(usys, i); - rv3d->gridview= (scalar * unit->scale_length); + rv3d->gridview= (scalar / unit->scale_length); } blend_fac= 1-((GRID_MIN_PX*2)/dx_scalar); -- cgit v1.2.3 From 0e9b664fce0ab0c3d5bbf9042c76ffdff8c60fbc Mon Sep 17 00:00:00 2001 From: Campbell Barton Date: Tue, 23 Nov 2010 14:14:06 +0000 Subject: Changes to the ortho grid drawing based on discussion with Ton. - ortho grid now draws scaled by the view3d 'Scale' setting, venomgfx noticed this was missing. - so as not to confuse add scale next to unit display text, so rather then "Metres" it shows "Metres x 1.5" otherwise its confusing that grid lines are not in exact units. - changed grid spacing to grid scale (needed for more logical behavior with units) - when units are enabled grey out subdivisions. --- source/blender/editors/space_view3d/view3d_draw.c | 16 +++++++++++----- 1 file changed, 11 insertions(+), 5 deletions(-) (limited to 'source/blender/editors/space_view3d') diff --git a/source/blender/editors/space_view3d/view3d_draw.c b/source/blender/editors/space_view3d/view3d_draw.c index f05c28fad27..f8e972d1122 100644 --- a/source/blender/editors/space_view3d/view3d_draw.c +++ b/source/blender/editors/space_view3d/view3d_draw.c @@ -243,7 +243,7 @@ static void drawgrid_draw(ARegion *ar, float wx, float wy, float x, float y, flo #define GRID_MIN_PX 6.0f -static void drawgrid(UnitSettings *unit, ARegion *ar, View3D *v3d, char **grid_unit) +static void drawgrid(UnitSettings *unit, ARegion *ar, View3D *v3d, const char **grid_unit) { /* extern short bgpicmode; */ RegionView3D *rv3d= ar->regiondata; @@ -266,7 +266,7 @@ static void drawgrid(UnitSettings *unit, ARegion *ar, View3D *v3d, char **grid_u x= (wx)*fx/fw; y= (wy)*fy/fw; - vec4[0]=vec4[1]= (unit->system) ? 1.0 : v3d->grid; + vec4[0]=vec4[1]= v3d->grid; vec4[2]= 0.0; vec4[3]= 1.0; @@ -306,7 +306,7 @@ static void drawgrid(UnitSettings *unit, ARegion *ar, View3D *v3d, char **grid_u /* Store the smallest drawn grid size units name so users know how big each grid cell is */ if(*grid_unit==NULL) { *grid_unit= bUnit_GetNameDisplay(usys, i); - rv3d->gridview= (scalar / unit->scale_length); + rv3d->gridview= (scalar / unit->scale_length) * v3d->grid; } blend_fac= 1-((GRID_MIN_PX*2)/dx_scalar); @@ -2287,7 +2287,7 @@ void view3d_main_area_draw(const bContext *C, ARegion *ar) int retopo= 0, sculptparticle= 0; unsigned int lay_used; Object *obact = OBACT; - char *grid_unit= NULL; + const char *grid_unit= NULL; /* from now on all object derived meshes check this */ v3d->customdata_mask= get_viewedit_datamask(CTX_wm_screen(C), scene, obact); @@ -2507,8 +2507,14 @@ void view3d_main_area_draw(const bContext *C, ARegion *ar) draw_viewport_name(ar, v3d); } if (grid_unit) { /* draw below the viewport name */ + char tstr[32]= ""; + UI_ThemeColor(TH_TEXT_HI); - BLF_draw_default(22, ar->winy-(USER_SHOW_VIEWPORTNAME?40:20), 0.0f, grid_unit, 65535); /* XXX, use real length */ + if(v3d->grid != 1.0f) { + BLI_snprintf(tstr, sizeof(tstr), "%s x %.4g", v3d->grid, grid_unit); + } + + BLF_draw_default(22, ar->winy-(USER_SHOW_VIEWPORTNAME?40:20), 0.0f, tstr[0]?tstr : grid_unit, sizeof(tstr)); /* XXX, use real length */ } ob= OBACT; -- cgit v1.2.3 From 68b49aa981e146d7a7afde3e83305445bcc5ca3e Mon Sep 17 00:00:00 2001 From: Campbell Barton Date: Tue, 23 Nov 2010 17:14:03 +0000 Subject: use unit system for the grid floor (was only ortho before). --- source/blender/editors/space_view3d/view3d_draw.c | 35 ++++++++++++++++------- 1 file changed, 25 insertions(+), 10 deletions(-) (limited to 'source/blender/editors/space_view3d') diff --git a/source/blender/editors/space_view3d/view3d_draw.c b/source/blender/editors/space_view3d/view3d_draw.c index f8e972d1122..da90f353086 100644 --- a/source/blender/editors/space_view3d/view3d_draw.c +++ b/source/blender/editors/space_view3d/view3d_draw.c @@ -250,8 +250,6 @@ static void drawgrid(UnitSettings *unit, ARegion *ar, View3D *v3d, const char ** float wx, wy, x, y, fw, fx, fy, dx; float vec4[4]; char col[3], col2[3]; - - *grid_unit= NULL; vec4[0]=vec4[1]=vec4[2]=0.0; vec4[3]= 1.0; @@ -306,7 +304,7 @@ static void drawgrid(UnitSettings *unit, ARegion *ar, View3D *v3d, const char ** /* Store the smallest drawn grid size units name so users know how big each grid cell is */ if(*grid_unit==NULL) { *grid_unit= bUnit_GetNameDisplay(usys, i); - rv3d->gridview= (scalar / unit->scale_length) * v3d->grid; + rv3d->gridview= (scalar * v3d->grid) / unit->scale_length; } blend_fac= 1-((GRID_MIN_PX*2)/dx_scalar); @@ -417,9 +415,9 @@ static void drawgrid(UnitSettings *unit, ARegion *ar, View3D *v3d, const char ** } #undef GRID_MIN_PX -static void drawfloor(Scene *scene, View3D *v3d) +static void drawfloor(Scene *scene, View3D *v3d, const char **grid_unit) { - float vert[3], grid; + float vert[3], grid, grid_scale; int a, gridlines, emphasise; char col[3], col2[3]; short draw_line = 0; @@ -428,11 +426,28 @@ static void drawfloor(Scene *scene, View3D *v3d) if(v3d->gridlines<3) return; + grid_scale= v3d->grid; + /* use 'grid_scale' instead of 'v3d->grid' from now on */ + + /* apply units */ + if(scene->unit.system) { + void *usys; + int len; + + bUnit_GetSystem(&usys, &len, scene->unit.system, B_UNIT_LENGTH); + + if(usys) { + int i= bUnit_GetBaseUnit(usys); + *grid_unit= bUnit_GetNameDisplay(usys, i); + grid_scale = (grid_scale * bUnit_GetScaler(usys, i)) / scene->unit.scale_length; + } + } + if(v3d->zbuf && scene->obedit) glDepthMask(0); // for zbuffer-select gridlines= v3d->gridlines/2; - grid= gridlines*v3d->grid; - + grid= gridlines * grid_scale; + UI_GetThemeColor3ubv(TH_GRID, col); UI_GetThemeColor3ubv(TH_BACK, col2); @@ -472,7 +487,7 @@ static void drawfloor(Scene *scene, View3D *v3d) if (draw_line) { glBegin(GL_LINE_STRIP); - vert[0]= a*v3d->grid; + vert[0]= a * grid_scale; vert[1]= grid; glVertex3fv(vert); vert[1]= -grid; @@ -511,7 +526,7 @@ static void drawfloor(Scene *scene, View3D *v3d) if (draw_line) { glBegin(GL_LINE_STRIP); - vert[1]= a*v3d->grid; + vert[1]= a * grid_scale; vert[0]= grid; glVertex3fv(vert ); vert[0]= -grid; @@ -2340,7 +2355,7 @@ void view3d_main_area_draw(const bContext *C, ARegion *ar) if(rv3d->view==0 || rv3d->persp != RV3D_ORTHO) { if ((v3d->flag2 & V3D_RENDER_OVERRIDE)==0) { - drawfloor(scene, v3d); + drawfloor(scene, v3d, &grid_unit); } if(rv3d->persp==RV3D_CAMOB) { if(scene->world) { -- cgit v1.2.3 From bc9f1642bdd2e44e417721c4b5bb120c0e94e257 Mon Sep 17 00:00:00 2001 From: Campbell Barton Date: Wed, 24 Nov 2010 16:54:18 +0000 Subject: fix for crash canceling fly mode. --- source/blender/editors/space_view3d/view3d_fly.c | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) (limited to 'source/blender/editors/space_view3d') diff --git a/source/blender/editors/space_view3d/view3d_fly.c b/source/blender/editors/space_view3d/view3d_fly.c index b6372242a9a..1711520df63 100644 --- a/source/blender/editors/space_view3d/view3d_fly.c +++ b/source/blender/editors/space_view3d/view3d_fly.c @@ -894,7 +894,9 @@ static int fly_modal(bContext *C, wmOperator *op, wmEvent *event) { int exit_code; short do_draw= FALSE; - FlyInfo *fly = op->customdata; + FlyInfo *fly= op->customdata; + RegionView3D *rv3d= fly->rv3d; + Object *fly_object= fly->root_parent ? fly->root_parent : fly->v3d->camera; fly->redraw= 0; @@ -909,10 +911,10 @@ static int fly_modal(bContext *C, wmOperator *op, wmEvent *event) if(exit_code!=OPERATOR_RUNNING_MODAL) do_draw= TRUE; - + if(do_draw) { - if(fly->rv3d->persp==RV3D_CAMOB) { - WM_event_add_notifier(C, NC_OBJECT|ND_TRANSFORM, fly->root_parent ? fly->root_parent : fly->v3d->camera); + if(rv3d->persp==RV3D_CAMOB) { + WM_event_add_notifier(C, NC_OBJECT|ND_TRANSFORM, fly_object); } ED_region_tag_redraw(CTX_wm_region(C)); -- cgit v1.2.3 From c5f720794885521b1281f66df7504230d9618191 Mon Sep 17 00:00:00 2001 From: Campbell Barton Date: Wed, 24 Nov 2010 20:13:37 +0000 Subject: fix for crash introduced r33257, also tag some vars as unused. --- source/blender/editors/space_view3d/view3d_draw.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'source/blender/editors/space_view3d') diff --git a/source/blender/editors/space_view3d/view3d_draw.c b/source/blender/editors/space_view3d/view3d_draw.c index da90f353086..224ee06a685 100644 --- a/source/blender/editors/space_view3d/view3d_draw.c +++ b/source/blender/editors/space_view3d/view3d_draw.c @@ -2526,7 +2526,7 @@ void view3d_main_area_draw(const bContext *C, ARegion *ar) UI_ThemeColor(TH_TEXT_HI); if(v3d->grid != 1.0f) { - BLI_snprintf(tstr, sizeof(tstr), "%s x %.4g", v3d->grid, grid_unit); + BLI_snprintf(tstr, sizeof(tstr), "%s x %.4g", grid_unit, v3d->grid); } BLF_draw_default(22, ar->winy-(USER_SHOW_VIEWPORTNAME?40:20), 0.0f, tstr[0]?tstr : grid_unit, sizeof(tstr)); /* XXX, use real length */ -- cgit v1.2.3 From 2d0a1f4de218105d64680922aef1f247eda358b3 Mon Sep 17 00:00:00 2001 From: Sergey Sharybin Date: Thu, 25 Nov 2010 14:56:02 +0000 Subject: Redraw 3d view when new object was added (NC_OBJECT|NA_ADDED notifier) This fixes one issue from #24914: 3D text glitch and crash ("delayed" 3d view refresh) --- source/blender/editors/space_view3d/space_view3d.c | 5 +++++ 1 file changed, 5 insertions(+) (limited to 'source/blender/editors/space_view3d') diff --git a/source/blender/editors/space_view3d/space_view3d.c b/source/blender/editors/space_view3d/space_view3d.c index 612f2b4af48..aeac6563e1c 100644 --- a/source/blender/editors/space_view3d/space_view3d.c +++ b/source/blender/editors/space_view3d/space_view3d.c @@ -620,6 +620,11 @@ static void view3d_main_area_listener(ARegion *ar, wmNotifier *wmn) ED_region_tag_redraw(ar); break; } + switch(wmn->action) { + case NA_ADDED: + ED_region_tag_redraw(ar); + break; + } break; case NC_GEOM: switch(wmn->data) { -- cgit v1.2.3 From 2b4cf2ac8da8079edc297eb49e44cde3b0573085 Mon Sep 17 00:00:00 2001 From: Campbell Barton Date: Thu, 25 Nov 2010 21:59:12 +0000 Subject: bugfix while looking into [#24900], color wasn't being set for face-mask mode. --- source/blender/editors/space_view3d/drawmesh.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'source/blender/editors/space_view3d') diff --git a/source/blender/editors/space_view3d/drawmesh.c b/source/blender/editors/space_view3d/drawmesh.c index f9af8bd5e79..0fb7ff8ec38 100644 --- a/source/blender/editors/space_view3d/drawmesh.c +++ b/source/blender/editors/space_view3d/drawmesh.c @@ -661,8 +661,9 @@ void draw_mesh_textured(Scene *scene, View3D *v3d, RegionView3D *rv3d, Object *o /* draw the textured mesh */ draw_textured_begin(scene, v3d, rv3d, ob); + glColor4f(1.0f,1.0f,1.0f,1.0f); + if(ob->mode & OB_MODE_EDIT) { - glColor4f(1.0f,1.0f,1.0f,1.0f); dm->drawMappedFacesTex(dm, draw_em_tf_mapped__set_draw, me->edit_mesh); } else if(faceselect) { if(ob->mode & OB_MODE_WEIGHT_PAINT) @@ -674,7 +675,6 @@ void draw_mesh_textured(Scene *scene, View3D *v3d, RegionView3D *rv3d, Object *o if( GPU_buffer_legacy(dm) ) dm->drawFacesTex(dm, draw_tface__set_draw_legacy); else { - glColor4f(1.0f,1.0f,1.0f,1.0f); if( !CustomData_has_layer(&dm->faceData,CD_TEXTURE_MCOL) ) add_tface_color_layer(dm); dm->drawFacesTex(dm, draw_tface__set_draw); -- cgit v1.2.3 From a7cce73fd0614ae65568f001bad4d068178e2094 Mon Sep 17 00:00:00 2001 From: Campbell Barton Date: Fri, 26 Nov 2010 00:52:37 +0000 Subject: fix [#24900] Texture paint mode broken own commit r33070 broke this. --- source/blender/editors/space_view3d/drawobject.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'source/blender/editors/space_view3d') diff --git a/source/blender/editors/space_view3d/drawobject.c b/source/blender/editors/space_view3d/drawobject.c index 6e20bcb37ef..0920144f0a2 100644 --- a/source/blender/editors/space_view3d/drawobject.c +++ b/source/blender/editors/space_view3d/drawobject.c @@ -2509,7 +2509,7 @@ static void draw_mesh_fancy(Scene *scene, ARegion *ar, View3D *v3d, RegionView3D else if(dt==OB_WIRE || totface==0) { draw_wire = 1; /* draw wire only, no depth buffer stuff */ } - else if( (is_paint_sel && (ob->mode & OB_MODE_TEXTURE_PAINT)) || + else if( (is_paint_sel || (ob==OBACT && ob->mode & OB_MODE_TEXTURE_PAINT)) || CHECK_OB_DRAWTEXTURE(v3d, dt)) { if ((v3d->flag&V3D_SELECT_OUTLINE) && ((v3d->flag2 & V3D_RENDER_OVERRIDE)==0) && (base->flag&SELECT) && !(G.f&G_PICKSEL || is_paint_sel) && !draw_wire) { -- cgit v1.2.3 From c2cd9ab039e57dce489b13e4653f461369bd65c6 Mon Sep 17 00:00:00 2001 From: Campbell Barton Date: Fri, 26 Nov 2010 12:38:42 +0000 Subject: remove calls to update the depth buffer while in particle editmode, this calls glReadPixels() for the viewport which is slow on some systems and the depths are currently not used. --- source/blender/editors/space_view3d/view3d_draw.c | 18 ++---------------- 1 file changed, 2 insertions(+), 16 deletions(-) (limited to 'source/blender/editors/space_view3d') diff --git a/source/blender/editors/space_view3d/view3d_draw.c b/source/blender/editors/space_view3d/view3d_draw.c index 224ee06a685..96329ac5d68 100644 --- a/source/blender/editors/space_view3d/view3d_draw.c +++ b/source/blender/editors/space_view3d/view3d_draw.c @@ -2299,7 +2299,6 @@ void view3d_main_area_draw(const bContext *C, ARegion *ar) Base *base; Object *ob; float backcol[3]; - int retopo= 0, sculptparticle= 0; unsigned int lay_used; Object *obact = OBACT; const char *grid_unit= NULL; @@ -2439,11 +2438,6 @@ void view3d_main_area_draw(const bContext *C, ARegion *ar) v3d->lay_used= lay_used; } -// retopo= retopo_mesh_check() || retopo_curve_check(); - sculptparticle= (obact && obact->mode & (OB_MODE_PARTICLE_EDIT)) && !scene->obedit; - if(retopo) - view3d_update_depths(ar); - /* draw selected and editmode */ for(base= scene->base.first; base; base= base->next) { if(v3d->lay & base->lay) { @@ -2451,11 +2445,7 @@ void view3d_main_area_draw(const bContext *C, ARegion *ar) draw_object(scene, ar, v3d, base, 0); } } - - if(!retopo && sculptparticle && !(obact && (obact->dtx & OB_DRAWXRAY))) { - view3d_update_depths(ar); - } - + // REEB_draw(); /* Transp and X-ray afterdraw stuff */ @@ -2464,11 +2454,7 @@ void view3d_main_area_draw(const bContext *C, ARegion *ar) if(v3d->afterdraw_xraytransp.first) view3d_draw_xraytransp(scene, ar, v3d, 1); ED_region_draw_cb_draw(C, ar, REGION_DRAW_POST_VIEW); - - if(!retopo && sculptparticle && (obact && (OBACT->dtx & OB_DRAWXRAY))) { - view3d_update_depths(ar); - } - + if(rv3d->rflag & RV3D_CLIPPING) view3d_clr_clipping(); -- cgit v1.2.3 From a44acdf348693ed5b6d64c1a84969578a513c0f6 Mon Sep 17 00:00:00 2001 From: Campbell Barton Date: Fri, 26 Nov 2010 12:57:35 +0000 Subject: bugfix [#23118] Blender freezes when combing hair - OS X path changes related? - glReadPixels() was running to get the depth on each pixel, this works fine one some cards but was locking up on OSX. - Replace glReadPixels() call with a single call to view3d_update_depths() right after view3d_validate_backbuf(), so the depths are only read once. - Unrelated to the changes above, but should improve performance: view3d_validate_backbuf() was being called on every redraw while combing, now only call once when combing starts. --- source/blender/editors/space_view3d/view3d_intern.h | 1 - 1 file changed, 1 deletion(-) (limited to 'source/blender/editors/space_view3d') diff --git a/source/blender/editors/space_view3d/view3d_intern.h b/source/blender/editors/space_view3d/view3d_intern.h index b77c68b2735..445a83b4266 100644 --- a/source/blender/editors/space_view3d/view3d_intern.h +++ b/source/blender/editors/space_view3d/view3d_intern.h @@ -136,7 +136,6 @@ void add_view3d_after(ListBase *lb, Base *base, int flag); void circf(float x, float y, float rad); void circ(float x, float y, float rad); -void view3d_update_depths(struct ARegion *ar); void view3d_update_depths_rect(struct ARegion *ar, struct ViewDepths *d, struct rcti *rect); float view3d_depth_near(struct ViewDepths *d); -- cgit v1.2.3 From dbf01ba68c7c40f8987f402d871c675bba2fce05 Mon Sep 17 00:00:00 2001 From: Campbell Barton Date: Fri, 26 Nov 2010 23:38:23 +0000 Subject: Particle draw was calling glColorMaterial(...) after glEnable(GL_COLOR_MATERIAL), this is documented to be incorrect. On my system it set the ambient color value to 1.0. --- source/blender/editors/space_view3d/drawobject.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'source/blender/editors/space_view3d') diff --git a/source/blender/editors/space_view3d/drawobject.c b/source/blender/editors/space_view3d/drawobject.c index 0920144f0a2..a55e054c457 100644 --- a/source/blender/editors/space_view3d/drawobject.c +++ b/source/blender/editors/space_view3d/drawobject.c @@ -4105,8 +4105,8 @@ static void draw_ptcache_edit(Scene *scene, View3D *v3d, PTCacheEdit *edit) glEnableClientState(GL_VERTEX_ARRAY); glEnableClientState(GL_COLOR_ARRAY); - glEnable(GL_COLOR_MATERIAL); glColorMaterial(GL_FRONT_AND_BACK, GL_DIFFUSE); + glEnable(GL_COLOR_MATERIAL); glShadeModel(GL_SMOOTH); if(pset->brushtype == PE_BRUSH_WEIGHT) { -- cgit v1.2.3 From e8397e6193452f6e93a19c5aa31d5effaff54f25 Mon Sep 17 00:00:00 2001 From: Campbell Barton Date: Mon, 29 Nov 2010 04:35:56 +0000 Subject: include headers in cmake source, added a script to check for consistency, reporting missing headers & C files. this is important so IDE's using CMake integration always get blender headers. - QtCreator & MSVC for eg, probably others too. --- source/blender/editors/space_view3d/CMakeLists.txt | 2 ++ 1 file changed, 2 insertions(+) (limited to 'source/blender/editors/space_view3d') diff --git a/source/blender/editors/space_view3d/CMakeLists.txt b/source/blender/editors/space_view3d/CMakeLists.txt index 0820b69ee46..36bc9c037a8 100644 --- a/source/blender/editors/space_view3d/CMakeLists.txt +++ b/source/blender/editors/space_view3d/CMakeLists.txt @@ -51,6 +51,8 @@ SET(SRC view3d_snap.c view3d_toolbar.c view3d_view.c + + view3d_intern.h ) IF(WITH_GAMEENGINE) -- cgit v1.2.3 From 79d9023f5571247ef892883386f57ab2270064e8 Mon Sep 17 00:00:00 2001 From: Campbell Barton Date: Tue, 30 Nov 2010 05:15:58 +0000 Subject: bugfix [#24974] "select all" in weight paint -> face selection mode selects all bones instead of all faces face mask mode overrides pose mode keys. also removed function call from transform code. --- source/blender/editors/space_view3d/space_view3d.c | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) (limited to 'source/blender/editors/space_view3d') diff --git a/source/blender/editors/space_view3d/space_view3d.c b/source/blender/editors/space_view3d/space_view3d.c index aeac6563e1c..4f90a7e7991 100644 --- a/source/blender/editors/space_view3d/space_view3d.c +++ b/source/blender/editors/space_view3d/space_view3d.c @@ -317,6 +317,10 @@ static void view3d_main_area_init(wmWindowManager *wm, ARegion *ar) /* object ops. */ + /* important to be before Pose keymap since they can both be enabled at once */ + keymap= WM_keymap_find(wm->defaultconf, "Face Mask", 0, 0); + WM_event_add_keymap_handler(&ar->handlers, keymap); + /* pose is not modal, operator poll checks for this */ keymap= WM_keymap_find(wm->defaultconf, "Pose", 0, 0); WM_event_add_keymap_handler(&ar->handlers, keymap); @@ -332,9 +336,6 @@ static void view3d_main_area_init(wmWindowManager *wm, ARegion *ar) keymap= WM_keymap_find(wm->defaultconf, "Weight Paint", 0, 0); WM_event_add_keymap_handler(&ar->handlers, keymap); - - keymap= WM_keymap_find(wm->defaultconf, "Face Mask", 0, 0); - WM_event_add_keymap_handler(&ar->handlers, keymap); keymap= WM_keymap_find(wm->defaultconf, "Sculpt", 0, 0); WM_event_add_keymap_handler(&ar->handlers, keymap); -- cgit v1.2.3 From 236a11ca63cc736ca15e0ea8cdf377cefc82d4a3 Mon Sep 17 00:00:00 2001 From: Campbell Barton Date: Tue, 30 Nov 2010 18:07:44 +0000 Subject: misc small changes. - commented unused View3D->flag's - popup dialog now centers over the mouse - only overwrite image alpha with render settings on save if saving the render result. --- source/blender/editors/space_view3d/view3d_header.c | 10 ---------- 1 file changed, 10 deletions(-) (limited to 'source/blender/editors/space_view3d') diff --git a/source/blender/editors/space_view3d/view3d_header.c b/source/blender/editors/space_view3d/view3d_header.c index 746c6acae1c..5a7616bb2ec 100644 --- a/source/blender/editors/space_view3d/view3d_header.c +++ b/source/blender/editors/space_view3d/view3d_header.c @@ -446,16 +446,6 @@ void uiTemplateHeader3D(uiLayout *layout, struct bContext *C) v3d->modeselect = ob->mode; else v3d->modeselect = OB_MODE_OBJECT; - - v3d->flag &= ~V3D_MODE; - - /* not sure what the v3d->flag is useful for now... modeselect is confusing */ - if(obedit) v3d->flag |= V3D_EDITMODE; - if(ob && (ob->mode & OB_MODE_POSE)) v3d->flag |= V3D_POSEMODE; - if(ob && (ob->mode & OB_MODE_VERTEX_PAINT)) v3d->flag |= V3D_VERTEXPAINT; - if(ob && (ob->mode & OB_MODE_WEIGHT_PAINT)) v3d->flag |= V3D_WEIGHTPAINT; - if(ob && (ob->mode & OB_MODE_TEXTURE_PAINT)) v3d->flag |= V3D_TEXTUREPAINT; - if(paint_facesel_test(ob)) v3d->flag |= V3D_FACESELECT; uiBlockBeginAlign(block); uiDefIconTextButS(block, MENU, B_MODESELECT, object_mode_icon(v3d->modeselect), view3d_modeselect_pup(scene) , -- cgit v1.2.3 From df6169dada1bd6ad9617ef9e2adb17688f786314 Mon Sep 17 00:00:00 2001 From: Campbell Barton Date: Tue, 30 Nov 2010 21:51:03 +0000 Subject: bugfix [#23423] Multi-window : closing game windows cause blender crash detect closing window while the BGE runs and exit without crashing, as if Esc was pressed. --- source/blender/editors/space_view3d/view3d_view.c | 33 ++++++++++++++--------- 1 file changed, 21 insertions(+), 12 deletions(-) (limited to 'source/blender/editors/space_view3d') diff --git a/source/blender/editors/space_view3d/view3d_view.c b/source/blender/editors/space_view3d/view3d_view.c index 123c15bdb5b..c63bb7919a6 100644 --- a/source/blender/editors/space_view3d/view3d_view.c +++ b/source/blender/editors/space_view3d/view3d_view.c @@ -35,6 +35,7 @@ #include "BLI_math.h" #include "BLI_rect.h" +#include "BLI_listbase.h" #include "BKE_anim.h" #include "BKE_action.h" @@ -1629,9 +1630,8 @@ void VIEW3D_OT_localview(wmOperatorType *ot) #ifdef WITH_GAMEENGINE static ListBase queue_back; -static void SaveState(bContext *C) +static void SaveState(bContext *C, wmWindow *win) { - wmWindow *win= CTX_wm_window(C); Object *obact = CTX_data_active_object(C); glPushAttrib(GL_ALL_ATTRIB_BITS); @@ -1646,9 +1646,8 @@ static void SaveState(bContext *C) //XXX waitcursor(1); } -static void RestoreState(bContext *C) +static void RestoreState(bContext *C, wmWindow *win) { - wmWindow *win= CTX_wm_window(C); Object *obact = CTX_data_active_object(C); if(obact && obact->mode & OB_MODE_TEXTURE_PAINT) @@ -1662,7 +1661,8 @@ static void RestoreState(bContext *C) //XXX waitcursor(0); //XXX G.qual= 0; - win->queue= queue_back; + if(win) /* check because closing win can set to NULL */ + win->queue= queue_back; GPU_state_init(); GPU_set_tpage(NULL, 0); @@ -1809,16 +1809,25 @@ static int game_engine_exec(bContext *C, wmOperator *op) } - SaveState(C); + SaveState(C, prevwin); StartKetsjiShell(C, ar, &cam_frame, 1); + + /* window wasnt closed while the BGE was running */ + if(BLI_findindex(&CTX_wm_manager(C)->windows, prevwin) == -1) { + prevwin= NULL; + CTX_wm_window_set(C, NULL); + } - /* restore context, in case it changed in the meantime, for - example by working in another window or closing it */ - CTX_wm_region_set(C, prevar); - CTX_wm_window_set(C, prevwin); - CTX_wm_area_set(C, prevsa); - RestoreState(C); + if(prevwin) { + /* restore context, in case it changed in the meantime, for + example by working in another window or closing it */ + CTX_wm_region_set(C, prevar); + CTX_wm_window_set(C, prevwin); + CTX_wm_area_set(C, prevsa); + } + + RestoreState(C, prevwin); //XXX restore_all_scene_cfra(scene_cfra_store); set_scene_bg(CTX_data_main(C), startscene); -- cgit v1.2.3 From cd972535027a73ba70069051fe9038b6a8b5696a Mon Sep 17 00:00:00 2001 From: Campbell Barton Date: Fri, 3 Dec 2010 12:30:59 +0000 Subject: - added GCC warning -Wstrict-prototypes - fixed bug in paste material, exposed by stricter warnings. - removed/renamed various shadowed vars. - removed BGE lamp.colour, only allow lamp.color attribute. --- source/blender/editors/space_view3d/drawarmature.c | 2 +- source/blender/editors/space_view3d/drawmesh.c | 2 +- source/blender/editors/space_view3d/drawobject.c | 11 +++-------- source/blender/editors/space_view3d/view3d_draw.c | 12 ++++++------ source/blender/editors/space_view3d/view3d_header.c | 3 --- source/blender/editors/space_view3d/view3d_select.c | 7 ++----- source/blender/editors/space_view3d/view3d_snap.c | 10 +++++----- 7 files changed, 18 insertions(+), 29 deletions(-) (limited to 'source/blender/editors/space_view3d') diff --git a/source/blender/editors/space_view3d/drawarmature.c b/source/blender/editors/space_view3d/drawarmature.c index e65751e1f9d..52a2cd24254 100644 --- a/source/blender/editors/space_view3d/drawarmature.c +++ b/source/blender/editors/space_view3d/drawarmature.c @@ -427,7 +427,7 @@ static void draw_bonevert_solid(void) glCallList(displist); } -static void draw_bone_octahedral() +static void draw_bone_octahedral(void) { static GLuint displist=0; diff --git a/source/blender/editors/space_view3d/drawmesh.c b/source/blender/editors/space_view3d/drawmesh.c index 0fb7ff8ec38..67372821631 100644 --- a/source/blender/editors/space_view3d/drawmesh.c +++ b/source/blender/editors/space_view3d/drawmesh.c @@ -383,7 +383,7 @@ static void draw_textured_begin(Scene *scene, View3D *v3d, RegionView3D *rv3d, O glShadeModel(GL_SMOOTH); } -static void draw_textured_end() +static void draw_textured_end(void) { /* switch off textures */ GPU_set_tpage(NULL, 0); diff --git a/source/blender/editors/space_view3d/drawobject.c b/source/blender/editors/space_view3d/drawobject.c index a55e054c457..65b621b1d7a 100644 --- a/source/blender/editors/space_view3d/drawobject.c +++ b/source/blender/editors/space_view3d/drawobject.c @@ -413,9 +413,6 @@ void drawaxes(float size, char drawtype) case OB_PLAINAXES: for (axis=0; axis<3; axis++) { - float v1[3]= {0.0, 0.0, 0.0}; - float v2[3]= {0.0, 0.0, 0.0}; - glBegin(GL_LINES); v1[axis]= size; @@ -478,8 +475,6 @@ void drawaxes(float size, char drawtype) case OB_ARROWS: default: for (axis=0; axis<3; axis++) { - float v1[3]= {0.0, 0.0, 0.0}; - float v2[3]= {0.0, 0.0, 0.0}; int arrow_axis= (axis==0)?1:0; glBegin(GL_LINES); @@ -6278,10 +6273,10 @@ void draw_object(Scene *scene, ARegion *ar, View3D *v3d, Base *base, int flag) if (list) { bConstraint *curcon; bConstraintOb *cob; - char col[4], col2[4]; + char col1[4], col2[4]; - UI_GetThemeColor3ubv(TH_GRID, col); - UI_make_axis_color(col, col2, 'z'); + UI_GetThemeColor3ubv(TH_GRID, col1); + UI_make_axis_color(col1, col2, 'z'); glColor3ubv((GLubyte *)col2); cob= constraints_make_evalob(scene, ob, NULL, CONSTRAINT_OBTYPE_OBJECT); diff --git a/source/blender/editors/space_view3d/view3d_draw.c b/source/blender/editors/space_view3d/view3d_draw.c index 96329ac5d68..267fcb637d0 100644 --- a/source/blender/editors/space_view3d/view3d_draw.c +++ b/source/blender/editors/space_view3d/view3d_draw.c @@ -824,7 +824,7 @@ static void draw_selected_name(Scene *scene, Object *ob, View3D *v3d) sprintf(info, "(%d) %s", CFRA, ob->id.name+2); } - /* colour depends on whether there is a keyframe */ + /* color depends on whether there is a keyframe */ if (id_frame_has_keyframe((ID *)ob, /*BKE_curframe(scene)*/(float)(CFRA), v3d->keyflags)) UI_ThemeColor(TH_VERTEX_SELECT); else @@ -837,7 +837,7 @@ static void draw_selected_name(Scene *scene, Object *ob, View3D *v3d) else sprintf(info, "(%d)", CFRA); - /* colour is always white */ + /* color is always white */ UI_ThemeColor(TH_TEXT_HI); } @@ -2425,13 +2425,13 @@ void view3d_main_area_draw(const bContext *C, ARegion *ar) } if(v3d->lay_used != lay_used) { /* happens when loading old files or loading with UI load */ - ARegion *ar; + ARegion *ar_iter; ScrArea *sa= CTX_wm_area(C); /* find header and force tag redraw */ - for(ar= sa->regionbase.first; ar; ar= ar->next) - if(ar->regiontype==RGN_TYPE_HEADER) { - ED_region_tag_redraw(ar); + for(ar_iter= sa->regionbase.first; ar_iter; ar_iter= ar_iter->next) + if(ar_iter->regiontype==RGN_TYPE_HEADER) { + ED_region_tag_redraw(ar_iter); break; } diff --git a/source/blender/editors/space_view3d/view3d_header.c b/source/blender/editors/space_view3d/view3d_header.c index 5a7616bb2ec..55675f8a64d 100644 --- a/source/blender/editors/space_view3d/view3d_header.c +++ b/source/blender/editors/space_view3d/view3d_header.c @@ -81,9 +81,6 @@ #define TEST_EDITMESH if(obedit==0) return; \ if( (v3d->lay & obedit->lay)==0 ) return; -/* XXX port over */ -extern void borderselect(); - /* view3d handler codes */ #define VIEW3D_HANDLER_BACKGROUND 1 #define VIEW3D_HANDLER_PROPERTIES 2 diff --git a/source/blender/editors/space_view3d/view3d_select.c b/source/blender/editors/space_view3d/view3d_select.c index 2159aef0695..a3289c4cdc0 100644 --- a/source/blender/editors/space_view3d/view3d_select.c +++ b/source/blender/editors/space_view3d/view3d_select.c @@ -365,11 +365,8 @@ static void do_lasso_select_pose(ViewContext *vc, Object *ob, short mcords[][2], } } - { - bArmature *arm= ob->data; - if(arm->act_bone && (arm->act_bone->flag & BONE_SELECTED)==0) { - arm->act_bone= NULL; - } + if(arm->act_bone && (arm->act_bone->flag & BONE_SELECTED)==0) { + arm->act_bone= NULL; } } diff --git a/source/blender/editors/space_view3d/view3d_snap.c b/source/blender/editors/space_view3d/view3d_snap.c index 9f6054a5d4f..5bedcfd793f 100644 --- a/source/blender/editors/space_view3d/view3d_snap.c +++ b/source/blender/editors/space_view3d/view3d_snap.c @@ -783,16 +783,16 @@ static int snap_curs_to_sel(bContext *C, wmOperator *UNUSED(op)) transvmain= NULL; } else { - Object *ob= CTX_data_active_object(C); + Object *obact= CTX_data_active_object(C); - if(ob && (ob->mode & OB_MODE_POSE)) { - bArmature *arm= ob->data; + if(obact && (obact->mode & OB_MODE_POSE)) { + bArmature *arm= obact->data; bPoseChannel *pchan; - for (pchan = ob->pose->chanbase.first; pchan; pchan=pchan->next) { + for (pchan = obact->pose->chanbase.first; pchan; pchan=pchan->next) { if(arm->layer & pchan->bone->layer) { if(pchan->bone->flag & BONE_SELECTED) { VECCOPY(vec, pchan->pose_head); - mul_m4_v3(ob->obmat, vec); + mul_m4_v3(obact->obmat, vec); add_v3_v3(centroid, vec); DO_MINMAX(vec, min, max); count++; -- cgit v1.2.3 From 7c86a1a95cbc643fdbbf8c28f0422face8a15a19 Mon Sep 17 00:00:00 2001 From: Campbell Barton Date: Fri, 3 Dec 2010 16:45:04 +0000 Subject: compile fixes for mingw32. --- source/blender/editors/space_view3d/drawvolume.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'source/blender/editors/space_view3d') diff --git a/source/blender/editors/space_view3d/drawvolume.c b/source/blender/editors/space_view3d/drawvolume.c index 611cf68d81c..89bb0044eaf 100644 --- a/source/blender/editors/space_view3d/drawvolume.c +++ b/source/blender/editors/space_view3d/drawvolume.c @@ -100,7 +100,7 @@ static void tend ( void ) { QueryPerformanceCounter ( &liCurrentTime ); } -static double tval() +static double tval( void ) { return ((double)( (liCurrentTime.QuadPart - liStartTime.QuadPart)* (double)1000.0/(double)liFrequency.QuadPart )); } -- cgit v1.2.3 From 263830f0004481cd4921f03f4242d7c80794b08d Mon Sep 17 00:00:00 2001 From: Campbell Barton Date: Fri, 3 Dec 2010 17:05:21 +0000 Subject: Enabled GCC -Wwrite-strings warning for CMake and replaced many 'char's for 'const char's,. Only one functional change where Transform orientations passed "" to BIF_createTransformOrientation() which could then have the value written into. --- source/blender/editors/space_view3d/view3d_buttons.c | 5 ++++- source/blender/editors/space_view3d/view3d_draw.c | 6 +++--- source/blender/editors/space_view3d/view3d_header.c | 4 ++-- 3 files changed, 9 insertions(+), 6 deletions(-) (limited to 'source/blender/editors/space_view3d') diff --git a/source/blender/editors/space_view3d/view3d_buttons.c b/source/blender/editors/space_view3d/view3d_buttons.c index 5c95423e77f..36fef45249d 100644 --- a/source/blender/editors/space_view3d/view3d_buttons.c +++ b/source/blender/editors/space_view3d/view3d_buttons.c @@ -1062,8 +1062,11 @@ static void do_view3d_region_buttons(bContext *C, void *UNUSED(index), int event } break; case B_TRANSFORMSPACEADD: - BIF_createTransformOrientation(C, NULL, "", 1, 0); + { + char names[sizeof(((TransformOrientation *)NULL)->name)]= ""; + BIF_createTransformOrientation(C, NULL, names, 1, 0); break; + } case B_TRANSFORMSPACECLEAR: BIF_clearTransformOrientation(C); break; diff --git a/source/blender/editors/space_view3d/view3d_draw.c b/source/blender/editors/space_view3d/view3d_draw.c index 267fcb637d0..80993b45f72 100644 --- a/source/blender/editors/space_view3d/view3d_draw.c +++ b/source/blender/editors/space_view3d/view3d_draw.c @@ -688,9 +688,9 @@ static void draw_view_icon(RegionView3D *rv3d) glDisable(GL_BLEND); } -static char *view3d_get_name(View3D *v3d, RegionView3D *rv3d) +static const char *view3d_get_name(View3D *v3d, RegionView3D *rv3d) { - char *name = NULL; + const char *name = NULL; switch (rv3d->view) { case RV3D_VIEW_FRONT: @@ -739,7 +739,7 @@ static char *view3d_get_name(View3D *v3d, RegionView3D *rv3d) static void draw_viewport_name(ARegion *ar, View3D *v3d) { RegionView3D *rv3d= ar->regiondata; - char *name= view3d_get_name(v3d, rv3d); + const char *name= view3d_get_name(v3d, rv3d); char tmpstr[24]; if (v3d->localvd) { diff --git a/source/blender/editors/space_view3d/view3d_header.c b/source/blender/editors/space_view3d/view3d_header.c index 55675f8a64d..5c3a34801a3 100644 --- a/source/blender/editors/space_view3d/view3d_header.c +++ b/source/blender/editors/space_view3d/view3d_header.c @@ -460,7 +460,7 @@ void uiTemplateHeader3D(uiLayout *layout, struct bContext *C) RNA_pointer_create(&ob->id, &RNA_Mesh, ob->data, &meshptr); uiItemR(layout, &meshptr, "use_paint_mask", UI_ITEM_R_ICON_ONLY, "", 0); } else { - char *str_menu; + const char *str_menu; row= uiLayoutRow(layout, 1); uiItemR(row, &v3dptr, "pivot_point", UI_ITEM_R_ICON_ONLY, "", 0); @@ -494,7 +494,7 @@ void uiTemplateHeader3D(uiLayout *layout, struct bContext *C) str_menu = BIF_menustringTransformOrientation(C, "Orientation"); uiDefButS(block, MENU, B_MAN_MODE, str_menu,0,0,70,YIC, &v3d->twmode, 0, 0, 0, 0, "Transform Orientation"); - MEM_freeN(str_menu); + MEM_freeN((void *)str_menu); } if(obedit==NULL && v3d->localvd==NULL) { -- cgit v1.2.3 From 1ebfb545ee3152369d3b834d98ce179d1d8171a0 Mon Sep 17 00:00:00 2001 From: Ton Roosendaal Date: Fri, 3 Dec 2010 19:29:05 +0000 Subject: Bugfix #2508 Campbell's cleanup commit 33442 today broke axes drawing. Restored code. --- source/blender/editors/space_view3d/drawobject.c | 5 +++++ 1 file changed, 5 insertions(+) (limited to 'source/blender/editors/space_view3d') diff --git a/source/blender/editors/space_view3d/drawobject.c b/source/blender/editors/space_view3d/drawobject.c index 65b621b1d7a..c6a8feebe4d 100644 --- a/source/blender/editors/space_view3d/drawobject.c +++ b/source/blender/editors/space_view3d/drawobject.c @@ -413,6 +413,9 @@ void drawaxes(float size, char drawtype) case OB_PLAINAXES: for (axis=0; axis<3; axis++) { + float v1[3]= {0.0, 0.0, 0.0}; + float v2[3]= {0.0, 0.0, 0.0}; + glBegin(GL_LINES); v1[axis]= size; @@ -475,6 +478,8 @@ void drawaxes(float size, char drawtype) case OB_ARROWS: default: for (axis=0; axis<3; axis++) { + float v1[3]= {0.0, 0.0, 0.0}; + float v2[3]= {0.0, 0.0, 0.0}; int arrow_axis= (axis==0)?1:0; glBegin(GL_LINES); -- cgit v1.2.3 From 9dbb31383f424d669a05793bba614684080ac7e0 Mon Sep 17 00:00:00 2001 From: Campbell Barton Date: Fri, 3 Dec 2010 23:55:10 +0000 Subject: remove shadowed definitions but keep them as zero this time. --- source/blender/editors/space_view3d/drawobject.c | 24 +++++++++++++----------- 1 file changed, 13 insertions(+), 11 deletions(-) (limited to 'source/blender/editors/space_view3d') diff --git a/source/blender/editors/space_view3d/drawobject.c b/source/blender/editors/space_view3d/drawobject.c index c6a8feebe4d..e66c1b24419 100644 --- a/source/blender/editors/space_view3d/drawobject.c +++ b/source/blender/editors/space_view3d/drawobject.c @@ -316,7 +316,7 @@ static float cosval[32] ={ 1.00000000 }; -static void draw_xyz_wire(float *c, float size, int axis) +static void draw_xyz_wire(const float c[3], float size, int axis) { float v1[3]= {0.f, 0.f, 0.f}, v2[3] = {0.f, 0.f, 0.f}; float dim = size * 0.1; @@ -413,16 +413,16 @@ void drawaxes(float size, char drawtype) case OB_PLAINAXES: for (axis=0; axis<3; axis++) { - float v1[3]= {0.0, 0.0, 0.0}; - float v2[3]= {0.0, 0.0, 0.0}; - glBegin(GL_LINES); v1[axis]= size; v2[axis]= -size; glVertex3fv(v1); glVertex3fv(v2); - + + /* reset v1 & v2 to zero */ + v1[axis]= v2[axis]= 0.0f; + glEnd(); } break; @@ -478,10 +478,8 @@ void drawaxes(float size, char drawtype) case OB_ARROWS: default: for (axis=0; axis<3; axis++) { - float v1[3]= {0.0, 0.0, 0.0}; - float v2[3]= {0.0, 0.0, 0.0}; - int arrow_axis= (axis==0)?1:0; - + const int arrow_axis= (axis==0) ? 1:0; + glBegin(GL_LINES); v2[axis]= size; @@ -502,12 +500,16 @@ void drawaxes(float size, char drawtype) v2[axis]+= size*0.125; draw_xyz_wire(v2, size, axis); + + + /* reset v1 & v2 to zero */ + v1[arrow_axis]= v1[axis]= v2[axis]= 0.0f; } break; } } -void drawcircball(int mode, float *cent, float rad, float tmat[][4]) +void drawcircball(int mode, const float cent[3], float rad, float tmat[][4]) { float vec[3], vx[3], vy[3]; int a, tot=32; @@ -526,7 +528,7 @@ void drawcircball(int mode, float *cent, float rad, float tmat[][4]) } /* circle for object centers, special_color is for library or ob users */ -static void drawcentercircle(View3D *v3d, RegionView3D *rv3d, float *co, int selstate, int special_color) +static void drawcentercircle(View3D *v3d, RegionView3D *rv3d, const float co[3], int selstate, int special_color) { const float size= view3d_pixel_size(rv3d, co) * (float)U.obcenter_dia * 0.5f; -- cgit v1.2.3 From fa4bbbb249bf9706e9c71d34748fbde87fa385fb Mon Sep 17 00:00:00 2001 From: Campbell Barton Date: Sat, 4 Dec 2010 13:00:28 +0000 Subject: Maintenance, - remove some redundant declarations - changed VertexTangent and Path structs to avoid compiler alignment padding. --- source/blender/editors/space_view3d/space_view3d.c | 1 + 1 file changed, 1 insertion(+) (limited to 'source/blender/editors/space_view3d') diff --git a/source/blender/editors/space_view3d/space_view3d.c b/source/blender/editors/space_view3d/space_view3d.c index 4f90a7e7991..5bd9e90a208 100644 --- a/source/blender/editors/space_view3d/space_view3d.c +++ b/source/blender/editors/space_view3d/space_view3d.c @@ -38,6 +38,7 @@ #include "BLI_math.h" #include "BLI_rand.h" +#include "BKE_object.h" #include "BKE_context.h" #include "BKE_screen.h" -- cgit v1.2.3 From 8a65538fe0ff4d720d23165671888873f142cb5f Mon Sep 17 00:00:00 2001 From: Campbell Barton Date: Sun, 5 Dec 2010 02:16:01 +0000 Subject: fix for camera border going outside the clipping range while in camera view. --- source/blender/editors/space_view3d/drawobject.c | 15 ++++++++++++--- 1 file changed, 12 insertions(+), 3 deletions(-) (limited to 'source/blender/editors/space_view3d') diff --git a/source/blender/editors/space_view3d/drawobject.c b/source/blender/editors/space_view3d/drawobject.c index e66c1b24419..e489edb5f16 100644 --- a/source/blender/editors/space_view3d/drawobject.c +++ b/source/blender/editors/space_view3d/drawobject.c @@ -1258,13 +1258,22 @@ static void drawcamera(Scene *scene, View3D *v3d, RegionView3D *rv3d, Object *ob /* that way it's always visible - clipsta+0.1 */ float fac; drawsize= cam->drawsize / ((scax + scay + scaz) / 3.0f); - fac= is_view ? (cam->clipsta + 0.1f) : drawsize; - depth= - fac*cam->lens/16.0 * scaz; + + if(is_view) { + /* fixed depth, variable size (avoids exceeding clipping range) */ + depth = -(cam->clipsta + 0.1); + fac = depth / (cam->lens/-16.0f * scaz); + } + else { + /* fixed size, variable depth (stays a reasonable size in the 3D view) */ + depth= drawsize * cam->lens/-16.0f * scaz; + fac= drawsize; + } + facx= fac * caspx * scax; facy= fac * caspy * scay; shx= cam->shiftx*fac*2 * scax; shy= cam->shifty*fac*2 * scay; - } vec[0][0]= 0.0; vec[0][1]= 0.0; vec[0][2]= 0.0; -- cgit v1.2.3 From b110c7c8f2c5fafa6412e01d21d751a884bfe8b2 Mon Sep 17 00:00:00 2001 From: Brecht Van Lommel Date: Sun, 5 Dec 2010 18:59:23 +0000 Subject: Dependency graph: changed DAG_id_flush_update to DAG_id_tag_update. Now it only tags the ID and does the actual flush/update delayed, before the next redraw. For objects the update was already delayed, just flushing wasn't yet. This should help performance in python and animation editors, by making calls to RNA property update quicker. Still need to add calls in a few places where this was previously avoided due to bad performance. --- source/blender/editors/space_view3d/view3d_buttons.c | 12 ++++++------ source/blender/editors/space_view3d/view3d_fly.c | 6 +++--- source/blender/editors/space_view3d/view3d_snap.c | 6 +++--- 3 files changed, 12 insertions(+), 12 deletions(-) (limited to 'source/blender/editors/space_view3d') diff --git a/source/blender/editors/space_view3d/view3d_buttons.c b/source/blender/editors/space_view3d/view3d_buttons.c index 36fef45249d..bb0ea9f0b63 100644 --- a/source/blender/editors/space_view3d/view3d_buttons.c +++ b/source/blender/editors/space_view3d/view3d_buttons.c @@ -666,7 +666,7 @@ static void do_view3d_vgroup_buttons(bContext *C, void *UNUSED(arg), int event) // ED_vgroup_mirror(ob, 1, 1, 0); /* default for now */ - DAG_id_flush_update(&ob->id, OB_RECALC_DATA); + DAG_id_tag_update(&ob->id, OB_RECALC_DATA); WM_event_add_notifier(C, NC_GEOM|ND_DATA, ob->data); } @@ -1006,14 +1006,14 @@ static void do_view3d_region_buttons(bContext *C, void *UNUSED(index), int event return; /* no notifier! */ case B_OBJECTPANEL: - DAG_id_flush_update(&ob->id, OB_RECALC_OB); + DAG_id_tag_update(&ob->id, OB_RECALC_OB); break; case B_OBJECTPANELMEDIAN: if(ob) { v3d_editvertex_buts(NULL, v3d, ob, 1.0); - DAG_id_flush_update(&ob->id, OB_RECALC_DATA); + DAG_id_tag_update(&ob->id, OB_RECALC_DATA); } break; @@ -1024,7 +1024,7 @@ static void do_view3d_region_buttons(bContext *C, void *UNUSED(index), int event ob->parent= NULL; else { DAG_scene_sort(bmain, scene); - DAG_id_flush_update(&ob->id, OB_RECALC_OB); + DAG_id_tag_update(&ob->id, OB_RECALC_OB); } } break; @@ -1058,7 +1058,7 @@ static void do_view3d_region_buttons(bContext *C, void *UNUSED(index), int event case B_ARMATUREPANEL2: { ob->pose->flag |= (POSE_LOCKED|POSE_DO_UNLOCK); - DAG_id_flush_update(&ob->id, OB_RECALC_DATA); + DAG_id_tag_update(&ob->id, OB_RECALC_DATA); } break; case B_TRANSFORMSPACEADD: @@ -1114,7 +1114,7 @@ static void do_view3d_region_buttons(bContext *C, void *UNUSED(index), int event int a; for(a=0; atotvert; a++) ED_vgroup_vert_remove (ob, defGroup, a); - DAG_id_flush_update(&ob->id, OB_RECALC_DATA); + DAG_id_tag_update(&ob->id, OB_RECALC_DATA); } } break; diff --git a/source/blender/editors/space_view3d/view3d_fly.c b/source/blender/editors/space_view3d/view3d_fly.c index 1711520df63..6b600f277f0 100644 --- a/source/blender/editors/space_view3d/view3d_fly.c +++ b/source/blender/editors/space_view3d/view3d_fly.c @@ -368,7 +368,7 @@ static int flyEnd(bContext *C, FlyInfo *fly) /* store the original camera loc and rot */ object_tfm_restore(ob_back, fly->obtfm); - DAG_id_flush_update(&ob_back->id, OB_RECALC_OB); + DAG_id_tag_update(&ob_back->id, OB_RECALC_OB); } else { /* Non Camera we need to reset the view back to the original location bacause the user canceled*/ copy_qt_qt(rv3d->viewquat, fly->rot_backup); @@ -377,7 +377,7 @@ static int flyEnd(bContext *C, FlyInfo *fly) } } else if (fly->persp_backup==RV3D_CAMOB) { /* camera */ - DAG_id_flush_update(fly->root_parent ? &fly->root_parent->id : &v3d->camera->id, OB_RECALC_OB); + DAG_id_tag_update(fly->root_parent ? &fly->root_parent->id : &v3d->camera->id, OB_RECALC_OB); } else { /* not camera */ /* Apply the fly mode view */ @@ -800,7 +800,7 @@ static int flyApply(bContext *C, FlyInfo *fly) ob_update= v3d->camera->parent; while(ob_update) { - DAG_id_flush_update(&ob_update->id, OB_RECALC_OB); + DAG_id_tag_update(&ob_update->id, OB_RECALC_OB); ob_update= ob_update->parent; } diff --git a/source/blender/editors/space_view3d/view3d_snap.c b/source/blender/editors/space_view3d/view3d_snap.c index 5bedcfd793f..beb6170e0dc 100644 --- a/source/blender/editors/space_view3d/view3d_snap.c +++ b/source/blender/editors/space_view3d/view3d_snap.c @@ -87,7 +87,7 @@ static void special_transvert_update(Object *obedit) if(obedit) { - DAG_id_flush_update(obedit->data, OB_RECALC_DATA); + DAG_id_tag_update(obedit->data, OB_RECALC_DATA); if(obedit->type==OB_MESH) { Mesh *me= obedit->data; @@ -522,7 +522,7 @@ static int snap_sel_to_grid(bContext *C, wmOperator *UNUSED(op)) /* auto-keyframing */ // XXX autokeyframe_pose_cb_func(ob, TFM_TRANSLATION, 0); - DAG_id_flush_update(&ob->id, OB_RECALC_DATA); + DAG_id_tag_update(&ob->id, OB_RECALC_DATA); } else { ob->recalc |= OB_RECALC_OB; @@ -646,7 +646,7 @@ static int snap_sel_to_curs(bContext *C, wmOperator *UNUSED(op)) /* auto-keyframing */ // XXX autokeyframe_pose_cb_func(ob, TFM_TRANSLATION, 0); - DAG_id_flush_update(&ob->id, OB_RECALC_DATA); + DAG_id_tag_update(&ob->id, OB_RECALC_DATA); } else { ob->recalc |= OB_RECALC_OB; -- cgit v1.2.3 From 5c8dfc1d519076140a9decba576a965e01fbd5a2 Mon Sep 17 00:00:00 2001 From: Campbell Barton Date: Mon, 6 Dec 2010 06:26:47 +0000 Subject: bugfix [#25057] Vertex paint - Cannot select or paint vertices of obscured vertices, even when obscuring faces are hiddden --- source/blender/editors/space_view3d/drawobject.c | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) (limited to 'source/blender/editors/space_view3d') diff --git a/source/blender/editors/space_view3d/drawobject.c b/source/blender/editors/space_view3d/drawobject.c index e489edb5f16..97813642b17 100644 --- a/source/blender/editors/space_view3d/drawobject.c +++ b/source/blender/editors/space_view3d/drawobject.c @@ -6436,12 +6436,11 @@ static void bbs_mesh_solid(Scene *scene, View3D *v3d, Object *ob) { DerivedMesh *dm = mesh_get_derived_final(scene, ob, v3d->customdata_mask); Mesh *me = (Mesh*)ob->data; - int face_sel_mode = (me->flag & ME_EDIT_PAINT_MASK) ? 1:0; glColor3ub(0, 0, 0); - if(face_sel_mode) dm->drawMappedFaces(dm, bbs_mesh_solid_hide__setDrawOpts, me, 0, GPU_enable_material); - else dm->drawMappedFaces(dm, bbs_mesh_solid__setDrawOpts, me, 0, GPU_enable_material); + if((me->editflag & ME_EDIT_PAINT_MASK)) dm->drawMappedFaces(dm, bbs_mesh_solid_hide__setDrawOpts, me, 0, GPU_enable_material); + else dm->drawMappedFaces(dm, bbs_mesh_solid__setDrawOpts, me, 0, GPU_enable_material); dm->release(dm); } -- cgit v1.2.3 From 8bd5425a71420a4ff2a3bcc241795abb8d64b5e3 Mon Sep 17 00:00:00 2001 From: Campbell Barton Date: Tue, 7 Dec 2010 01:30:14 +0000 Subject: incorrect paranoid check for drawing texture face mode with no faces, it would crash in this case anyway. instead check for faces from the caller. --- source/blender/editors/space_view3d/drawmesh.c | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) (limited to 'source/blender/editors/space_view3d') diff --git a/source/blender/editors/space_view3d/drawmesh.c b/source/blender/editors/space_view3d/drawmesh.c index 67372821631..e38e9309611 100644 --- a/source/blender/editors/space_view3d/drawmesh.c +++ b/source/blender/editors/space_view3d/drawmesh.c @@ -526,10 +526,10 @@ static int draw_tface_mapped__set_draw(void *userData, int index) { Mesh *me = (Mesh*)userData; MTFace *tface = (me->mtface)? &me->mtface[index]: NULL; - MFace *mface = (me->mface)? &me->mface[index]: NULL; + MFace *mface = &me->mface[index]; MCol *mcol = (me->mcol)? &me->mcol[index]: NULL; - int matnr = me->mface[index].mat_nr; - if (mface && mface->flag&ME_HIDE) return 0; + const int matnr = mface->mat_nr; + if (mface->flag & ME_HIDE) return 0; return draw_tface__set_draw(tface, mcol, matnr); } @@ -669,7 +669,7 @@ void draw_mesh_textured(Scene *scene, View3D *v3d, RegionView3D *rv3d, Object *o if(ob->mode & OB_MODE_WEIGHT_PAINT) dm->drawMappedFaces(dm, wpaint__setSolidDrawOptions, me, 1, GPU_enable_material); else - dm->drawMappedFacesTex(dm, draw_tface_mapped__set_draw, me); + dm->drawMappedFacesTex(dm, me->mface ? draw_tface_mapped__set_draw : NULL, me); } else { if( GPU_buffer_legacy(dm) ) -- cgit v1.2.3 From b5ab3980e8e1f84f380314b877ff5bfe2599cc29 Mon Sep 17 00:00:00 2001 From: Sergey Sharybin Date: Tue, 7 Dec 2010 20:22:35 +0000 Subject: Fix #25085: Enabling "Show Cone" on dupliverted buffer spots crashes Blender Cone can't be drawn for duplicated lamps, because lamps with cone are drawn after main draw function (from view3d_draw_transp) and list of duplicated object gets freed to this moment. Disable cone draw for lamps which are from dupli. --- source/blender/editors/space_view3d/drawobject.c | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) (limited to 'source/blender/editors/space_view3d') diff --git a/source/blender/editors/space_view3d/drawobject.c b/source/blender/editors/space_view3d/drawobject.c index 97813642b17..8b5b08b8a5a 100644 --- a/source/blender/editors/space_view3d/drawobject.c +++ b/source/blender/editors/space_view3d/drawobject.c @@ -908,7 +908,11 @@ static void drawlamp(Scene *scene, View3D *v3d, RegionView3D *rv3d, Base *base, float imat[4][4], curcol[4]; char col[4]; int drawcone= (dt>OB_WIRE && !(G.f & G_PICKSEL) && la->type == LA_SPOT && (la->mode & LA_SHOW_CONE)); - + + /* cone can't be drawn for duplicated lamps, because duplilist would be freed to */ + /* the moment of view3d_draw_transp() call */ + drawcone&= (base->flag & OB_FROMDUPLI)==0; + if(drawcone && !v3d->transp) { /* in this case we need to draw delayed */ add_view3d_after(&v3d->afterdraw_transp, base, flag); -- cgit v1.2.3 From 47d6166adb7a5100e04c645e7d6284c5c1b95c9d Mon Sep 17 00:00:00 2001 From: Campbell Barton Date: Wed, 8 Dec 2010 00:58:15 +0000 Subject: fix [#25088] Add spot lamp causing crash this is actually an assert not a crash, when the lamp and view axis were aligned, the quat could not correctly be converted into a matrix. Now fallback to the X axis in this case. --- source/blender/editors/space_view3d/drawobject.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) (limited to 'source/blender/editors/space_view3d') diff --git a/source/blender/editors/space_view3d/drawobject.c b/source/blender/editors/space_view3d/drawobject.c index 8b5b08b8a5a..b28be7bad86 100644 --- a/source/blender/editors/space_view3d/drawobject.c +++ b/source/blender/editors/space_view3d/drawobject.c @@ -789,7 +789,9 @@ static void spotvolume(float *lvec, float *vvec, float inp) cross_v3_v3v3(temp,vvec,lvec); /* equation for a plane through vvec en lvec */ cross_v3_v3v3(plane,lvec,temp); /* a plane perpendicular to this, parrallel with lvec */ - normalize_v3(plane); + /* vectors are exactly aligned, use the X axis, this is arbitrary */ + if(normalize_v3(plane) == 0.0f) + plane[1]= 1.0f; /* now we've got two equations: one of a cone and one of a plane, but we have three unknowns. We remove one unkown by rotating the plane to z=0 (the plane normal) */ -- cgit v1.2.3 From 2e667e45fc02c5de285df836e59248a82b45dff9 Mon Sep 17 00:00:00 2001 From: Campbell Barton Date: Wed, 8 Dec 2010 03:05:46 +0000 Subject: Changed armature active bone so it is separate from selection this is consistent with active object, mesh editmode, curves & metaballs. - active is no longer assumed to be selected. this fixes a simple bug - eg: Adding a new armature, entering pose mode and toggling selection failed. - outliner editbone selection now works like object and pose mode. - mouse selection sets the bone active even when the tip is selected. - active, unselected bones draw as wire color with a 15% tint of the selected color. --- source/blender/editors/space_view3d/drawarmature.c | 31 +++++++++++++--------- .../blender/editors/space_view3d/view3d_select.c | 4 --- 2 files changed, 19 insertions(+), 16 deletions(-) (limited to 'source/blender/editors/space_view3d') diff --git a/source/blender/editors/space_view3d/drawarmature.c b/source/blender/editors/space_view3d/drawarmature.c index 52a2cd24254..c0db86b46f9 100644 --- a/source/blender/editors/space_view3d/drawarmature.c +++ b/source/blender/editors/space_view3d/drawarmature.c @@ -150,6 +150,9 @@ static short set_pchan_glColor (short colCode, int boneflag, int constflag) if (boneflag & BONE_DRAW_ACTIVE) { VECCOPY(cp, bcolor->active); + if(!(boneflag & BONE_SELECTED)) { + cp_shade_color3ub(cp, -80); + } } else if (boneflag & BONE_SELECTED) { VECCOPY(cp, bcolor->select); @@ -163,7 +166,8 @@ static short set_pchan_glColor (short colCode, int boneflag, int constflag) glColor3ub(cp[0], cp[1], cp[2]); } else { - if (boneflag & BONE_DRAW_ACTIVE) UI_ThemeColorShade(TH_BONE_POSE, 40); + if (boneflag & BONE_DRAW_ACTIVE && boneflag & BONE_SELECTED) UI_ThemeColorShade(TH_BONE_POSE, 40); + else if (boneflag & BONE_DRAW_ACTIVE) UI_ThemeColorBlend(TH_WIRE, TH_BONE_POSE, 0.15f); /* unselected active */ else if (boneflag & BONE_SELECTED) UI_ThemeColor(TH_BONE_POSE); else UI_ThemeColor(TH_WIRE); } @@ -284,6 +288,13 @@ static short set_pchan_glColor (short colCode, int boneflag, int constflag) return 0; } +static void set_ebone_glColor(const unsigned int boneflag) +{ + if (boneflag & BONE_DRAW_ACTIVE && boneflag & BONE_SELECTED) UI_ThemeColor(TH_EDGE_SELECT); + else if (boneflag & BONE_DRAW_ACTIVE) UI_ThemeColorBlend(TH_WIRE, TH_EDGE_SELECT, 0.15f); /* unselected active */ + else if (boneflag & BONE_SELECTED) UI_ThemeColorShade(TH_EDGE_SELECT, -20); + else UI_ThemeColor(TH_WIRE); +} /* *************** Armature drawing, helper calls for parts ******************* */ @@ -1153,9 +1164,7 @@ static void draw_b_bone(int dt, int armflag, int boneflag, int constflag, unsign } else if (armflag & ARM_EDITMODE) { if (dt==OB_WIRE) { - if (boneflag & BONE_DRAW_ACTIVE) UI_ThemeColor(TH_EDGE_SELECT); - else if (boneflag & BONE_SELECTED) UI_ThemeColorShade(TH_EDGE_SELECT, -20); - else UI_ThemeColor(TH_WIRE); + set_ebone_glColor(boneflag); } else UI_ThemeColor(TH_BONE_SOLID); @@ -1238,9 +1247,7 @@ static void draw_bone(int dt, int armflag, int boneflag, int constflag, unsigned if (dt <= OB_WIRE) { /* colors */ if (armflag & ARM_EDITMODE) { - if (boneflag & BONE_DRAW_ACTIVE) UI_ThemeColor(TH_EDGE_SELECT); - else if (boneflag & BONE_SELECTED) UI_ThemeColorShade(TH_EDGE_SELECT, -20); - else UI_ThemeColor(TH_WIRE); + set_ebone_glColor(boneflag); } else if (armflag & ARM_POSEMODE) { if (constflag) { @@ -1642,7 +1649,7 @@ static void draw_pose_bones(Scene *scene, View3D *v3d, ARegion *ar, Base *base, flag &= ~BONE_CONNECTED; /* set temporary flag for drawing bone as active, but only if selected */ - if ((bone == arm->act_bone) && (bone->flag & BONE_SELECTED)) + if (bone == arm->act_bone) flag |= BONE_DRAW_ACTIVE; /* set color-set to use */ @@ -1728,7 +1735,7 @@ static void draw_pose_bones(Scene *scene, View3D *v3d, ARegion *ar, Base *base, flag &= ~BONE_CONNECTED; /* set temporary flag for drawing bone as active, but only if selected */ - if ((bone == arm->act_bone) && (bone->flag & BONE_SELECTED)) + if (bone == arm->act_bone) flag |= BONE_DRAW_ACTIVE; draw_custom_bone(scene, v3d, rv3d, pchan->custom, OB_WIRE, arm->flag, flag, index, bone->length); @@ -1823,7 +1830,7 @@ static void draw_pose_bones(Scene *scene, View3D *v3d, ARegion *ar, Base *base, flag &= ~BONE_CONNECTED; /* set temporary flag for drawing bone as active, but only if selected */ - if ((bone == arm->act_bone) && (bone->flag & BONE_SELECTED)) + if (bone == arm->act_bone) flag |= BONE_DRAW_ACTIVE; /* extra draw service for pose mode */ @@ -1983,7 +1990,7 @@ static void draw_ebones(View3D *v3d, ARegion *ar, Object *ob, int dt) flag &= ~BONE_CONNECTED; /* set temporary flag for drawing bone as active, but only if selected */ - if ((eBone == arm->act_edbone) && (eBone->flag & BONE_SELECTED)) + if (eBone == arm->act_edbone) flag |= BONE_DRAW_ACTIVE; if (arm->drawtype==ARM_ENVELOPE) @@ -2022,7 +2029,7 @@ static void draw_ebones(View3D *v3d, ARegion *ar, Object *ob, int dt) flag &= ~BONE_CONNECTED; /* set temporary flag for drawing bone as active, but only if selected */ - if ((eBone == arm->act_edbone) && (eBone->flag & BONE_SELECTED)) + if (eBone == arm->act_edbone) flag |= BONE_DRAW_ACTIVE; if (arm->drawtype == ARM_ENVELOPE) { diff --git a/source/blender/editors/space_view3d/view3d_select.c b/source/blender/editors/space_view3d/view3d_select.c index a3289c4cdc0..69096843aa1 100644 --- a/source/blender/editors/space_view3d/view3d_select.c +++ b/source/blender/editors/space_view3d/view3d_select.c @@ -364,10 +364,6 @@ static void do_lasso_select_pose(ViewContext *vc, Object *ob, short mcords[][2], } } } - - if(arm->act_bone && (arm->act_bone->flag & BONE_SELECTED)==0) { - arm->act_bone= NULL; - } } static void object_deselect_all_visible(Scene *scene, View3D *v3d) -- cgit v1.2.3 From afacd184982e58a9c830a3d5366e25983939a7ba Mon Sep 17 00:00:00 2001 From: Campbell Barton Date: Wed, 8 Dec 2010 08:43:06 +0000 Subject: use lowercase for cmake builtin names and macros, remove contents in else() and endif() which is no longer needed. --- source/blender/editors/space_view3d/CMakeLists.txt | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) (limited to 'source/blender/editors/space_view3d') diff --git a/source/blender/editors/space_view3d/CMakeLists.txt b/source/blender/editors/space_view3d/CMakeLists.txt index 36bc9c037a8..0e4c9ca6aa3 100644 --- a/source/blender/editors/space_view3d/CMakeLists.txt +++ b/source/blender/editors/space_view3d/CMakeLists.txt @@ -19,7 +19,7 @@ # # ***** END GPL LICENSE BLOCK ***** -SET(INC +set(INC ../include ../../blenfont ../../blenkernel @@ -34,7 +34,7 @@ SET(INC ../../../../intern/smoke/extern ) -SET(SRC +set(SRC drawanimviz.c drawarmature.c drawmesh.c @@ -55,11 +55,11 @@ SET(SRC view3d_intern.h ) -IF(WITH_GAMEENGINE) - LIST(APPEND INC ../../../kernel/gen_system) - ADD_DEFINITIONS(-DWITH_GAMEENGINE) -ENDIF(WITH_GAMEENGINE) +if(WITH_GAMEENGINE) + list(APPEND INC ../../../kernel/gen_system) + add_definitions(-DWITH_GAMEENGINE) +endif() -ADD_DEFINITIONS(-DGLEW_STATIC) +add_definitions(-DGLEW_STATIC) -BLENDERLIB(bf_editor_space_view3d "${SRC}" "${INC}") +blenderlib(bf_editor_space_view3d "${SRC}" "${INC}") -- cgit v1.2.3 From 1622385445d86210750e0a299971454904a891c1 Mon Sep 17 00:00:00 2001 From: Campbell Barton Date: Wed, 8 Dec 2010 11:42:11 +0000 Subject: pedantic word ordering change. - wm.add_modal_handler -> modal_handler_add - wm.add_fileselect -> fileselect_add - ob.add_shape_key -> shape_key_add - VIEW3D_OT_add_background_image -> VIEW3D_OT_background_image_add (same for remove) Also made 2 internal cmake vars hidden. --- source/blender/editors/space_view3d/space_view3d.c | 2 +- source/blender/editors/space_view3d/view3d_edit.c | 26 +++++++++++----------- .../blender/editors/space_view3d/view3d_intern.h | 4 ++-- source/blender/editors/space_view3d/view3d_ops.c | 4 ++-- 4 files changed, 18 insertions(+), 18 deletions(-) (limited to 'source/blender/editors/space_view3d') diff --git a/source/blender/editors/space_view3d/space_view3d.c b/source/blender/editors/space_view3d/space_view3d.c index 5bd9e90a208..d9f0ea07cce 100644 --- a/source/blender/editors/space_view3d/space_view3d.c +++ b/source/blender/editors/space_view3d/space_view3d.c @@ -480,7 +480,7 @@ static void view3d_dropboxes(void) WM_dropbox_add(lb, "OBJECT_OT_add_named_cursor", view3d_ob_drop_poll, view3d_ob_drop_copy); WM_dropbox_add(lb, "OBJECT_OT_drop_named_material", view3d_mat_drop_poll, view3d_id_drop_copy); WM_dropbox_add(lb, "MESH_OT_drop_named_image", view3d_ima_ob_drop_poll, view3d_id_path_drop_copy); - WM_dropbox_add(lb, "VIEW3D_OT_add_background_image", view3d_ima_bg_drop_poll, view3d_id_path_drop_copy); + WM_dropbox_add(lb, "VIEW3D_OT_background_image_add", view3d_ima_bg_drop_poll, view3d_id_path_drop_copy); } diff --git a/source/blender/editors/space_view3d/view3d_edit.c b/source/blender/editors/space_view3d/view3d_edit.c index 59453707361..cfe4dc55d17 100644 --- a/source/blender/editors/space_view3d/view3d_edit.c +++ b/source/blender/editors/space_view3d/view3d_edit.c @@ -2202,7 +2202,7 @@ void VIEW3D_OT_view_persportho(wmOperatorType *ot) /* ******************** add background image operator **************** */ -static BGpic *add_background_image(bContext *C) +static BGpic *background_image_add(bContext *C) { View3D *v3d= CTX_wm_view3d(C); @@ -2218,14 +2218,14 @@ static BGpic *add_background_image(bContext *C) return bgpic; } -static int add_background_image_exec(bContext *C, wmOperator *UNUSED(op)) +static int background_image_add_exec(bContext *C, wmOperator *UNUSED(op)) { - add_background_image(C); + background_image_add(C); return OPERATOR_FINISHED; } -static int add_background_image_invoke(bContext *C, wmOperator *op, wmEvent *UNUSED(event)) +static int background_image_add_invoke(bContext *C, wmOperator *op, wmEvent *UNUSED(event)) { View3D *v3d= CTX_wm_view3d(C); Image *ima= NULL; @@ -2244,7 +2244,7 @@ static int add_background_image_invoke(bContext *C, wmOperator *op, wmEvent *UNU ima= (Image *)find_id("IM", name); } - bgpic = add_background_image(C); + bgpic = background_image_add(C); if (ima) { bgpic->ima = ima; @@ -2261,16 +2261,16 @@ static int add_background_image_invoke(bContext *C, wmOperator *op, wmEvent *UNU return OPERATOR_FINISHED; } -void VIEW3D_OT_add_background_image(wmOperatorType *ot) +void VIEW3D_OT_background_image_add(wmOperatorType *ot) { /* identifiers */ ot->name = "Add Background Image"; ot->description= "Add a new background image"; - ot->idname = "VIEW3D_OT_add_background_image"; + ot->idname = "VIEW3D_OT_background_image_add"; /* api callbacks */ - ot->invoke = add_background_image_invoke; - ot->exec = add_background_image_exec; + ot->invoke = background_image_add_invoke; + ot->exec = background_image_add_exec; ot->poll = ED_operator_view3d_active; /* flags */ @@ -2283,7 +2283,7 @@ void VIEW3D_OT_add_background_image(wmOperatorType *ot) /* ***** remove image operator ******* */ -static int remove_background_image_exec(bContext *C, wmOperator *op) +static int background_image_remove_exec(bContext *C, wmOperator *op) { BGpic *bgpic_rem = CTX_data_pointer_get_type(C, "bgpic", &RNA_BackgroundImage).data; View3D *vd = CTX_wm_view3d(C); @@ -2301,15 +2301,15 @@ static int remove_background_image_exec(bContext *C, wmOperator *op) return OPERATOR_FINISHED; } -void VIEW3D_OT_remove_background_image(wmOperatorType *ot) +void VIEW3D_OT_background_image_remove(wmOperatorType *ot) { /* identifiers */ ot->name = "Remove Background Image"; ot->description= "Remove a background image from the 3D view"; - ot->idname = "VIEW3D_OT_remove_background_image"; + ot->idname = "VIEW3D_OT_background_image_remove"; /* api callbacks */ - ot->exec = remove_background_image_exec; + ot->exec = background_image_remove_exec; ot->poll = ED_operator_view3d_active; /* flags */ diff --git a/source/blender/editors/space_view3d/view3d_intern.h b/source/blender/editors/space_view3d/view3d_intern.h index 445a83b4266..83ef57cfd0f 100644 --- a/source/blender/editors/space_view3d/view3d_intern.h +++ b/source/blender/editors/space_view3d/view3d_intern.h @@ -78,8 +78,8 @@ void VIEW3D_OT_view_center_cursor(struct wmOperatorType *ot); void VIEW3D_OT_view_center_camera(struct wmOperatorType *ot); void VIEW3D_OT_view_pan(struct wmOperatorType *ot); void VIEW3D_OT_view_persportho(struct wmOperatorType *ot); -void VIEW3D_OT_add_background_image(struct wmOperatorType *ot); -void VIEW3D_OT_remove_background_image(struct wmOperatorType *ot); +void VIEW3D_OT_background_image_add(struct wmOperatorType *ot); +void VIEW3D_OT_background_image_remove(struct wmOperatorType *ot); void VIEW3D_OT_view_orbit(struct wmOperatorType *ot); void VIEW3D_OT_clip_border(struct wmOperatorType *ot); void VIEW3D_OT_cursor3d(struct wmOperatorType *ot); diff --git a/source/blender/editors/space_view3d/view3d_ops.c b/source/blender/editors/space_view3d/view3d_ops.c index 9ee12a8ef1e..7a25d23b56b 100644 --- a/source/blender/editors/space_view3d/view3d_ops.c +++ b/source/blender/editors/space_view3d/view3d_ops.c @@ -62,8 +62,8 @@ void view3d_operatortypes(void) WM_operatortype_append(VIEW3D_OT_view_orbit); WM_operatortype_append(VIEW3D_OT_view_pan); WM_operatortype_append(VIEW3D_OT_view_persportho); - WM_operatortype_append(VIEW3D_OT_add_background_image); - WM_operatortype_append(VIEW3D_OT_remove_background_image); + WM_operatortype_append(VIEW3D_OT_background_image_add); + WM_operatortype_append(VIEW3D_OT_background_image_remove); WM_operatortype_append(VIEW3D_OT_view_selected); WM_operatortype_append(VIEW3D_OT_view_center_cursor); WM_operatortype_append(VIEW3D_OT_view_center_camera); -- cgit v1.2.3 From 8f8aa3f8639d4fe30b99cb5567f5f8c83050d6d6 Mon Sep 17 00:00:00 2001 From: Ton Roosendaal Date: Wed, 8 Dec 2010 18:12:59 +0000 Subject: Bugfix #20598 Armature editmode: Circle select didn't flush selections, causing the center part of bones to remain unselected. --- source/blender/editors/space_view3d/view3d_select.c | 3 +++ 1 file changed, 3 insertions(+) (limited to 'source/blender/editors/space_view3d') diff --git a/source/blender/editors/space_view3d/view3d_select.c b/source/blender/editors/space_view3d/view3d_select.c index 69096843aa1..d7f2f14d650 100644 --- a/source/blender/editors/space_view3d/view3d_select.c +++ b/source/blender/editors/space_view3d/view3d_select.c @@ -2122,9 +2122,12 @@ static void armature_circle_select(ViewContext *vc, int select, short *mval, flo ebone->flag &= ~(BONE_SELECTED|BONE_TIPSEL|BONE_ROOTSEL); change= TRUE; } + + change |= didpoint; } if(change) { + ED_armature_sync_selection(arm->edbo); ED_armature_validate_active(arm); WM_main_add_notifier(NC_OBJECT|ND_BONE_SELECT, vc->obedit); } -- cgit v1.2.3 From b27f52ce2434d703dfafa3f98e74ff6e42027386 Mon Sep 17 00:00:00 2001 From: Campbell Barton Date: Fri, 10 Dec 2010 04:10:21 +0000 Subject: bugfix [#25154] .MXF files should be included as a known video file type in the sequencer [#25159] Vertex locations dont read correctly and are not labeled correctly in the properties bar. - non rna buttons can now have units set. - calls with invalid units system now raises an assert(). - include .mxf in filter. --- .../blender/editors/space_view3d/view3d_buttons.c | 24 +++++++++++++++------- 1 file changed, 17 insertions(+), 7 deletions(-) (limited to 'source/blender/editors/space_view3d') diff --git a/source/blender/editors/space_view3d/view3d_buttons.c b/source/blender/editors/space_view3d/view3d_buttons.c index bb0ea9f0b63..eb6965932a2 100644 --- a/source/blender/editors/space_view3d/view3d_buttons.c +++ b/source/blender/editors/space_view3d/view3d_buttons.c @@ -291,12 +291,17 @@ static void v3d_editvertex_buts(uiLayout *layout, View3D *v3d, Object *ob, float uiBlockBeginAlign(block); if(tot==1) { + uiBut *but; uiDefBut(block, LABEL, 0, "Vertex:", 0, 130, 200, 20, 0, 0, 0, 0, 0, ""); uiBlockBeginAlign(block); - uiDefButF(block, NUM, B_OBJECTPANELMEDIAN, "X:", 0, 110, 200, 20, &(tfp->ve_median[0]), -lim, lim, 10, 3, ""); - uiDefButF(block, NUM, B_OBJECTPANELMEDIAN, "Y:", 0, 90, 200, 20, &(tfp->ve_median[1]), -lim, lim, 10, 3, ""); - uiDefButF(block, NUM, B_OBJECTPANELMEDIAN, "Z:", 0, 70, 200, 20, &(tfp->ve_median[2]), -lim, lim, 10, 3, ""); - + + but= uiDefButF(block, NUM, B_OBJECTPANELMEDIAN, "X:", 0, 110, 200, 20, &(tfp->ve_median[0]), -lim, lim, 10, 3, ""); + uiButSetUnitType(but, PROP_UNIT_LENGTH); + but= uiDefButF(block, NUM, B_OBJECTPANELMEDIAN, "Y:", 0, 90, 200, 20, &(tfp->ve_median[1]), -lim, lim, 10, 3, ""); + uiButSetUnitType(but, PROP_UNIT_LENGTH); + but= uiDefButF(block, NUM, B_OBJECTPANELMEDIAN, "Z:", 0, 70, 200, 20, &(tfp->ve_median[2]), -lim, lim, 10, 3, ""); + uiButSetUnitType(but, PROP_UNIT_LENGTH); + if(totw==1) { uiDefButF(block, NUM, B_OBJECTPANELMEDIAN, "W:", 0, 50, 200, 20, &(tfp->ve_median[3]), 0.01, 100.0, 10, 3, ""); uiBlockBeginAlign(block); @@ -803,6 +808,7 @@ static void v3d_posearmature_buts(uiLayout *layout, Object *ob) PointerRNA pchanptr; uiLayout *col; // uiLayout *row; +// uiBut *but; pchan= get_active_posechannel(ob); @@ -841,9 +847,13 @@ static void v3d_posearmature_buts(uiLayout *layout, Object *ob) uiDefBut(block, LABEL, 0, "Location:", 0, 240, 100, 20, 0, 0, 0, 0, 0, ""); uiBlockBeginAlign(block); - uiDefButF(block, NUM, B_ARMATUREPANEL2, "X:", 0, 220, 120, 19, pchan->loc, -lim, lim, 100, 3, ""); - uiDefButF(block, NUM, B_ARMATUREPANEL2, "Y:", 0, 200, 120, 19, pchan->loc+1, -lim, lim, 100, 3, ""); - uiDefButF(block, NUM, B_ARMATUREPANEL2, "Z:", 0, 180, 120, 19, pchan->loc+2, -lim, lim, 100, 3, ""); + + but= uiDefButF(block, NUM, B_ARMATUREPANEL2, "X:", 0, 220, 120, 19, pchan->loc, -lim, lim, 100, 3, ""); + uiButSetUnitType(but, PROP_UNIT_LENGTH); + but= uiDefButF(block, NUM, B_ARMATUREPANEL2, "Y:", 0, 200, 120, 19, pchan->loc+1, -lim, lim, 100, 3, ""); + uiButSetUnitType(but, PROP_UNIT_LENGTH); + but= uiDefButF(block, NUM, B_ARMATUREPANEL2, "Z:", 0, 180, 120, 19, pchan->loc+2, -lim, lim, 100, 3, ""); + uiButSetUnitType(but, PROP_UNIT_LENGTH); uiBlockEndAlign(block); uiBlockBeginAlign(block); -- cgit v1.2.3 From c0c4d9c14ce9e0990cfc372ead875e4629298d0a Mon Sep 17 00:00:00 2001 From: Campbell Barton Date: Fri, 10 Dec 2010 23:31:03 +0000 Subject: fix [#25170] The 3d view properties panel median values use Blender units when set to use imperial. unit settings were working for vertex location but not median selection. --- source/blender/editors/space_view3d/view3d_buttons.c | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) (limited to 'source/blender/editors/space_view3d') diff --git a/source/blender/editors/space_view3d/view3d_buttons.c b/source/blender/editors/space_view3d/view3d_buttons.c index eb6965932a2..1c400ee1ff8 100644 --- a/source/blender/editors/space_view3d/view3d_buttons.c +++ b/source/blender/editors/space_view3d/view3d_buttons.c @@ -281,6 +281,7 @@ static void v3d_editvertex_buts(uiLayout *layout, View3D *v3d, Object *ob, float mul_m4_v3(ob->obmat, median); if(block) { // buttons + uiBut *but; int but_y; if((ob->parent) && (ob->partype == PARBONE)) but_y = 135; else but_y = 150; @@ -291,7 +292,6 @@ static void v3d_editvertex_buts(uiLayout *layout, View3D *v3d, Object *ob, float uiBlockBeginAlign(block); if(tot==1) { - uiBut *but; uiDefBut(block, LABEL, 0, "Vertex:", 0, 130, 200, 20, 0, 0, 0, 0, 0, ""); uiBlockBeginAlign(block); @@ -327,9 +327,12 @@ static void v3d_editvertex_buts(uiLayout *layout, View3D *v3d, Object *ob, float else { uiDefBut(block, LABEL, 0, "Median:", 0, 130, 200, 20, 0, 0, 0, 0, 0, ""); uiBlockBeginAlign(block); - uiDefButF(block, NUM, B_OBJECTPANELMEDIAN, "X:", 0, 110, 200, 20, &(tfp->ve_median[0]), -lim, lim, 10, 3, ""); - uiDefButF(block, NUM, B_OBJECTPANELMEDIAN, "Y:", 0, 90, 200, 20, &(tfp->ve_median[1]), -lim, lim, 10, 3, ""); - uiDefButF(block, NUM, B_OBJECTPANELMEDIAN, "Z:", 0, 70, 200, 20, &(tfp->ve_median[2]), -lim, lim, 10, 3, ""); + but= uiDefButF(block, NUM, B_OBJECTPANELMEDIAN, "X:", 0, 110, 200, 20, &(tfp->ve_median[0]), -lim, lim, 10, 3, ""); + uiButSetUnitType(but, PROP_UNIT_LENGTH); + but= uiDefButF(block, NUM, B_OBJECTPANELMEDIAN, "Y:", 0, 90, 200, 20, &(tfp->ve_median[1]), -lim, lim, 10, 3, ""); + uiButSetUnitType(but, PROP_UNIT_LENGTH); + but= uiDefButF(block, NUM, B_OBJECTPANELMEDIAN, "Z:", 0, 70, 200, 20, &(tfp->ve_median[2]), -lim, lim, 10, 3, ""); + uiButSetUnitType(but, PROP_UNIT_LENGTH); if(totw==tot) { uiDefButF(block, NUM, B_OBJECTPANELMEDIAN, "W:", 0, 50, 200, 20, &(tfp->ve_median[3]), 0.01, 100.0, 10, 3, ""); uiBlockEndAlign(block); -- cgit v1.2.3 From 1185d70f8f0f6b968338921e9d888b42b094de13 Mon Sep 17 00:00:00 2001 From: Sergey Sharybin Date: Sun, 12 Dec 2010 16:15:49 +0000 Subject: Fix #25177: Skeleton Sketching - deleted sketches don't disappear immediately Added notifier ND_SKETCH for handling such actions --- source/blender/editors/space_view3d/space_view3d.c | 1 + 1 file changed, 1 insertion(+) (limited to 'source/blender/editors/space_view3d') diff --git a/source/blender/editors/space_view3d/space_view3d.c b/source/blender/editors/space_view3d/space_view3d.c index d9f0ea07cce..08c50b95778 100644 --- a/source/blender/editors/space_view3d/space_view3d.c +++ b/source/blender/editors/space_view3d/space_view3d.c @@ -703,6 +703,7 @@ static void view3d_main_area_listener(ARegion *ar, wmNotifier *wmn) switch(wmn->data) { case ND_GPENCIL: case ND_ANIMPLAY: + case ND_SKETCH: ED_region_tag_redraw(ar); break; case ND_SCREENBROWSE: -- cgit v1.2.3 From ba2edc007b0adcf422c97398ecd706e78c342044 Mon Sep 17 00:00:00 2001 From: Ton Roosendaal Date: Sun, 12 Dec 2010 18:16:54 +0000 Subject: Bugfix #25179 Armature properties: layer buttons now show which ones are in use, like object layers. --- source/blender/editors/space_view3d/drawarmature.c | 9 +++++++++ 1 file changed, 9 insertions(+) (limited to 'source/blender/editors/space_view3d') diff --git a/source/blender/editors/space_view3d/drawarmature.c b/source/blender/editors/space_view3d/drawarmature.c index c0db86b46f9..3ab86505bcf 100644 --- a/source/blender/editors/space_view3d/drawarmature.c +++ b/source/blender/editors/space_view3d/drawarmature.c @@ -1585,6 +1585,9 @@ static void draw_pose_bones(Scene *scene, View3D *v3d, ARegion *ar, Base *base, short do_dashed= 3, draw_wire= 0; short flag, constflag; + /* being set below */ + arm->layer_used= 0; + /* hacky... prevent outline select from drawing dashed helplines */ glGetFloatv(GL_LINE_WIDTH, &tmp); if (tmp > 1.1) do_dashed &= ~1; @@ -1631,6 +1634,7 @@ static void draw_pose_bones(Scene *scene, View3D *v3d, ARegion *ar, Base *base, for (pchan= ob->pose->chanbase.first; pchan; pchan= pchan->next) { bone= pchan->bone; + arm->layer_used |= bone->layer; if ( (bone) && !(bone->flag & (BONE_HIDDEN_P|BONE_HIDDEN_PG)) ) { if (bone->layer & arm->layer) { @@ -1776,6 +1780,7 @@ static void draw_pose_bones(Scene *scene, View3D *v3d, ARegion *ar, Base *base, for (pchan= ob->pose->chanbase.first; pchan; pchan= pchan->next) { bone= pchan->bone; + arm->layer_used |= bone->layer; if ((bone) && !(bone->flag & (BONE_HIDDEN_P|BONE_HIDDEN_PG))) { if (bone->layer & arm->layer) { @@ -1948,6 +1953,9 @@ static void draw_ebones(View3D *v3d, ARegion *ar, Object *ob, int dt) unsigned int index; int flag; + /* being set in code below */ + arm->layer_used= 0; + /* envelope (deform distance) */ if(arm->drawtype==ARM_ENVELOPE) { /* precalc inverse matrix for drawing screen aligned */ @@ -2020,6 +2028,7 @@ static void draw_ebones(View3D *v3d, ARegion *ar, Object *ob, int dt) index= 0; /* do selection codes */ for (eBone=arm->edbo->first; eBone; eBone=eBone->next) { + arm->layer_used |= eBone->layer; if (eBone->layer & arm->layer) { if ((eBone->flag & BONE_HIDDEN_A)==0) { -- cgit v1.2.3 From c52ba88f7912124b3efeeb7709cc24497d3cc2ec Mon Sep 17 00:00:00 2001 From: Campbell Barton Date: Tue, 14 Dec 2010 06:20:28 +0000 Subject: [#25211] Impossible to select an armature with shapes broke since 2.49b, highly confusing function. Stick bones dont draw solid so cant run glLoadName() in this case. Tested pose/object mode with all armature draw types and view draw modes. --- source/blender/editors/space_view3d/drawarmature.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'source/blender/editors/space_view3d') diff --git a/source/blender/editors/space_view3d/drawarmature.c b/source/blender/editors/space_view3d/drawarmature.c index 3ab86505bcf..89da66e269a 100644 --- a/source/blender/editors/space_view3d/drawarmature.c +++ b/source/blender/editors/space_view3d/drawarmature.c @@ -1753,8 +1753,8 @@ static void draw_pose_bones(Scene *scene, View3D *v3d, ARegion *ar, Base *base, if (index != -1) index+= 0x10000; // pose bones count in higher 2 bytes only } - - if (draw_wire) { + /* stick bones have not been drawn yet so dont clear object selection in this case */ + if ((arm->drawtype != ARM_LINE) && draw_wire) { /* object tag, for bordersel optim */ glLoadName(index & 0xFFFF); index= -1; -- cgit v1.2.3 From 93cbc840e088ca0ecb62f96596d2f7c46e5635ee Mon Sep 17 00:00:00 2001 From: Janne Karhu Date: Tue, 14 Dec 2010 14:45:56 +0000 Subject: Fix for [#25198] Smoke gets shown before simulation starts * Smoke is now only drawn/rendered after the simulation frame range starts. * This does not apply to simulation end frame though, so that any remaining smoke can for example be faded away nicely through material settings. --- source/blender/editors/space_view3d/drawobject.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) (limited to 'source/blender/editors/space_view3d') diff --git a/source/blender/editors/space_view3d/drawobject.c b/source/blender/editors/space_view3d/drawobject.c index b28be7bad86..055a12348c9 100644 --- a/source/blender/editors/space_view3d/drawobject.c +++ b/source/blender/editors/space_view3d/drawobject.c @@ -6119,7 +6119,9 @@ void draw_object(Scene *scene, ARegion *ar, View3D *v3d, Base *base, int flag) // only draw domains if(smd->domain && smd->domain->fluid) { - if(!smd->domain->wt || !(smd->domain->viewsettings & MOD_SMOKE_VIEW_SHOWBIG)) + if(CFRA < smd->domain->point_cache[0]->startframe) + ; /* don't show smoke before simulation starts, this could be made an option in the future */ + else if(!smd->domain->wt || !(smd->domain->viewsettings & MOD_SMOKE_VIEW_SHOWBIG)) { // #if 0 smd->domain->tex = NULL; -- cgit v1.2.3 From acd7b81c2d3fa7828d28c1562fad10663d911783 Mon Sep 17 00:00:00 2001 From: Campbell Barton Date: Wed, 15 Dec 2010 04:06:19 +0000 Subject: bugfix [#25230] Quick extrude Ctrl-LMB : wrong behaviour of 'RotateSource' option. Problem is is with operator redo which click-extrude exposed. Check if redo operator can run, otherwise lock the UI and add a label that the operator doesn't support redo. This is clunky but IMHO better then failing silently and leaving the user confused. - Merged redo functions into ED_undo_operator_repeat(), code was duplicated in a few places. - added WM_operator_repeat_check to check if WM_operator_repeat() can run, avoids an undo call when redo work. Unrelated changes - GHOST_SystemWin32.cpp set to utf8 encoding. - cmake_consistency_check.py now checks source files are utf8. --- .../blender/editors/space_view3d/view3d_buttons.c | 22 +----------- .../blender/editors/space_view3d/view3d_toolbar.c | 41 +++++----------------- 2 files changed, 9 insertions(+), 54 deletions(-) (limited to 'source/blender/editors/space_view3d') diff --git a/source/blender/editors/space_view3d/view3d_buttons.c b/source/blender/editors/space_view3d/view3d_buttons.c index 1c400ee1ff8..0352996484a 100644 --- a/source/blender/editors/space_view3d/view3d_buttons.c +++ b/source/blender/editors/space_view3d/view3d_buttons.c @@ -1392,26 +1392,6 @@ static void view3d_panel_bonesketch_spaces(const bContext *C, Panel *pa) uiBlockEndAlign(block); } -/* op->invoke */ -static void redo_cb(bContext *C, void *arg_op, void *arg2) -{ - wmOperator *lastop= arg_op; - - if(lastop) { - int retval; - - if (G.f & G_DEBUG) - printf("operator redo %s\n", lastop->type->name); - ED_undo_pop(C); - retval= WM_operator_repeat(C, lastop); - if((retval & OPERATOR_FINISHED)==0) { - if (G.f & G_DEBUG) - printf("operator redo failed %s\n", lastop->type->name); - ED_undo_redo(C); - } - } -} - static void view3d_panel_operator_redo(const bContext *C, Panel *pa) { wmWindowManager *wm= CTX_wm_manager(C); @@ -1429,7 +1409,7 @@ static void view3d_panel_operator_redo(const bContext *C, Panel *pa) if(op==NULL) return; - uiBlockSetFunc(block, redo_cb, op, NULL); + uiBlockSetFunc(block, ED_undo_operator_repeat_cb, op, NULL); if(!op->properties) { IDPropertyTemplate val = {0}; diff --git a/source/blender/editors/space_view3d/view3d_toolbar.c b/source/blender/editors/space_view3d/view3d_toolbar.c index 1064611b84f..a20397aa720 100644 --- a/source/blender/editors/space_view3d/view3d_toolbar.c +++ b/source/blender/editors/space_view3d/view3d_toolbar.c @@ -63,38 +63,6 @@ /* ******************* view3d space & buttons ************** */ - -/* op->exec */ -/* XXX DUPLICATE CODE */ -static void redo_cb(bContext *C, void *arg_op, void *UNUSED(arg2)) -{ - wmOperator *lastop= arg_op; - - if(lastop) { - ARegion *ar= CTX_wm_region(C); - ARegion *ar1= BKE_area_find_region_type(CTX_wm_area(C), RGN_TYPE_WINDOW); - int retval; - - if(ar1) - CTX_wm_region_set(C, ar1); - - if (G.f & G_DEBUG) - printf("operator redo %s\n", lastop->type->name); - - ED_undo_pop_op(C, lastop); - retval= WM_operator_repeat(C, lastop); - - if((retval & OPERATOR_FINISHED)==0) { - if (G.f & G_DEBUG) - printf("operator redo failed %s\n", lastop->type->name); - ED_undo_redo(C); - } - - /* set region back */ - CTX_wm_region_set(C, ar); - } -} - static wmOperator *view3d_last_operator(const bContext *C) { wmWindowManager *wm= CTX_wm_manager(C); @@ -118,6 +86,13 @@ static void view3d_panel_operator_redo_buts(const bContext *C, Panel *pa, wmOper op->properties= IDP_New(IDP_GROUP, val, "wmOperatorProperties"); } + /* poll() on this operator may still fail, at the moment there is no nice feedback when this happens + * just fails silently */ + if(!WM_operator_repeat_check(C, op)) { + uiBlockSetButLock(uiLayoutGetBlock(pa->layout), TRUE, "Operator cannot redo"); + uiItemL(pa->layout, "* Redo Unsupported *", 0); // XXX, could give some nicer feedback or not show redo panel at all? + } + RNA_pointer_create(&wm->id, op->type->srna, op->properties, &ptr); if(op->type->ui) { op->layout= pa->layout; @@ -161,7 +136,7 @@ static void view3d_panel_operator_redo(const bContext *C, Panel *pa) block= uiLayoutGetBlock(pa->layout); - uiBlockSetFunc(block, redo_cb, op, NULL); + uiBlockSetFunc(block, ED_undo_operator_repeat_cb, op, NULL); view3d_panel_operator_redo_operator(C, pa, op); } -- cgit v1.2.3 From eb8458b064c5a7553a3bd51c214c9669aaf550f9 Mon Sep 17 00:00:00 2001 From: Campbell Barton Date: Wed, 15 Dec 2010 05:42:23 +0000 Subject: Centralized operator UI drawing into a new function uiLayoutOperatorButs(), Operator drawing calls were duplicated in file selector panel, redo panels, redo & dialog popups. note, uiDefAutoButsRNA's column's argument was misleading, renamed to label_align. --- .../blender/editors/space_view3d/view3d_buttons.c | 27 ---------------------- .../blender/editors/space_view3d/view3d_toolbar.c | 24 +------------------ 2 files changed, 1 insertion(+), 50 deletions(-) (limited to 'source/blender/editors/space_view3d') diff --git a/source/blender/editors/space_view3d/view3d_buttons.c b/source/blender/editors/space_view3d/view3d_buttons.c index 0352996484a..d2775d7f03d 100644 --- a/source/blender/editors/space_view3d/view3d_buttons.c +++ b/source/blender/editors/space_view3d/view3d_buttons.c @@ -1392,33 +1392,6 @@ static void view3d_panel_bonesketch_spaces(const bContext *C, Panel *pa) uiBlockEndAlign(block); } -static void view3d_panel_operator_redo(const bContext *C, Panel *pa) -{ - wmWindowManager *wm= CTX_wm_manager(C); - wmOperator *op; - PointerRNA ptr; - uiBlock *block; - - block= uiLayoutGetBlock(pa->layout); - - /* only for operators that are registered and did an undo push */ - for(op= wm->operators.last; op; op= op->prev) - if((op->type->flag & OPTYPE_REGISTER) && (op->type->flag & OPTYPE_UNDO)) - break; - - if(op==NULL) - return; - - uiBlockSetFunc(block, ED_undo_operator_repeat_cb, op, NULL); - - if(!op->properties) { - IDPropertyTemplate val = {0}; - op->properties= IDP_New(IDP_GROUP, val, "wmOperatorProperties"); - } - - RNA_pointer_create(&wm->id, op->type->srna, op->properties, &ptr); - uiDefAutoButsRNA(pa->layout, &ptr, 2); -} #endif // XXX not used void view3d_buttons_register(ARegionType *art) diff --git a/source/blender/editors/space_view3d/view3d_toolbar.c b/source/blender/editors/space_view3d/view3d_toolbar.c index a20397aa720..56ca1ce8280 100644 --- a/source/blender/editors/space_view3d/view3d_toolbar.c +++ b/source/blender/editors/space_view3d/view3d_toolbar.c @@ -78,29 +78,7 @@ static wmOperator *view3d_last_operator(const bContext *C) static void view3d_panel_operator_redo_buts(const bContext *C, Panel *pa, wmOperator *op) { - wmWindowManager *wm= CTX_wm_manager(C); - PointerRNA ptr; - - if(!op->properties) { - IDPropertyTemplate val = {0}; - op->properties= IDP_New(IDP_GROUP, val, "wmOperatorProperties"); - } - - /* poll() on this operator may still fail, at the moment there is no nice feedback when this happens - * just fails silently */ - if(!WM_operator_repeat_check(C, op)) { - uiBlockSetButLock(uiLayoutGetBlock(pa->layout), TRUE, "Operator cannot redo"); - uiItemL(pa->layout, "* Redo Unsupported *", 0); // XXX, could give some nicer feedback or not show redo panel at all? - } - - RNA_pointer_create(&wm->id, op->type->srna, op->properties, &ptr); - if(op->type->ui) { - op->layout= pa->layout; - op->type->ui((bContext*)C, op); - op->layout= NULL; - } - else - uiDefAutoButsRNA(pa->layout, &ptr, 1); + uiLayoutOperatorButs(C, pa->layout, op, NULL, 'V', 0); } static void view3d_panel_operator_redo_header(const bContext *C, Panel *pa) -- cgit v1.2.3 From dbd3081895b6b03c8b321803e0fe2900b7577beb Mon Sep 17 00:00:00 2001 From: Campbell Barton Date: Wed, 15 Dec 2010 07:15:51 +0000 Subject: fix for annoyance found when looking into bug [#25226]. Changing the edge crease median value often wouldn't result in the median value entered because of clamping from 0-1. Now the median crease is applied by scaling the values up/down. also add some simple checks to speed up updates, - don't move verts or recalculate normals if only crease changes. - don't apply crease changes if location is being edited. --- .../blender/editors/space_view3d/view3d_buttons.c | 72 ++++++++++++++++------ 1 file changed, 54 insertions(+), 18 deletions(-) (limited to 'source/blender/editors/space_view3d') diff --git a/source/blender/editors/space_view3d/view3d_buttons.c b/source/blender/editors/space_view3d/view3d_buttons.c index d2775d7f03d..9450a3f223a 100644 --- a/source/blender/editors/space_view3d/view3d_buttons.c +++ b/source/blender/editors/space_view3d/view3d_buttons.c @@ -381,30 +381,66 @@ static void v3d_editvertex_buts(uiLayout *layout, View3D *v3d, Object *ob, float if(ob->type==OB_MESH) { Mesh *me= ob->data; EditMesh *em = BKE_mesh_get_editmesh(me); - EditVert *eve; - EditEdge *eed; - - eve= em->verts.first; - while(eve) { - if(eve->f & SELECT) { - add_v3_v3(eve->co, median); + + /* allow for some rounding error becasue of matrix transform */ + if(len_v3(median) > 0.000001) { + EditVert *eve; + + for(eve= em->verts.first; eve; eve= eve->next) { + if(eve->f & SELECT) { + add_v3_v3(eve->co, median); + } } - eve= eve->next; + + recalc_editnormals(em); } - - for(eed= em->edges.first; eed; eed= eed->next) { - if(eed->f & SELECT) { - /* ensure the median can be set to zero or one */ - if(ve_median[3]==0.0f) eed->crease= 0.0f; - else if(ve_median[3]==1.0f) eed->crease= 1.0f; + + if(median[3] != 0.0f) { + EditEdge *eed; + const float fixed_crease= (ve_median[3] <= 0.0f ? 0.0 : (ve_median[3] >= 1.0f ? 1.0 : FLT_MAX)); + + if(fixed_crease != FLT_MAX) { + /* simple case */ + + for(eed= em->edges.first; eed; eed= eed->next) { + if(eed->f & SELECT) { + eed->crease= fixed_crease; + } + } + } + else { + /* scale crease to target median */ + float median_new= ve_median[3]; + float median_orig= ve_median[3] - median[3]; /* previous median value */ + + /* incase of floating point error */ + CLAMP(median_orig, 0.0, 1.0); + CLAMP(median_new, 0.0, 1.0); + + if(median_new < median_orig) { + /* scale down */ + const float sca= median_new / median_orig; + + for(eed= em->edges.first; eed; eed= eed->next) { + if(eed->f & SELECT) { + eed->crease *= sca; + CLAMP(eed->crease, 0.0, 1.0); + } + } + } else { - eed->crease+= median[3]; - CLAMP(eed->crease, 0.0, 1.0); + /* scale up */ + const float sca= (1.0f - median_new) / (1.0f - median_orig); + + for(eed= em->edges.first; eed; eed= eed->next) { + if(eed->f & SELECT) { + eed->crease = 1.0f - ((1.0f - eed->crease) * sca); + CLAMP(eed->crease, 0.0, 1.0); + } + } } } } - - recalc_editnormals(em); BKE_mesh_end_editmesh(me, em); } -- cgit v1.2.3 From eecfc0fbb2892875d29879ebcb82289941ac4b1d Mon Sep 17 00:00:00 2001 From: Campbell Barton Date: Thu, 16 Dec 2010 19:26:54 +0000 Subject: bugfix [#25208] randomize transform doesn't work on objects with keyframes Surprising this wasnt noticed in a much more obvious case: - Key Location, Move, Rotate, Undo-Rotate >> Resets to keyed location as well. This was happening because DAG_on_load_update() was called on read_undosave(), flagging 'ob->adt->recalc |= ADT_RECALC_ANIM;' Fix by adding an option to DAG_on_load_update(), not to recalculate time flags. --- source/blender/editors/space_view3d/view3d_header.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'source/blender/editors/space_view3d') diff --git a/source/blender/editors/space_view3d/view3d_header.c b/source/blender/editors/space_view3d/view3d_header.c index 5c3a34801a3..213b48931b9 100644 --- a/source/blender/editors/space_view3d/view3d_header.c +++ b/source/blender/editors/space_view3d/view3d_header.c @@ -201,7 +201,7 @@ static int layers_exec(bContext *C, wmOperator *op) if(v3d->scenelock) handle_view3d_lock(C); /* new layers might need unflushed events events */ - DAG_scene_update_flags(bmain, scene, v3d->lay); /* tags all that moves and flushes */ + DAG_scene_update_flags(bmain, scene, v3d->lay, FALSE); /* tags all that moves and flushes */ ED_area_tag_redraw(sa); -- cgit v1.2.3 From 04590d86e7d9ce5c4ea4ef073145a4e3c98bf2d6 Mon Sep 17 00:00:00 2001 From: Campbell Barton Date: Fri, 17 Dec 2010 14:49:38 +0000 Subject: fix for keymap error with renaming rna. --- source/blender/editors/space_view3d/view3d_ops.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'source/blender/editors/space_view3d') diff --git a/source/blender/editors/space_view3d/view3d_ops.c b/source/blender/editors/space_view3d/view3d_ops.c index 7a25d23b56b..22494db7020 100644 --- a/source/blender/editors/space_view3d/view3d_ops.c +++ b/source/blender/editors/space_view3d/view3d_ops.c @@ -272,7 +272,7 @@ void view3d_keymap(wmKeyConfig *keyconf) RNA_string_set(kmi->ptr, "value", "MEDIAN_POINT"); kmi = WM_keymap_add_item(keymap, "WM_OT_context_toggle", COMMAKEY, KM_PRESS, KM_ALT, 0); /* new in 2.5 */ - RNA_string_set(kmi->ptr, "data_path", "space_data.pivot_point_align"); + RNA_string_set(kmi->ptr, "data_path", "space_data.use_pivot_point_align"); kmi = WM_keymap_add_item(keymap, "WM_OT_context_toggle", SPACEKEY, KM_PRESS, KM_CTRL, 0); /* new in 2.5 */ RNA_string_set(kmi->ptr, "data_path", "space_data.show_manipulator"); -- cgit v1.2.3 From 902b239aa8de92d559c7b431eaa4321d9dc2b7cf Mon Sep 17 00:00:00 2001 From: Campbell Barton Date: Fri, 17 Dec 2010 15:37:59 +0000 Subject: no functional changes: SETLOOPER macro assumed a scene was defined called 'sce' used to loop over, now make this an argument, helps to make it clear what's going on. --- source/blender/editors/space_view3d/view3d_draw.c | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) (limited to 'source/blender/editors/space_view3d') diff --git a/source/blender/editors/space_view3d/view3d_draw.c b/source/blender/editors/space_view3d/view3d_draw.c index 80993b45f72..6bf87e1964b 100644 --- a/source/blender/editors/space_view3d/view3d_draw.c +++ b/source/blender/editors/space_view3d/view3d_draw.c @@ -1726,7 +1726,6 @@ void draw_depth(Scene *scene, ARegion *ar, View3D *v3d, int (* func)(void *)) { RegionView3D *rv3d= ar->regiondata; Base *base; - Scene *sce; short zbuf= v3d->zbuf; short flag= v3d->flag; float glalphaclip= U.glalphaclip; @@ -1759,7 +1758,8 @@ void draw_depth(Scene *scene, ARegion *ar, View3D *v3d, int (* func)(void *)) /* draw set first */ if(scene->set) { - for(SETLOOPER(scene->set, base)) { + Scene *sce_iter; + for(SETLOOPER(scene->set, sce_iter, base)) { if(v3d->lay & base->lay) { if (func == NULL || func(base)) { draw_object(scene, ar, v3d, base, 0); @@ -1881,14 +1881,14 @@ static void gpu_update_lamps_shadows(Scene *scene, View3D *v3d) { ListBase shadows; View3DShadow *shadow; - Scene *sce; + Scene *sce_iter; Base *base; Object *ob; shadows.first= shadows.last= NULL; /* update lamp transform and gather shadow lamps */ - for(SETLOOPER(scene, base)) { + for(SETLOOPER(scene, sce_iter, base)) { ob= base->object; if(ob->type == OB_LAMP) @@ -2036,7 +2036,6 @@ static void view3d_main_area_setup_view(Scene *scene, View3D *v3d, ARegion *ar, void ED_view3d_draw_offscreen(Scene *scene, View3D *v3d, ARegion *ar, int winx, int winy, float viewmat[][4], float winmat[][4]) { - Scene *sce; Base *base; float backcol[3]; int bwinx, bwiny; @@ -2091,7 +2090,8 @@ void ED_view3d_draw_offscreen(Scene *scene, View3D *v3d, ARegion *ar, int winx, /* draw set first */ if(scene->set) { - for(SETLOOPER(scene->set, base)) { + Scene *sce_iter; + for(SETLOOPER(scene->set, sce_iter, base)) { if(v3d->lay & base->lay) { UI_ThemeColorBlend(TH_WIRE, TH_BACK, 0.6f); draw_object(scene, ar, v3d, base, DRAW_CONSTCOLOR|DRAW_SCENESET); @@ -2295,7 +2295,6 @@ void view3d_main_area_draw(const bContext *C, ARegion *ar) Scene *scene= CTX_data_scene(C); View3D *v3d = CTX_wm_view3d(C); RegionView3D *rv3d= CTX_wm_region_view3d(C); - Scene *sce; Base *base; Object *ob; float backcol[3]; @@ -2389,7 +2388,8 @@ void view3d_main_area_draw(const bContext *C, ARegion *ar) /* draw set first */ if(scene->set) { - for(SETLOOPER(scene->set, base)) { + Scene *sce_iter; + for(SETLOOPER(scene->set, sce_iter, base)) { if(v3d->lay & base->lay) { -- cgit v1.2.3 From 3bed4cbf2b4c09dcb62197b8a8c4ec4224abc8b7 Mon Sep 17 00:00:00 2001 From: Campbell Barton Date: Mon, 20 Dec 2010 03:59:22 +0000 Subject: fix [#25283] Edge length display difficult to read - made theme colors for mesh edge len & face angle/area display. - use %g rather then %f for float display, trims unneeded zeros. - store cached 2d and 3d text color as bytes rather then floats, compare when drawing to avoid setting the context. - use unsigned char for more color functions, avoids casting to glColorubv(). --- source/blender/editors/space_view3d/drawanimviz.c | 17 ++- source/blender/editors/space_view3d/drawarmature.c | 36 +++-- source/blender/editors/space_view3d/drawobject.c | 158 ++++++++++----------- source/blender/editors/space_view3d/view3d_draw.c | 28 ++-- .../blender/editors/space_view3d/view3d_intern.h | 2 +- 5 files changed, 129 insertions(+), 112 deletions(-) (limited to 'source/blender/editors/space_view3d') diff --git a/source/blender/editors/space_view3d/drawanimviz.c b/source/blender/editors/space_view3d/drawanimviz.c index 7035006ea70..7c07f99b8ea 100644 --- a/source/blender/editors/space_view3d/drawanimviz.c +++ b/source/blender/editors/space_view3d/drawanimviz.c @@ -206,6 +206,10 @@ void draw_motion_path_instance(Scene *scene, /* Draw frame numbers at each framestep value */ if (avs->path_viewflag & MOTIONPATH_VIEW_FNUMS) { + unsigned char col[4]; + UI_GetThemeColor3ubv(TH_TEXT_HI, col); + col[3]= 255; + for (i=0, mpv=mpv_start; i < len; i+=stepsize, mpv+=stepsize) { char str[32]; float co[3]; @@ -214,7 +218,7 @@ void draw_motion_path_instance(Scene *scene, if (i == 0) { sprintf(str, "%d", (i+sfra)); mul_v3_m4v3(co, ob->imat, mpv->co); - view3d_cached_text_draw_add(co, str, 0, V3D_CACHE_TEXT_WORLDSPACE|V3D_CACHE_TEXT_ASCII); + view3d_cached_text_draw_add(co, str, 0, V3D_CACHE_TEXT_WORLDSPACE|V3D_CACHE_TEXT_ASCII, col); } else if ((i > stepsize) && (i < len-stepsize)) { bMotionPathVert *mpvP = (mpv - stepsize); @@ -223,7 +227,7 @@ void draw_motion_path_instance(Scene *scene, if ((equals_v3v3(mpv->co, mpvP->co)==0) || (equals_v3v3(mpv->co, mpvN->co)==0)) { sprintf(str, "%d", (sfra+i)); mul_v3_m4v3(co, ob->imat, mpv->co); - view3d_cached_text_draw_add(co, str, 0, V3D_CACHE_TEXT_WORLDSPACE|V3D_CACHE_TEXT_ASCII); + view3d_cached_text_draw_add(co, str, 0, V3D_CACHE_TEXT_WORLDSPACE|V3D_CACHE_TEXT_ASCII, col); } } } @@ -231,6 +235,8 @@ void draw_motion_path_instance(Scene *scene, /* Keyframes - dots and numbers */ if (avs->path_viewflag & MOTIONPATH_VIEW_KFRAS) { + unsigned char col[4]; + AnimData *adt= BKE_animdata_from_id(&ob->id); DLRBT_Tree keys; @@ -256,8 +262,11 @@ void draw_motion_path_instance(Scene *scene, } /* Draw slightly-larger yellow dots at each keyframe */ - UI_ThemeColor(TH_VERTEX_SELECT); + UI_GetThemeColor3ubv(TH_VERTEX_SELECT, col); + col[3]= 255; + glPointSize(4.0f); // XXX perhaps a bit too big + glColor3ubv(col); glBegin(GL_POINTS); for (i=0, mpv=mpv_start; i < len; i++, mpv++) { @@ -281,7 +290,7 @@ void draw_motion_path_instance(Scene *scene, sprintf(str, "%d", (sfra+i)); mul_v3_m4v3(co, ob->imat, mpv->co); - view3d_cached_text_draw_add(co, str, 0, V3D_CACHE_TEXT_WORLDSPACE|V3D_CACHE_TEXT_ASCII); + view3d_cached_text_draw_add(co, str, 0, V3D_CACHE_TEXT_WORLDSPACE|V3D_CACHE_TEXT_ASCII, col); } } } diff --git a/source/blender/editors/space_view3d/drawarmature.c b/source/blender/editors/space_view3d/drawarmature.c index 89da66e269a..27cb305f78f 100644 --- a/source/blender/editors/space_view3d/drawarmature.c +++ b/source/blender/editors/space_view3d/drawarmature.c @@ -1886,6 +1886,12 @@ static void draw_pose_bones(Scene *scene, View3D *v3d, ARegion *ar, Base *base, /* patch for several 3d cards (IBM mostly) that crash on glSelect with text drawing */ if ((G.f & G_PICKSEL) == 0) { float vec[3]; + + unsigned char col[4]; + float col_f[3]; + glGetFloatv(GL_CURRENT_COLOR, col_f); /* incase this is not set below */ + rgb_float_to_byte(col_f, col); + col[3]= 255; if (v3d->zbuf) glDisable(GL_DEPTH_TEST); @@ -1894,17 +1900,16 @@ static void draw_pose_bones(Scene *scene, View3D *v3d, ARegion *ar, Base *base, if (pchan->bone->layer & arm->layer) { if (arm->flag & (ARM_EDITMODE|ARM_POSEMODE)) { bone= pchan->bone; - - if (bone->flag & BONE_SELECTED) UI_ThemeColor(TH_TEXT_HI); - else UI_ThemeColor(TH_TEXT); + UI_GetThemeColor3ubv((bone->flag & BONE_SELECTED) ? TH_TEXT_HI : TH_TEXT, col); } - else if (dt > OB_WIRE) - UI_ThemeColor(TH_TEXT); - + else if (dt > OB_WIRE) { + UI_GetThemeColor3ubv(TH_TEXT, col); + } + /* Draw names of bone */ if (arm->flag & ARM_DRAWNAMES) { mid_v3_v3v3(vec, pchan->pose_head, pchan->pose_tail); - view3d_cached_text_draw_add(vec, pchan->name, 10, 0); + view3d_cached_text_draw_add(vec, pchan->name, 10, 0, col); } /* Draw additional axes on the bone tail */ @@ -1913,7 +1918,8 @@ static void draw_pose_bones(Scene *scene, View3D *v3d, ARegion *ar, Base *base, copy_m4_m4(bmat, pchan->pose_mat); bone_matrix_translate_y(bmat, pchan->bone->length); glMultMatrixf(bmat); - + + glColor3ubv(col); drawaxes(pchan->bone->length*0.25f, OB_ARROWS); glPopMatrix(); @@ -2088,21 +2094,22 @@ static void draw_ebones(View3D *v3d, ARegion *ar, Object *ob, int dt) // patch for several 3d cards (IBM mostly) that crash on glSelect with text drawing if ((G.f & G_PICKSEL) == 0) { float vec[3]; + unsigned char col[4]; + col[3]= 255; if (v3d->zbuf) glDisable(GL_DEPTH_TEST); for (eBone=arm->edbo->first; eBone; eBone=eBone->next) { if(eBone->layer & arm->layer) { if ((eBone->flag & BONE_HIDDEN_A)==0) { - - if (eBone->flag & BONE_SELECTED) UI_ThemeColor(TH_TEXT_HI); - else UI_ThemeColor(TH_TEXT); - + + UI_GetThemeColor3ubv((eBone->flag & BONE_SELECTED) ? TH_TEXT_HI : TH_TEXT, col); + /* Draw name */ if (arm->flag & ARM_DRAWNAMES) { mid_v3_v3v3(vec, eBone->head, eBone->tail); glRasterPos3fv(vec); - view3d_cached_text_draw_add(vec, eBone->name, 10, 0); + view3d_cached_text_draw_add(vec, eBone->name, 10, 0, col); } /* Draw additional axes */ if (arm->flag & ARM_DRAWAXES) { @@ -2110,7 +2117,8 @@ static void draw_ebones(View3D *v3d, ARegion *ar, Object *ob, int dt) get_matrix_editbone(eBone, bmat); bone_matrix_translate_y(bmat, eBone->length); glMultMatrixf(bmat); - + + glColor3ubv(col); drawaxes(eBone->length*0.25f, OB_ARROWS); glPopMatrix(); diff --git a/source/blender/editors/space_view3d/drawobject.c b/source/blender/editors/space_view3d/drawobject.c index 055a12348c9..556095d2f1c 100644 --- a/source/blender/editors/space_view3d/drawobject.c +++ b/source/blender/editors/space_view3d/drawobject.c @@ -561,7 +561,11 @@ static int CachedTextLevel= 0; typedef struct ViewCachedString { struct ViewCachedString *next, *prev; - float vec[3], col[4]; + float vec[3]; + union { + unsigned char ub[4]; + int pack; + } col; short mval[2]; short xoffs; short flag; @@ -575,7 +579,7 @@ void view3d_cached_text_draw_begin() CachedTextLevel++; } -void view3d_cached_text_draw_add(const float co[3], const char *str, short xoffs, short flag) +void view3d_cached_text_draw_add(const float co[3], const char *str, short xoffs, short flag, const unsigned char col[4]) { int alloc_len= strlen(str) + 1; ListBase *strings= &CachedText[CachedTextLevel-1]; @@ -583,7 +587,7 @@ void view3d_cached_text_draw_add(const float co[3], const char *str, short xoffs BLI_addtail(strings, vos); copy_v3_v3(vos->vec, co); - glGetFloatv(GL_CURRENT_COLOR, vos->col); + vos->col.pack= *((int *)col); vos->xoffs= xoffs; vos->flag= flag; @@ -608,6 +612,8 @@ void view3d_cached_text_draw_end(View3D *v3d, ARegion *ar, int depth_write, floa } if(tot) { + int col_pack_prev= 0; + #if 0 bglMats mats; /* ZBuffer depth vars */ double ux, uy, uz; @@ -643,7 +649,11 @@ void view3d_cached_text_draw_end(View3D *v3d, ARegion *ar, int depth_write, floa #endif if(vos->mval[0]!=IS_CLIPPED) { const char *str= (char *)(vos+1); - glColor3fv(vos->col); + + if(col_pack_prev != vos->col.pack) { + glColor3ubv(vos->col.ub); + col_pack_prev= vos->col.pack; + } if(vos->flag & V3D_CACHE_TEXT_ASCII) { BLF_draw_default_ascii((float)vos->mval[0]+vos->xoffs, (float)vos->mval[1], (depth_write)? 0.0f: 2.0f, str, 65535); /* XXX, use real length */ } @@ -908,7 +918,7 @@ static void drawlamp(Scene *scene, View3D *v3d, RegionView3D *rv3d, Base *base, float vec[3], lvec[3], vvec[3], circrad, x,y,z; float lampsize; float imat[4][4], curcol[4]; - char col[4]; + unsigned char col[4]; int drawcone= (dt>OB_WIRE && !(G.f & G_PICKSEL) && la->type == LA_SPOT && (la->mode & LA_SHOW_CONE)); /* cone can't be drawn for duplicated lamps, because duplilist would be freed to */ @@ -1166,7 +1176,7 @@ static void drawlamp(Scene *scene, View3D *v3d, RegionView3D *rv3d, Base *base, } UI_GetThemeColor4ubv(TH_LAMP, col); - glColor4ub(col[0], col[1], col[2], col[3]); + glColor4ubv(col); glEnable(GL_BLEND); @@ -1987,7 +1997,7 @@ static void draw_em_fancy_verts(Scene *scene, View3D *v3d, Object *obedit, Deriv if(v3d->zbuf) glDepthMask(0); // disable write in zbuffer, zbuf select for (sel=0; sel<2; sel++) { - char col[4], fcol[4]; + unsigned char col[4], fcol[4]; int pass; UI_GetThemeColor3ubv(sel?TH_VERTEX_SELECT:TH_VERTEX, col); @@ -2015,13 +2025,13 @@ static void draw_em_fancy_verts(Scene *scene, View3D *v3d, Object *obedit, Deriv if(ts->selectmode & SCE_SELECT_VERTEX) { glPointSize(size); - glColor4ubv((GLubyte *)col); + glColor4ubv(col); draw_dm_verts(cageDM, sel, eve_act); } if(check_ob_drawface_dot(scene, v3d, obedit->dt)) { glPointSize(fsize); - glColor4ubv((GLubyte *)fcol); + glColor4ubv(fcol); draw_dm_face_centers(cageDM, sel); } @@ -2043,9 +2053,9 @@ static void draw_em_fancy_edges(Scene *scene, View3D *v3d, Mesh *me, DerivedMesh unsigned char wireCol[4], selCol[4], actCol[4]; /* since this function does transparant... */ - UI_GetThemeColor4ubv(TH_EDGE_SELECT, (char *)selCol); - UI_GetThemeColor4ubv(TH_WIRE, (char *)wireCol); - UI_GetThemeColor4ubv(TH_EDITMESH_ACTIVE, (char *)actCol); + UI_GetThemeColor4ubv(TH_EDGE_SELECT, selCol); + UI_GetThemeColor4ubv(TH_WIRE, wireCol); + UI_GetThemeColor4ubv(TH_EDITMESH_ACTIVE, actCol); /* when sel only is used, dont render wire, only selected, this is used for * textured draw mode when the 'edges' option is disabled */ @@ -2102,42 +2112,30 @@ static void draw_em_measure_stats(View3D *v3d, RegionView3D *rv3d, Object *ob, E float v1[3], v2[3], v3[3], v4[3], vmid[3]; float fvec[3]; char val[32]; /* Stores the measurement display text here */ - char conv_float[5]; /* Use a float conversion matching the grid size */ - float area, col[3]; /* area of the face, color of the text to draw */ + const char *conv_float; /* Use a float conversion matching the grid size */ + unsigned char col[3]; /* color of the text to draw */ + float area; /* area of the face */ float grid= unit->system ? unit->scale_length : v3d->grid; const int do_split= unit->flag & USER_UNIT_OPT_SPLIT; const int do_global= v3d->flag & V3D_GLOBAL_STATS; const int do_moving= G.moving; - if(v3d->flag2 & V3D_RENDER_OVERRIDE) - return; - /* make the precision of the pronted value proportionate to the gridsize */ - if (grid < 0.01f) - strcpy(conv_float, "%.6f"); - else if (grid < 0.1f) - strcpy(conv_float, "%.5f"); - else if (grid < 1.0f) - strcpy(conv_float, "%.4f"); - else if (grid < 10.0f) - strcpy(conv_float, "%.3f"); - else - strcpy(conv_float, "%.2f"); - - + if (grid < 0.01f) conv_float= "%.6g"; + else if (grid < 0.1f) conv_float= "%.5g"; + else if (grid < 1.0f) conv_float= "%.4g"; + else if (grid < 10.0f) conv_float= "%.3g"; + else conv_float= "%.2g"; + if(v3d->zbuf && (v3d->flag & V3D_ZBUF_SELECT)==0) glDisable(GL_DEPTH_TEST); if(v3d->zbuf) bglPolygonOffset(rv3d->dist, 5.0f); - if(me->drawflag & ME_DRAW_EDGELEN) { - UI_GetThemeColor3fv(TH_TEXT, col); - /* make color a bit more red */ - if(col[0]> 0.5f) {col[1]*=0.7f; col[2]*= 0.7f;} - else col[0]= col[0]*0.7f + 0.3f; - glColor3fv(col); - + if(me->drawflag & ME_DRAWEXTRA_EDGELEN) { + UI_GetThemeColor3ubv(TH_DRAWEXTRA_EDGELEN, col); + for(eed= em->edges.first; eed; eed= eed->next) { /* draw non fgon edges, or selected edges, or edges next to selected verts while draging */ if((eed->h != EM_FGON) && ((eed->f & SELECT) || (do_moving && ((eed->v1->f & SELECT) || (eed->v2->f & SELECT)) ))) { @@ -2155,19 +2153,14 @@ static void draw_em_measure_stats(View3D *v3d, RegionView3D *rv3d, Object *ob, E else sprintf(val, conv_float, len_v3v3(v1, v2)); - view3d_cached_text_draw_add(vmid, val, 0, V3D_CACHE_TEXT_ASCII); + view3d_cached_text_draw_add(vmid, val, 0, V3D_CACHE_TEXT_ASCII, col); } } } - if(me->drawflag & ME_DRAW_FACEAREA) { + if(me->drawflag & ME_DRAWEXTRA_FACEAREA) { // XXX extern int faceselectedOR(EditFace *efa, int flag); // editmesh.h shouldn't be in this file... ok for now? - - UI_GetThemeColor3fv(TH_TEXT, col); - /* make color a bit more green */ - if(col[1]> 0.5f) {col[0]*=0.7f; col[2]*= 0.7f;} - else col[1]= col[1]*0.7f + 0.3f; - glColor3fv(col); + UI_GetThemeColor3ubv(TH_DRAWEXTRA_FACEAREA, col); for(efa= em->faces.first; efa; efa= efa->next) { if((efa->f & SELECT)) { // XXX || (do_moving && faceselectedOR(efa, SELECT)) ) { @@ -2194,20 +2187,14 @@ static void draw_em_measure_stats(View3D *v3d, RegionView3D *rv3d, Object *ob, E else sprintf(val, conv_float, area); - view3d_cached_text_draw_add(efa->cent, val, 0, V3D_CACHE_TEXT_ASCII); + view3d_cached_text_draw_add(efa->cent, val, 0, V3D_CACHE_TEXT_ASCII, col); } } } - if(me->drawflag & ME_DRAW_EDGEANG) { + if(me->drawflag & ME_DRAWEXTRA_FACEANG) { EditEdge *e1, *e2, *e3, *e4; - - UI_GetThemeColor3fv(TH_TEXT, col); - /* make color a bit more blue */ - if(col[2]> 0.5f) {col[0]*=0.7f; col[1]*= 0.7f;} - else col[2]= col[2]*0.7f + 0.3f; - glColor3fv(col); - + UI_GetThemeColor3ubv(TH_DRAWEXTRA_FACEANG, col); for(efa= em->faces.first; efa; efa= efa->next) { copy_v3_v3(v1, efa->v1->co); copy_v3_v3(v2, efa->v2->co); @@ -2234,31 +2221,31 @@ static void draw_em_measure_stats(View3D *v3d, RegionView3D *rv3d, Object *ob, E if( (e4->f & e1->f & SELECT) || (do_moving && (efa->v1->f & SELECT)) ) { /* Vec 1 */ - sprintf(val,"%.3f", RAD2DEG(angle_v3v3v3(v4, v1, v2))); + sprintf(val,"%.3g", RAD2DEG(angle_v3v3v3(v4, v1, v2))); interp_v3_v3v3(fvec, efa->cent, efa->v1->co, 0.8f); - view3d_cached_text_draw_add(fvec, val, 0, V3D_CACHE_TEXT_ASCII); + view3d_cached_text_draw_add(fvec, val, 0, V3D_CACHE_TEXT_ASCII, col); } if( (e1->f & e2->f & SELECT) || (do_moving && (efa->v2->f & SELECT)) ) { /* Vec 2 */ - sprintf(val,"%.3f", RAD2DEG(angle_v3v3v3(v1, v2, v3))); + sprintf(val,"%.3g", RAD2DEG(angle_v3v3v3(v1, v2, v3))); interp_v3_v3v3(fvec, efa->cent, efa->v2->co, 0.8f); - view3d_cached_text_draw_add(fvec, val, 0, V3D_CACHE_TEXT_ASCII); + view3d_cached_text_draw_add(fvec, val, 0, V3D_CACHE_TEXT_ASCII, col); } if( (e2->f & e3->f & SELECT) || (do_moving && (efa->v3->f & SELECT)) ) { /* Vec 3 */ if(efa->v4) - sprintf(val,"%.3f", RAD2DEG(angle_v3v3v3(v2, v3, v4))); + sprintf(val,"%.3g", RAD2DEG(angle_v3v3v3(v2, v3, v4))); else - sprintf(val,"%.3f", RAD2DEG(angle_v3v3v3(v2, v3, v1))); + sprintf(val,"%.3g", RAD2DEG(angle_v3v3v3(v2, v3, v1))); interp_v3_v3v3(fvec, efa->cent, efa->v3->co, 0.8f); - view3d_cached_text_draw_add(fvec, val, 0, V3D_CACHE_TEXT_ASCII); + view3d_cached_text_draw_add(fvec, val, 0, V3D_CACHE_TEXT_ASCII, col); } /* Vec 4 */ if(efa->v4) { if( (e3->f & e4->f & SELECT) || (do_moving && (efa->v4->f & SELECT)) ) { - sprintf(val,"%.3f", RAD2DEG(angle_v3v3v3(v3, v4, v1))); + sprintf(val,"%.3g", RAD2DEG(angle_v3v3v3(v3, v4, v1))); interp_v3_v3v3(fvec, efa->cent, efa->v4->co, 0.8f); - view3d_cached_text_draw_add(fvec, val, 0, V3D_CACHE_TEXT_ASCII); + view3d_cached_text_draw_add(fvec, val, 0, V3D_CACHE_TEXT_ASCII, col); } } } @@ -2355,9 +2342,9 @@ static void draw_em_fancy(Scene *scene, View3D *v3d, RegionView3D *rv3d, Object if(me->drawflag & ME_DRAWFACES) { /* transp faces */ unsigned char col1[4], col2[4], col3[4]; - UI_GetThemeColor4ubv(TH_FACE, (char *)col1); - UI_GetThemeColor4ubv(TH_FACE_SELECT, (char *)col2); - UI_GetThemeColor4ubv(TH_EDITMESH_ACTIVE, (char *)col3); + UI_GetThemeColor4ubv(TH_FACE, col1); + UI_GetThemeColor4ubv(TH_FACE_SELECT, col2); + UI_GetThemeColor4ubv(TH_EDITMESH_ACTIVE, col3); glEnable(GL_BLEND); glDepthMask(0); // disable write in zbuffer, needed for nice transp @@ -2376,7 +2363,7 @@ static void draw_em_fancy(Scene *scene, View3D *v3d, RegionView3D *rv3d, Object * */ unsigned char col1[4], col2[4], col3[4]; col1[3] = col2[3] = 0; /* dont draw */ - UI_GetThemeColor4ubv(TH_EDITMESH_ACTIVE, (char *)col3); + UI_GetThemeColor4ubv(TH_EDITMESH_ACTIVE, col3); glEnable(GL_BLEND); glDepthMask(0); // disable write in zbuffer, needed for nice transp @@ -2439,7 +2426,7 @@ static void draw_em_fancy(Scene *scene, View3D *v3d, RegionView3D *rv3d, Object draw_dm_vert_normals(scene, cageDM); } - if(me->drawflag & (ME_DRAW_EDGELEN|ME_DRAW_FACEAREA|ME_DRAW_EDGEANG)) + if(me->drawflag & (ME_DRAWEXTRA_EDGELEN|ME_DRAWEXTRA_FACEAREA|ME_DRAWEXTRA_FACEANG) && !((v3d->flag2 & V3D_RENDER_OVERRIDE))) draw_em_measure_stats(v3d, rv3d, ob, em, &scene->unit); } @@ -3474,6 +3461,7 @@ static void draw_new_particle_system(Scene *scene, View3D *v3d, RegionView3D *rv int select=ob->flag&SELECT, create_cdata=0, need_v=0; GLint polygonmode[2]; char val[32]; + unsigned char tcol[4]= {0, 0, 0, 255}; /* 1. */ if(psys==0) @@ -3531,14 +3519,14 @@ static void draw_new_particle_system(Scene *scene, View3D *v3d, RegionView3D *rv if(v3d->zbuf) glDepthMask(1); if((ma) && (part->draw&PART_DRAW_MAT_COL)) { - glColor3f(ma->r,ma->g,ma->b); + rgb_float_to_byte(&(ma->r), tcol); ma_r = ma->r; ma_g = ma->g; ma_b = ma->b; } - else - cpack(0); + + glColor3ubv(tcol); timestep= psys_get_timestep(&sim); @@ -3889,7 +3877,7 @@ static void draw_new_particle_system(Scene *scene, View3D *v3d, RegionView3D *rv /* in path drawing state.co is the end point */ /* use worldspace beause object matrix is already applied */ mul_v3_m4v3(vec_txt, ob->imat, state.co); - view3d_cached_text_draw_add(vec_txt, val, 10, V3D_CACHE_TEXT_WORLDSPACE|V3D_CACHE_TEXT_ASCII); + view3d_cached_text_draw_add(vec_txt, val, 10, V3D_CACHE_TEXT_WORLDSPACE|V3D_CACHE_TEXT_ASCII, tcol); } } } @@ -3981,7 +3969,7 @@ static void draw_new_particle_system(Scene *scene, View3D *v3d, RegionView3D *rv sprintf(val, "%i", a); /* use worldspace beause object matrix is already applied */ mul_v3_m4v3(vec_txt, ob->imat, cache[a]->co); - view3d_cached_text_draw_add(vec_txt, val, 10, V3D_CACHE_TEXT_WORLDSPACE|V3D_CACHE_TEXT_ASCII); + view3d_cached_text_draw_add(vec_txt, val, 10, V3D_CACHE_TEXT_WORLDSPACE|V3D_CACHE_TEXT_ASCII, tcol); } } } @@ -5561,6 +5549,13 @@ void drawRBpivot(bRigidBodyJointConstraint *data) int axis; float mat[4][4]; + /* color */ + float curcol[4]; + unsigned char tcol[4]; + glGetFloatv(GL_CURRENT_COLOR, curcol); + rgb_float_to_byte(curcol, tcol); + tcol[3]= 255; + eul_to_mat4(mat,&data->axX); glLineWidth (4.0f); setlinestyle(2); @@ -5578,11 +5573,11 @@ void drawRBpivot(bRigidBodyJointConstraint *data) glVertex3fv(v); glEnd(); if (axis==0) - view3d_cached_text_draw_add(v, "px", 0, V3D_CACHE_TEXT_ASCII); + view3d_cached_text_draw_add(v, "px", 0, V3D_CACHE_TEXT_ASCII, tcol); else if (axis==1) - view3d_cached_text_draw_add(v, "py", 0, V3D_CACHE_TEXT_ASCII); + view3d_cached_text_draw_add(v, "py", 0, V3D_CACHE_TEXT_ASCII, tcol); else - view3d_cached_text_draw_add(v, "pz", 0, V3D_CACHE_TEXT_ASCII); + view3d_cached_text_draw_add(v, "pz", 0, V3D_CACHE_TEXT_ASCII, tcol); } glLineWidth (1.0f); setlinestyle(0); @@ -6212,7 +6207,12 @@ void draw_object(Scene *scene, ARegion *ar, View3D *v3d, Base *base, int flag) /* but, we also dont draw names for sets or duplicators */ if(flag == 0) { float zero[3]= {0,0,0}; - view3d_cached_text_draw_add(zero, ob->id.name+2, 10, 0); + float curcol[4]; + unsigned char tcol[4]; + glGetFloatv(GL_CURRENT_COLOR, curcol); + rgb_float_to_byte(curcol, tcol); + tcol[3]= 255; + view3d_cached_text_draw_add(zero, ob->id.name+2, 10, 0, tcol); } } /*if(dtx & OB_DRAWIMAGE) drawDispListwire(&ob->disp);*/ @@ -6297,11 +6297,11 @@ void draw_object(Scene *scene, ARegion *ar, View3D *v3d, Base *base, int flag) if (list) { bConstraint *curcon; bConstraintOb *cob; - char col1[4], col2[4]; + unsigned char col1[4], col2[4]; UI_GetThemeColor3ubv(TH_GRID, col1); - UI_make_axis_color(col1, col2, 'z'); - glColor3ubv((GLubyte *)col2); + UI_make_axis_color(col1, col2, 'Z'); + glColor3ubv(col2); cob= constraints_make_evalob(scene, ob, NULL, CONSTRAINT_OBTYPE_OBJECT); diff --git a/source/blender/editors/space_view3d/view3d_draw.c b/source/blender/editors/space_view3d/view3d_draw.c index 6bf87e1964b..35ea3f10d48 100644 --- a/source/blender/editors/space_view3d/view3d_draw.c +++ b/source/blender/editors/space_view3d/view3d_draw.c @@ -249,7 +249,7 @@ static void drawgrid(UnitSettings *unit, ARegion *ar, View3D *v3d, const char ** RegionView3D *rv3d= ar->regiondata; float wx, wy, x, y, fw, fx, fy, dx; float vec4[4]; - char col[3], col2[3]; + unsigned char col[3], col2[3]; vec4[0]=vec4[1]=vec4[2]=0.0; vec4[3]= 1.0; @@ -398,16 +398,16 @@ static void drawgrid(UnitSettings *unit, ARegion *ar, View3D *v3d, const char ** /* center cross */ if( ELEM(rv3d->view, RV3D_VIEW_RIGHT, RV3D_VIEW_LEFT)) - UI_make_axis_color(col, col2, 'y'); - else UI_make_axis_color(col, col2, 'x'); - glColor3ubv((GLubyte *)col2); + UI_make_axis_color(col, col2, 'Y'); + else UI_make_axis_color(col, col2, 'Z'); + glColor3ubv(col2); fdrawline(0.0, y, (float)ar->winx, y); if( ELEM(rv3d->view, RV3D_VIEW_TOP, RV3D_VIEW_BOTTOM)) - UI_make_axis_color(col, col2, 'y'); - else UI_make_axis_color(col, col2, 'z'); - glColor3ubv((GLubyte *)col2); + UI_make_axis_color(col, col2, 'Y'); + else UI_make_axis_color(col, col2, 'Z'); + glColor3ubv(col2); fdrawline(x, 0.0, x, (float)ar->winy); @@ -419,7 +419,7 @@ static void drawfloor(Scene *scene, View3D *v3d, const char **grid_unit) { float vert[3], grid, grid_scale; int a, gridlines, emphasise; - char col[3], col2[3]; + unsigned char col[3], col2[3]; short draw_line = 0; vert[2]= 0.0; @@ -462,8 +462,8 @@ static void drawfloor(Scene *scene, View3D *v3d, const char **grid_unit) if(a==0) { /* check for the 'show Y axis' preference */ if (v3d->gridflag & V3D_SHOW_Y) { - UI_make_axis_color(col, col2, 'y'); - glColor3ubv((GLubyte *)col2); + UI_make_axis_color(col, col2, 'Y'); + glColor3ubv(col2); draw_line = 1; } else if (v3d->gridflag & V3D_SHOW_FLOOR) { @@ -501,8 +501,8 @@ static void drawfloor(Scene *scene, View3D *v3d, const char **grid_unit) if(a==0) { /* check for the 'show X axis' preference */ if (v3d->gridflag & V3D_SHOW_X) { - UI_make_axis_color(col, col2, 'x'); - glColor3ubv((GLubyte *)col2); + UI_make_axis_color(col, col2, 'X'); + glColor3ubv(col2); draw_line = 1; } else if (v3d->gridflag & V3D_SHOW_FLOOR) { @@ -538,8 +538,8 @@ static void drawfloor(Scene *scene, View3D *v3d, const char **grid_unit) /* draw the Z axis line */ /* check for the 'show Z axis' preference */ if (v3d->gridflag & V3D_SHOW_Z) { - UI_make_axis_color(col, col2, 'z'); - glColor3ubv((GLubyte *)col2); + UI_make_axis_color(col, col2, 'Z'); + glColor3ubv(col2); glBegin(GL_LINE_STRIP); vert[0]= 0; diff --git a/source/blender/editors/space_view3d/view3d_intern.h b/source/blender/editors/space_view3d/view3d_intern.h index 83ef57cfd0f..06d457778b2 100644 --- a/source/blender/editors/space_view3d/view3d_intern.h +++ b/source/blender/editors/space_view3d/view3d_intern.h @@ -114,7 +114,7 @@ void draw_object_backbufsel(Scene *scene, View3D *v3d, RegionView3D *rv3d, struc void drawaxes(float size, char drawtype); void view3d_cached_text_draw_begin(void); -void view3d_cached_text_draw_add(const float co[3], const char *str, short xoffs, short flag); +void view3d_cached_text_draw_add(const float co[3], const char *str, short xoffs, short flag, const unsigned char col[4]); void view3d_cached_text_draw_end(View3D *v3d, ARegion *ar, int depth_write, float mat[][4]); #define V3D_CACHE_TEXT_ZBUF (1<<0) #define V3D_CACHE_TEXT_WORLDSPACE (1<<1) -- cgit v1.2.3 From 2888016fb9ef6a27ecf7fb98bd837341ef50fff4 Mon Sep 17 00:00:00 2001 From: Campbell Barton Date: Mon, 20 Dec 2010 09:46:30 +0000 Subject: higher precision for wright & radius button. --- source/blender/editors/space_view3d/view3d_buttons.c | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) (limited to 'source/blender/editors/space_view3d') diff --git a/source/blender/editors/space_view3d/view3d_buttons.c b/source/blender/editors/space_view3d/view3d_buttons.c index 9450a3f223a..ade240366cd 100644 --- a/source/blender/editors/space_view3d/view3d_buttons.c +++ b/source/blender/editors/space_view3d/view3d_buttons.c @@ -303,15 +303,15 @@ static void v3d_editvertex_buts(uiLayout *layout, View3D *v3d, Object *ob, float uiButSetUnitType(but, PROP_UNIT_LENGTH); if(totw==1) { - uiDefButF(block, NUM, B_OBJECTPANELMEDIAN, "W:", 0, 50, 200, 20, &(tfp->ve_median[3]), 0.01, 100.0, 10, 3, ""); + uiDefButF(block, NUM, B_OBJECTPANELMEDIAN, "W:", 0, 50, 200, 20, &(tfp->ve_median[3]), 0.01, 100.0, 1, 3, ""); uiBlockBeginAlign(block); uiDefButBitS(block, TOG, V3D_GLOBAL_STATS, B_REDR, "Global", 0, 25, 100, 20, &v3d->flag, 0, 0, 0, 0, "Displays global values"); uiDefButBitS(block, TOGN, V3D_GLOBAL_STATS, B_REDR, "Local", 100, 25, 100, 20, &v3d->flag, 0, 0, 0, 0, "Displays local values"); uiBlockEndAlign(block); if(totweight) - uiDefButF(block, NUM, B_OBJECTPANELMEDIAN, "Weight:", 0, 0, 200, 20, &(tfp->ve_median[4]), 0.0, 1.0, 10, 3, ""); + uiDefButF(block, NUM, B_OBJECTPANELMEDIAN, "Weight:", 0, 0, 200, 20, &(tfp->ve_median[4]), 0.0, 1.0, 1, 3, ""); if(totradius) - uiDefButF(block, NUM, B_OBJECTPANELMEDIAN, "Radius:", 0, 0, 200, 20, &(tfp->ve_median[5]), 0.0, 100.0, 10, 3, "Radius of curve CPs"); + uiDefButF(block, NUM, B_OBJECTPANELMEDIAN, "Radius:", 0, 0, 200, 20, &(tfp->ve_median[5]), 0.0, 100.0, 1, 3, "Radius of curve CPs"); } else { uiBlockBeginAlign(block); @@ -334,7 +334,7 @@ static void v3d_editvertex_buts(uiLayout *layout, View3D *v3d, Object *ob, float but= uiDefButF(block, NUM, B_OBJECTPANELMEDIAN, "Z:", 0, 70, 200, 20, &(tfp->ve_median[2]), -lim, lim, 10, 3, ""); uiButSetUnitType(but, PROP_UNIT_LENGTH); if(totw==tot) { - uiDefButF(block, NUM, B_OBJECTPANELMEDIAN, "W:", 0, 50, 200, 20, &(tfp->ve_median[3]), 0.01, 100.0, 10, 3, ""); + uiDefButF(block, NUM, B_OBJECTPANELMEDIAN, "W:", 0, 50, 200, 20, &(tfp->ve_median[3]), 0.01, 100.0, 1, 3, ""); uiBlockEndAlign(block); uiBlockBeginAlign(block); uiDefButBitS(block, TOG, V3D_GLOBAL_STATS, B_REDR, "Global", 0, 25, 100, 20, &v3d->flag, 0, 0, 0, 0, "Displays global values"); @@ -352,17 +352,17 @@ static void v3d_editvertex_buts(uiLayout *layout, View3D *v3d, Object *ob, float uiDefButBitS(block, TOGN, V3D_GLOBAL_STATS, B_REDR, "Local", 100, 45, 100, 20, &v3d->flag, 0, 0, 0, 0, "Displays local values"); uiBlockEndAlign(block); if(totweight) - uiDefButF(block, NUM, B_OBJECTPANELMEDIAN, "Weight:", 0, 20, 200, 20, &(tfp->ve_median[4]), 0.0, 1.0, 10, 3, "Weight is used for SoftBody Goal"); + uiDefButF(block, NUM, B_OBJECTPANELMEDIAN, "Weight:", 0, 20, 200, 20, &(tfp->ve_median[4]), 0.0, 1.0, 1, 3, "Weight is used for SoftBody Goal"); if(totradius) - uiDefButF(block, NUM, B_OBJECTPANELMEDIAN, "Radius:", 0, 0, 200, 20, &(tfp->ve_median[5]), 0.0, 100.0, 10, 3, "Radius of curve CPs"); + uiDefButF(block, NUM, B_OBJECTPANELMEDIAN, "Radius:", 0, 0, 200, 20, &(tfp->ve_median[5]), 0.0, 100.0, 1, 3, "Radius of curve CPs"); uiBlockEndAlign(block); } } if(totedge==1) - uiDefButF(block, NUM, B_OBJECTPANELMEDIAN, "Crease:", 0, 20, 200, 20, &(tfp->ve_median[3]), 0.0, 1.0, 10, 3, ""); + uiDefButF(block, NUM, B_OBJECTPANELMEDIAN, "Crease:", 0, 20, 200, 20, &(tfp->ve_median[3]), 0.0, 1.0, 1, 3, ""); else if(totedge>1) - uiDefButF(block, NUM, B_OBJECTPANELMEDIAN, "Mean Crease:", 0, 20, 200, 20, &(tfp->ve_median[3]), 0.0, 1.0, 10, 3, ""); + uiDefButF(block, NUM, B_OBJECTPANELMEDIAN, "Mean Crease:", 0, 20, 200, 20, &(tfp->ve_median[3]), 0.0, 1.0, 1, 3, ""); } else { // apply -- cgit v1.2.3 From 63b9d0bcaaad02203e855cf270f70f3ace5d11f8 Mon Sep 17 00:00:00 2001 From: Ton Roosendaal Date: Mon, 20 Dec 2010 13:32:26 +0000 Subject: 3D ortho view: the axes lines of grid had wrong color for X. Thanks Mario Kishalmi for the report :) --- source/blender/editors/space_view3d/view3d_draw.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) (limited to 'source/blender/editors/space_view3d') diff --git a/source/blender/editors/space_view3d/view3d_draw.c b/source/blender/editors/space_view3d/view3d_draw.c index 35ea3f10d48..968579dbd1d 100644 --- a/source/blender/editors/space_view3d/view3d_draw.c +++ b/source/blender/editors/space_view3d/view3d_draw.c @@ -397,13 +397,15 @@ static void drawgrid(UnitSettings *unit, ARegion *ar, View3D *v3d, const char ** setlinestyle(0); /* center cross */ + /* horizontal line */ if( ELEM(rv3d->view, RV3D_VIEW_RIGHT, RV3D_VIEW_LEFT)) UI_make_axis_color(col, col2, 'Y'); - else UI_make_axis_color(col, col2, 'Z'); + else UI_make_axis_color(col, col2, 'X'); glColor3ubv(col2); fdrawline(0.0, y, (float)ar->winx, y); + /* vertical line */ if( ELEM(rv3d->view, RV3D_VIEW_TOP, RV3D_VIEW_BOTTOM)) UI_make_axis_color(col, col2, 'Y'); else UI_make_axis_color(col, col2, 'Z'); -- cgit v1.2.3 From aeba7032e6fe3f70ede89b24cd9e6d098adb993b Mon Sep 17 00:00:00 2001 From: Ton Roosendaal Date: Tue, 21 Dec 2010 18:55:49 +0000 Subject: Bugfix #25330 3D Window: Snap to cursor or grid, didn't respect the 'restrict location' options for objects or bones. --- source/blender/editors/space_view3d/view3d_snap.c | 35 ++++++++++++++--------- 1 file changed, 21 insertions(+), 14 deletions(-) (limited to 'source/blender/editors/space_view3d') diff --git a/source/blender/editors/space_view3d/view3d_snap.c b/source/blender/editors/space_view3d/view3d_snap.c index beb6170e0dc..64aa21d6ad8 100644 --- a/source/blender/editors/space_view3d/view3d_snap.c +++ b/source/blender/editors/space_view3d/view3d_snap.c @@ -510,7 +510,12 @@ static int snap_sel_to_grid(bContext *C, wmOperator *UNUSED(op)) armature_loc_pose_to_bone(pchan, vec, vecN); /* adjust location */ - VECCOPY(pchan->loc, vecN); + if ((pchan->protectflag & OB_LOCK_LOCX)==0) + pchan->loc[0]= vecN[0]; + if ((pchan->protectflag & OB_LOCK_LOCY)==0) + pchan->loc[0]= vecN[1]; + if ((pchan->protectflag & OB_LOCK_LOCZ)==0) + pchan->loc[0]= vecN[2]; } /* if the bone has a parent and is connected to the parent, * don't do anything - will break chain unless we do auto-ik. @@ -536,16 +541,14 @@ static int snap_sel_to_grid(bContext *C, wmOperator *UNUSED(op)) invert_m3_m3(imat, originmat); mul_m3_v3(imat, vec); - ob->loc[0]+= vec[0]; - ob->loc[1]+= vec[1]; - ob->loc[2]+= vec[2]; } - else { + if ((ob->protectflag & OB_LOCK_LOCX)==0) ob->loc[0]+= vec[0]; + if ((ob->protectflag & OB_LOCK_LOCY)==0) ob->loc[1]+= vec[1]; + if ((ob->protectflag & OB_LOCK_LOCZ)==0) ob->loc[2]+= vec[2]; - } - + /* auto-keyframing */ // XXX autokeyframe_ob_cb_func(ob, TFM_TRANSLATION); } @@ -633,8 +636,13 @@ static int snap_sel_to_curs(bContext *C, wmOperator *UNUSED(op)) /* get location of cursor in bone-space */ armature_loc_pose_to_bone(pchan, cursp, curspn); - /* calculate new position */ - VECCOPY(pchan->loc, curspn); + /* copy new position */ + if ((pchan->protectflag & OB_LOCK_LOCX)==0) + pchan->loc[0]= curspn[0]; + if ((pchan->protectflag & OB_LOCK_LOCY)==0) + pchan->loc[1]= curspn[1]; + if ((pchan->protectflag & OB_LOCK_LOCZ)==0) + pchan->loc[2]= curspn[2]; } /* if the bone has a parent and is connected to the parent, * don't do anything - will break chain unless we do auto-ik. @@ -660,15 +668,14 @@ static int snap_sel_to_curs(bContext *C, wmOperator *UNUSED(op)) invert_m3_m3(imat, originmat); mul_m3_v3(imat, vec); - ob->loc[0]+= vec[0]; - ob->loc[1]+= vec[1]; - ob->loc[2]+= vec[2]; } - else { + if ((ob->protectflag & OB_LOCK_LOCX)==0) ob->loc[0]+= vec[0]; + if ((ob->protectflag & OB_LOCK_LOCY)==0) ob->loc[1]+= vec[1]; + if ((ob->protectflag & OB_LOCK_LOCZ)==0) ob->loc[2]+= vec[2]; - } + /* auto-keyframing */ // XXX autokeyframe_ob_cb_func(ob, TFM_TRANSLATION); } -- cgit v1.2.3 From 2dc2f50a6e8ac9bb0278c3620ec3d0e6fe19747f Mon Sep 17 00:00:00 2001 From: Campbell Barton Date: Wed, 22 Dec 2010 02:28:06 +0000 Subject: bugfix [#25335] crash with file, console told me to report! svn 33836 view rotate precision was lost over time, make view3d rotate normalize rv3d->viewquat. note, this no longer crashes blender, just prints. also commented some RegionView3D struct members. --- source/blender/editors/space_view3d/view3d_edit.c | 3 +++ 1 file changed, 3 insertions(+) (limited to 'source/blender/editors/space_view3d') diff --git a/source/blender/editors/space_view3d/view3d_edit.c b/source/blender/editors/space_view3d/view3d_edit.c index cfe4dc55d17..8dfbe982ede 100644 --- a/source/blender/editors/space_view3d/view3d_edit.c +++ b/source/blender/editors/space_view3d/view3d_edit.c @@ -690,6 +690,9 @@ static void viewrotate_apply(ViewOpsData *vod, int x, int y) vod->oldx= x; vod->oldy= y; + /* avoid precission loss over time */ + normalize_qt(rv3d->viewquat); + ED_region_tag_redraw(vod->ar); } -- cgit v1.2.3 From 5e382eb8e512aa6701edeaf513b527c648648191 Mon Sep 17 00:00:00 2001 From: Campbell Barton Date: Wed, 22 Dec 2010 23:09:30 +0000 Subject: rename blenderlib to blender_add_lib --- source/blender/editors/space_view3d/CMakeLists.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'source/blender/editors/space_view3d') diff --git a/source/blender/editors/space_view3d/CMakeLists.txt b/source/blender/editors/space_view3d/CMakeLists.txt index 0e4c9ca6aa3..1f47a25ad92 100644 --- a/source/blender/editors/space_view3d/CMakeLists.txt +++ b/source/blender/editors/space_view3d/CMakeLists.txt @@ -62,4 +62,4 @@ endif() add_definitions(-DGLEW_STATIC) -blenderlib(bf_editor_space_view3d "${SRC}" "${INC}") +blender_add_lib(bf_editor_space_view3d "${SRC}" "${INC}") -- cgit v1.2.3 From 86b89af5ddaede7bedf6a98f20e0b4f92e5796b2 Mon Sep 17 00:00:00 2001 From: Campbell Barton Date: Thu, 23 Dec 2010 02:43:40 +0000 Subject: use ICON_NULL define rather then 0, makes UI calls less confusing. (no functional change) eg: uiItemR(row, &dvar_ptr, "type", 0, "", 0); -> uiItemR(row, &dvar_ptr, "type", 0, "", ICON_NULL); --- .../blender/editors/space_view3d/view3d_buttons.c | 90 +++++++++++----------- .../blender/editors/space_view3d/view3d_header.c | 12 +-- .../blender/editors/space_view3d/view3d_select.c | 2 +- .../blender/editors/space_view3d/view3d_toolbar.c | 4 +- 4 files changed, 54 insertions(+), 54 deletions(-) (limited to 'source/blender/editors/space_view3d') diff --git a/source/blender/editors/space_view3d/view3d_buttons.c b/source/blender/editors/space_view3d/view3d_buttons.c index ade240366cd..85900435112 100644 --- a/source/blender/editors/space_view3d/view3d_buttons.c +++ b/source/blender/editors/space_view3d/view3d_buttons.c @@ -784,57 +784,57 @@ static void v3d_transform_butsR(uiLayout *layout, PointerRNA *ptr) uiLayoutSetActive(split, !(bone->parent && bone->flag & BONE_CONNECTED)); } colsub = uiLayoutColumn(split, 1); - uiItemR(colsub, ptr, "location", 0, "Location", 0); + uiItemR(colsub, ptr, "location", 0, "Location", ICON_NULL); colsub = uiLayoutColumn(split, 1); - uiItemL(colsub, "", 0); - uiItemR(colsub, ptr, "lock_location", UI_ITEM_R_TOGGLE+UI_ITEM_R_ICON_ONLY, "", 0); + uiItemL(colsub, "", ICON_NULL); + uiItemR(colsub, ptr, "lock_location", UI_ITEM_R_TOGGLE+UI_ITEM_R_ICON_ONLY, "", ICON_NULL); split = uiLayoutSplit(layout, 0.8, 0); switch(RNA_enum_get(ptr, "rotation_mode")) { case ROT_MODE_QUAT: /* quaternion */ colsub = uiLayoutColumn(split, 1); - uiItemR(colsub, ptr, "rotation_quaternion", 0, "Rotation", 0); + uiItemR(colsub, ptr, "rotation_quaternion", 0, "Rotation", ICON_NULL); colsub = uiLayoutColumn(split, 1); - uiItemR(colsub, ptr, "lock_rotations_4d", UI_ITEM_R_TOGGLE, "4L", 0); + uiItemR(colsub, ptr, "lock_rotations_4d", UI_ITEM_R_TOGGLE, "4L", ICON_NULL); if (RNA_boolean_get(ptr, "lock_rotations_4d")) - uiItemR(colsub, ptr, "lock_rotation_w", UI_ITEM_R_TOGGLE+UI_ITEM_R_ICON_ONLY, "", 0); + uiItemR(colsub, ptr, "lock_rotation_w", UI_ITEM_R_TOGGLE+UI_ITEM_R_ICON_ONLY, "", ICON_NULL); else - uiItemL(colsub, "", 0); - uiItemR(colsub, ptr, "lock_rotation", UI_ITEM_R_TOGGLE+UI_ITEM_R_ICON_ONLY, "", 0); + uiItemL(colsub, "", ICON_NULL); + uiItemR(colsub, ptr, "lock_rotation", UI_ITEM_R_TOGGLE+UI_ITEM_R_ICON_ONLY, "", ICON_NULL); break; case ROT_MODE_AXISANGLE: /* axis angle */ colsub = uiLayoutColumn(split, 1); - uiItemR(colsub, ptr, "rotation_axis_angle", 0, "Rotation", 0); + uiItemR(colsub, ptr, "rotation_axis_angle", 0, "Rotation", ICON_NULL); colsub = uiLayoutColumn(split, 1); - uiItemR(colsub, ptr, "lock_rotations_4d", UI_ITEM_R_TOGGLE, "4L", 0); + uiItemR(colsub, ptr, "lock_rotations_4d", UI_ITEM_R_TOGGLE, "4L", ICON_NULL); if (RNA_boolean_get(ptr, "lock_rotations_4d")) - uiItemR(colsub, ptr, "lock_rotation_w", UI_ITEM_R_TOGGLE+UI_ITEM_R_ICON_ONLY, "", 0); + uiItemR(colsub, ptr, "lock_rotation_w", UI_ITEM_R_TOGGLE+UI_ITEM_R_ICON_ONLY, "", ICON_NULL); else - uiItemL(colsub, "", 0); - uiItemR(colsub, ptr, "lock_rotation", UI_ITEM_R_TOGGLE+UI_ITEM_R_ICON_ONLY, "", 0); + uiItemL(colsub, "", ICON_NULL); + uiItemR(colsub, ptr, "lock_rotation", UI_ITEM_R_TOGGLE+UI_ITEM_R_ICON_ONLY, "", ICON_NULL); break; default: /* euler rotations */ colsub = uiLayoutColumn(split, 1); - uiItemR(colsub, ptr, "rotation_euler", 0, "Rotation", 0); + uiItemR(colsub, ptr, "rotation_euler", 0, "Rotation", ICON_NULL); colsub = uiLayoutColumn(split, 1); - uiItemL(colsub, "", 0); - uiItemR(colsub, ptr, "lock_rotation", UI_ITEM_R_TOGGLE+UI_ITEM_R_ICON_ONLY, "", 0); + uiItemL(colsub, "", ICON_NULL); + uiItemR(colsub, ptr, "lock_rotation", UI_ITEM_R_TOGGLE+UI_ITEM_R_ICON_ONLY, "", ICON_NULL); break; } - uiItemR(layout, ptr, "rotation_mode", 0, "", 0); + uiItemR(layout, ptr, "rotation_mode", 0, "", ICON_NULL); split = uiLayoutSplit(layout, 0.8, 0); colsub = uiLayoutColumn(split, 1); - uiItemR(colsub, ptr, "scale", 0, "Scale", 0); + uiItemR(colsub, ptr, "scale", 0, "Scale", ICON_NULL); colsub = uiLayoutColumn(split, 1); - uiItemL(colsub, "", 0); - uiItemR(colsub, ptr, "lock_scale", UI_ITEM_R_TOGGLE+UI_ITEM_R_ICON_ONLY, "", 0); + uiItemL(colsub, "", ICON_NULL); + uiItemR(colsub, ptr, "lock_scale", UI_ITEM_R_TOGGLE+UI_ITEM_R_ICON_ONLY, "", ICON_NULL); if (ptr->type == &RNA_Object) { Object *ob = ptr->data; if (ELEM5(ob->type, OB_MESH, OB_CURVE, OB_SURF, OB_FONT, OB_MBALL)) - uiItemR(layout, ptr, "dimensions", 0, "Dimensions", 0); + uiItemR(layout, ptr, "dimensions", 0, "Dimensions", ICON_NULL); } } @@ -854,7 +854,7 @@ static void v3d_posearmature_buts(uiLayout *layout, Object *ob) // row= uiLayoutRow(layout, 0); if (!pchan) { - uiItemL(layout, "No Bone Active", 0); + uiItemL(layout, "No Bone Active", ICON_NULL); return; } @@ -965,18 +965,18 @@ static void v3d_editarmature_buts(uiLayout *layout, Object *ob) col= uiLayoutColumn(layout, 0); - uiItemR(col, &eboneptr, "head", 0, "Head", 0); + uiItemR(col, &eboneptr, "head", 0, "Head", ICON_NULL); if (ebone->parent && ebone->flag & BONE_CONNECTED ) { PointerRNA parptr = RNA_pointer_get(&eboneptr, "parent"); - uiItemR(col, &parptr, "tail_radius", 0, "Radius (Parent)", 0); + uiItemR(col, &parptr, "tail_radius", 0, "Radius (Parent)", ICON_NULL); } else { - uiItemR(col, &eboneptr, "head_radius", 0, "Radius", 0); + uiItemR(col, &eboneptr, "head_radius", 0, "Radius", ICON_NULL); } - uiItemR(col, &eboneptr, "tail", 0, "Tail", 0); - uiItemR(col, &eboneptr, "tail_radius", 0, "Radius", 0); + uiItemR(col, &eboneptr, "tail", 0, "Tail", ICON_NULL); + uiItemR(col, &eboneptr, "tail_radius", 0, "Radius", ICON_NULL); - uiItemR(col, &eboneptr, "roll", 0, "Roll", 0); + uiItemR(col, &eboneptr, "roll", 0, "Roll", ICON_NULL); } static void v3d_editmetaball_buts(uiLayout *layout, Object *ob) @@ -995,37 +995,37 @@ static void v3d_editmetaball_buts(uiLayout *layout, Object *ob) RNA_pointer_create(&mball->id, &RNA_MetaElement, mball->lastelem, &ptr); col= uiLayoutColumn(layout, 0); - uiItemR(col, &ptr, "co", 0, "Location", 0); + uiItemR(col, &ptr, "co", 0, "Location", ICON_NULL); - uiItemR(col, &ptr, "radius", 0, "Radius", 0); - uiItemR(col, &ptr, "stiffness", 0, "Stiffness", 0); + uiItemR(col, &ptr, "radius", 0, "Radius", ICON_NULL); + uiItemR(col, &ptr, "stiffness", 0, "Stiffness", ICON_NULL); - uiItemR(col, &ptr, "type", 0, "Type", 0); + uiItemR(col, &ptr, "type", 0, "Type", ICON_NULL); col= uiLayoutColumn(layout, 1); switch (RNA_enum_get(&ptr, "type")) { case MB_BALL: break; case MB_CUBE: - uiItemL(col, "Size:", 0); - uiItemR(col, &ptr, "size_x", 0, "X", 0); - uiItemR(col, &ptr, "size_y", 0, "Y", 0); - uiItemR(col, &ptr, "size_z", 0, "Z", 0); + uiItemL(col, "Size:", ICON_NULL); + uiItemR(col, &ptr, "size_x", 0, "X", ICON_NULL); + uiItemR(col, &ptr, "size_y", 0, "Y", ICON_NULL); + uiItemR(col, &ptr, "size_z", 0, "Z", ICON_NULL); break; case MB_TUBE: - uiItemL(col, "Size:", 0); - uiItemR(col, &ptr, "size_x", 0, "X", 0); + uiItemL(col, "Size:", ICON_NULL); + uiItemR(col, &ptr, "size_x", 0, "X", ICON_NULL); break; case MB_PLANE: - uiItemL(col, "Size:", 0); - uiItemR(col, &ptr, "size_x", 0, "X", 0); - uiItemR(col, &ptr, "size_y", 0, "Y", 0); + uiItemL(col, "Size:", ICON_NULL); + uiItemR(col, &ptr, "size_x", 0, "X", ICON_NULL); + uiItemR(col, &ptr, "size_y", 0, "Y", ICON_NULL); break; case MB_ELIPSOID: - uiItemL(col, "Size:", 0); - uiItemR(col, &ptr, "size_x", 0, "X", 0); - uiItemR(col, &ptr, "size_y", 0, "Y", 0); - uiItemR(col, &ptr, "size_z", 0, "Z", 0); + uiItemL(col, "Size:", ICON_NULL); + uiItemR(col, &ptr, "size_x", 0, "X", ICON_NULL); + uiItemR(col, &ptr, "size_y", 0, "Y", ICON_NULL); + uiItemR(col, &ptr, "size_z", 0, "Z", ICON_NULL); break; } } diff --git a/source/blender/editors/space_view3d/view3d_header.c b/source/blender/editors/space_view3d/view3d_header.c index 213b48931b9..0f2f182e951 100644 --- a/source/blender/editors/space_view3d/view3d_header.c +++ b/source/blender/editors/space_view3d/view3d_header.c @@ -450,7 +450,7 @@ void uiTemplateHeader3D(uiLayout *layout, struct bContext *C) uiBlockEndAlign(block); /* Draw type */ - uiItemR(layout, &v3dptr, "viewport_shade", UI_ITEM_R_ICON_ONLY, "", 0); + uiItemR(layout, &v3dptr, "viewport_shade", UI_ITEM_R_ICON_ONLY, "", ICON_NULL); if (obedit==NULL && ((ob && ob->mode & (OB_MODE_VERTEX_PAINT|OB_MODE_WEIGHT_PAINT|OB_MODE_TEXTURE_PAINT)))) { /* Manipulators aren't used in weight paint mode */ @@ -458,13 +458,13 @@ void uiTemplateHeader3D(uiLayout *layout, struct bContext *C) PointerRNA meshptr; RNA_pointer_create(&ob->id, &RNA_Mesh, ob->data, &meshptr); - uiItemR(layout, &meshptr, "use_paint_mask", UI_ITEM_R_ICON_ONLY, "", 0); + uiItemR(layout, &meshptr, "use_paint_mask", UI_ITEM_R_ICON_ONLY, "", ICON_NULL); } else { const char *str_menu; row= uiLayoutRow(layout, 1); - uiItemR(row, &v3dptr, "pivot_point", UI_ITEM_R_ICON_ONLY, "", 0); - uiItemR(row, &v3dptr, "use_pivot_point_align", UI_ITEM_R_ICON_ONLY, "", 0); + uiItemR(row, &v3dptr, "pivot_point", UI_ITEM_R_ICON_ONLY, "", ICON_NULL); + uiItemR(row, &v3dptr, "use_pivot_point_align", UI_ITEM_R_ICON_ONLY, "", ICON_NULL); /* NDOF */ /* Not implemented yet @@ -479,7 +479,7 @@ void uiTemplateHeader3D(uiLayout *layout, struct bContext *C) /* Transform widget / manipulators */ row= uiLayoutRow(layout, 1); - uiItemR(row, &v3dptr, "show_manipulator", UI_ITEM_R_ICON_ONLY, "", 0); + uiItemR(row, &v3dptr, "show_manipulator", UI_ITEM_R_ICON_ONLY, "", ICON_NULL); block= uiLayoutGetBlock(row); if(v3d->twflag & V3D_USE_MANIPULATOR) { @@ -507,7 +507,7 @@ void uiTemplateHeader3D(uiLayout *layout, struct bContext *C) uiTemplateLayers(layout, &v3dptr, "layers", &v3dptr, "layers_used", ob_lay); /* Scene lock */ - uiItemR(layout, &v3dptr, "lock_camera_and_layers", UI_ITEM_R_ICON_ONLY, "", 0); + uiItemR(layout, &v3dptr, "lock_camera_and_layers", UI_ITEM_R_ICON_ONLY, "", ICON_NULL); } /* selection modus, dont use python for this since it cant do the toggle buttons with shift+click as well as clicking to set one. */ diff --git a/source/blender/editors/space_view3d/view3d_select.c b/source/blender/editors/space_view3d/view3d_select.c index d7f2f14d650..bbb26ad09a4 100644 --- a/source/blender/editors/space_view3d/view3d_select.c +++ b/source/blender/editors/space_view3d/view3d_select.c @@ -995,7 +995,7 @@ static Base *mouse_select_menu(bContext *C, ViewContext *vc, unsigned int *buffe } else { /* UI */ - uiPopupMenu *pup= uiPupMenuBegin(C, "Select Object", 0); + uiPopupMenu *pup= uiPupMenuBegin(C, "Select Object", ICON_NULL); uiLayout *layout= uiPupMenuLayout(pup); uiLayout *split= uiLayoutSplit(layout, 0, 0); uiLayout *column= uiLayoutColumn(split, 0); diff --git a/source/blender/editors/space_view3d/view3d_toolbar.c b/source/blender/editors/space_view3d/view3d_toolbar.c index 56ca1ce8280..c87eecb4220 100644 --- a/source/blender/editors/space_view3d/view3d_toolbar.c +++ b/source/blender/editors/space_view3d/view3d_toolbar.c @@ -93,7 +93,7 @@ static void view3d_panel_operator_redo_operator(const bContext *C, Panel *pa, wm { if(op->type->flag & OPTYPE_MACRO) { for(op= op->macro.first; op; op= op->next) { - uiItemL(pa->layout, op->type->name, 0); + uiItemL(pa->layout, op->type->name, ICON_NULL); view3d_panel_operator_redo_operator(C, pa, op); } } @@ -210,7 +210,7 @@ static void view3d_panel_tool_shelf(const bContext *C, Panel *pa) for(ct= st->toolshelf.first; ct; ct= ct->next) { if(0==strncmp(context, ct->context, OP_MAX_TYPENAME)) { col= uiLayoutColumn(pa->layout, 1); - uiItemFullO(col, ct->opname, NULL, 0, NULL, WM_OP_INVOKE_REGION_WIN, 0); + uiItemFullO(col, ct->opname, NULL, ICON_NULL, NULL, WM_OP_INVOKE_REGION_WIN, 0); } } } -- cgit v1.2.3 From c046ae14be2e0142c3ea9c5d81b946594043c3f7 Mon Sep 17 00:00:00 2001 From: Campbell Barton Date: Thu, 23 Dec 2010 04:16:31 +0000 Subject: Fix for multiple modifier stack calculations per frame. Since 2.5x blender has been using CD_MASK_BAREMESH for updating objects since object_handle_update() no longer has access to G.curscreen to calculate the mask from viewports. The problem with this is after an initial calculation, CD_MASK_MTFACE may be required on draw, so it would recalculate the modifier stack multiple times per frame. One case which caused this is armature animated mesh with texface in a dupligroup. Fix this by having customdata_mask member in the scene, this isn't great design but at least fixes the bug and only changes a few files. --- source/blender/editors/space_view3d/view3d_draw.c | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) (limited to 'source/blender/editors/space_view3d') diff --git a/source/blender/editors/space_view3d/view3d_draw.c b/source/blender/editors/space_view3d/view3d_draw.c index 968579dbd1d..407ac6da2c5 100644 --- a/source/blender/editors/space_view3d/view3d_draw.c +++ b/source/blender/editors/space_view3d/view3d_draw.c @@ -1950,8 +1950,10 @@ static void gpu_update_lamps_shadows(Scene *scene, View3D *v3d) /* *********************** customdata **************** */ /* goes over all modes and view3d settings */ -static CustomDataMask get_viewedit_datamask(bScreen *screen, Scene *scene, Object *ob) +CustomDataMask ED_viewedit_datamask(bScreen *screen) { + Scene *scene= screen->scene; + Object *ob= scene->basact ? scene->basact->object : NULL; CustomDataMask mask = CD_MASK_BAREMESH; ScrArea *sa; @@ -2301,11 +2303,10 @@ void view3d_main_area_draw(const bContext *C, ARegion *ar) Object *ob; float backcol[3]; unsigned int lay_used; - Object *obact = OBACT; const char *grid_unit= NULL; /* from now on all object derived meshes check this */ - v3d->customdata_mask= get_viewedit_datamask(CTX_wm_screen(C), scene, obact); + v3d->customdata_mask= scene->customdata_mask; /* shadow buffers, before we setup matrices */ if(draw_glsl_material(scene, NULL, v3d, v3d->drawtype)) -- cgit v1.2.3 From b4f61f073303f15b37f4e09e892157529043a73f Mon Sep 17 00:00:00 2001 From: Campbell Barton Date: Thu, 23 Dec 2010 04:26:53 +0000 Subject: remove View3D.customdata_mask, since its stored in the scene now there is no need for each view to store every views combine data mask. --- source/blender/editors/space_view3d/drawobject.c | 12 ++++++------ source/blender/editors/space_view3d/view3d_draw.c | 3 --- 2 files changed, 6 insertions(+), 9 deletions(-) (limited to 'source/blender/editors/space_view3d') diff --git a/source/blender/editors/space_view3d/drawobject.c b/source/blender/editors/space_view3d/drawobject.c index 556095d2f1c..b6d0efa26c5 100644 --- a/source/blender/editors/space_view3d/drawobject.c +++ b/source/blender/editors/space_view3d/drawobject.c @@ -2481,7 +2481,7 @@ static void draw_mesh_fancy(Scene *scene, ARegion *ar, View3D *v3d, RegionView3D int draw_wire = 0; int totvert, totedge, totface; DispList *dl; - DerivedMesh *dm= mesh_get_derived_final(scene, ob, v3d->customdata_mask); + DerivedMesh *dm= mesh_get_derived_final(scene, ob, scene->customdata_mask); if(!dm) return; @@ -2656,7 +2656,7 @@ static void draw_mesh_fancy(Scene *scene, ARegion *ar, View3D *v3d, RegionView3D dm->release(dm); shadeDispList(scene, base); dl = find_displist(&ob->disp, DL_VERTCOL); - dm= mesh_get_derived_final(scene, ob, v3d->customdata_mask); + dm= mesh_get_derived_final(scene, ob, scene->customdata_mask); } if ((v3d->flag&V3D_SELECT_OUTLINE) && ((v3d->flag2 & V3D_RENDER_OVERRIDE)==0) && (base->flag&SELECT) && !draw_wire) { @@ -2765,7 +2765,7 @@ static int draw_mesh_object(Scene *scene, ARegion *ar, View3D *v3d, RegionView3D finalDM = cageDM = editmesh_get_derived_base(ob, em); else cageDM = editmesh_get_derived_cage_and_final(scene, ob, em, &finalDM, - v3d->customdata_mask); + scene->customdata_mask); if(dt>OB_WIRE) { // no transp in editmode, the fancy draw over goes bad then @@ -6440,9 +6440,9 @@ static int bbs_mesh_solid_hide__setDrawOpts(void *userData, int index, int *UNUS } } -static void bbs_mesh_solid(Scene *scene, View3D *v3d, Object *ob) +static void bbs_mesh_solid(Scene *scene, Object *ob) { - DerivedMesh *dm = mesh_get_derived_final(scene, ob, v3d->customdata_mask); + DerivedMesh *dm = mesh_get_derived_final(scene, ob, scene->customdata_mask); Mesh *me = (Mesh*)ob->data; glColor3ub(0, 0, 0); @@ -6498,7 +6498,7 @@ void draw_object_backbufsel(Scene *scene, View3D *v3d, RegionView3D *rv3d, Objec EM_free_index_arrays(); } - else bbs_mesh_solid(scene, v3d, ob); + else bbs_mesh_solid(scene, ob); } break; case OB_CURVE: diff --git a/source/blender/editors/space_view3d/view3d_draw.c b/source/blender/editors/space_view3d/view3d_draw.c index 407ac6da2c5..c2928614d27 100644 --- a/source/blender/editors/space_view3d/view3d_draw.c +++ b/source/blender/editors/space_view3d/view3d_draw.c @@ -2305,9 +2305,6 @@ void view3d_main_area_draw(const bContext *C, ARegion *ar) unsigned int lay_used; const char *grid_unit= NULL; - /* from now on all object derived meshes check this */ - v3d->customdata_mask= scene->customdata_mask; - /* shadow buffers, before we setup matrices */ if(draw_glsl_material(scene, NULL, v3d, v3d->drawtype)) gpu_update_lamps_shadows(scene, v3d); -- cgit v1.2.3 From f543fe1500740d1d8adc03d61a3506cf800e80fc Mon Sep 17 00:00:00 2001 From: Ton Roosendaal Date: Thu, 23 Dec 2010 13:16:56 +0000 Subject: Bugfix #25341 Child-of constraint issue: on adding, it wasn't checking owner correctly for Bones, resulting in a constraint working in wrong space; it looked as if transform was applied double when moving the object. Only adding via Py API went wrong btw. Also found a silly check for drawing constraints, which caused constraint initialization to happen for every object on every redraw! Implementation note: con->flag CONSTRAINT_SPACEONCE was only used for child-of constraints in Bones, so I've patched it on file reading to always set the flag. Marked with XXX, so it can be removed one day. Now at least things get corrected well for imported armatures. --- source/blender/editors/space_view3d/drawobject.c | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) (limited to 'source/blender/editors/space_view3d') diff --git a/source/blender/editors/space_view3d/drawobject.c b/source/blender/editors/space_view3d/drawobject.c index b6d0efa26c5..1f1acef02db 100644 --- a/source/blender/editors/space_view3d/drawobject.c +++ b/source/blender/editors/space_view3d/drawobject.c @@ -6293,12 +6293,13 @@ void draw_object(Scene *scene, ARegion *ar, View3D *v3d, Base *base, int flag) } /* Drawing the constraint lines */ - list = &ob->constraints; - if (list) { + if (ob->constraints.first) { bConstraint *curcon; bConstraintOb *cob; unsigned char col1[4], col2[4]; + list = &ob->constraints; + UI_GetThemeColor3ubv(TH_GRID, col1); UI_make_axis_color(col1, col2, 'Z'); glColor3ubv(col2); -- cgit v1.2.3 From de55b7897c8ce62b4e7aac25764b0d06325a6dcb Mon Sep 17 00:00:00 2001 From: Nathan Letwory Date: Mon, 27 Dec 2010 09:56:05 +0000 Subject: Workaround for [#25279] Shift-Numpad combinations fail to align view to selected. On Windows shift+numpad triggers extra ctrl event, making this fail. For now, use Alt as modifier on Windows (other platforms remain with Shift). --- source/blender/editors/space_view3d/view3d_ops.c | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) (limited to 'source/blender/editors/space_view3d') diff --git a/source/blender/editors/space_view3d/view3d_ops.c b/source/blender/editors/space_view3d/view3d_ops.c index 22494db7020..6043db6a02f 100644 --- a/source/blender/editors/space_view3d/view3d_ops.c +++ b/source/blender/editors/space_view3d/view3d_ops.c @@ -181,6 +181,26 @@ void view3d_keymap(wmKeyConfig *keyconf) RNA_enum_set(WM_keymap_add_item(keymap, "VIEW3D_OT_view_orbit", WHEELDOWNMOUSE, KM_PRESS, KM_SHIFT|KM_ALT, 0)->ptr, "type", V3D_VIEW_STEPDOWN); /* active aligned, replaces '*' key in 2.4x */ +#ifdef WIN32 + kmi= WM_keymap_add_item(keymap, "VIEW3D_OT_viewnumpad", PAD1, KM_PRESS, KM_ALT, 0); + RNA_enum_set(kmi->ptr, "type", RV3D_VIEW_FRONT); + RNA_boolean_set(kmi->ptr, "align_active", TRUE); + kmi= WM_keymap_add_item(keymap, "VIEW3D_OT_viewnumpad", PAD3, KM_PRESS, KM_ALT, 0); + RNA_enum_set(kmi->ptr, "type", RV3D_VIEW_RIGHT); + RNA_boolean_set(kmi->ptr, "align_active", TRUE); + kmi= WM_keymap_add_item(keymap, "VIEW3D_OT_viewnumpad", PAD7, KM_PRESS, KM_ALT, 0); + RNA_enum_set(kmi->ptr, "type", RV3D_VIEW_TOP); + RNA_boolean_set(kmi->ptr, "align_active", TRUE); + kmi= WM_keymap_add_item(keymap, "VIEW3D_OT_viewnumpad", PAD1, KM_PRESS, KM_ALT|KM_CTRL, 0); + RNA_enum_set(kmi->ptr, "type", RV3D_VIEW_BACK); + RNA_boolean_set(kmi->ptr, "align_active", TRUE); + kmi= WM_keymap_add_item(keymap, "VIEW3D_OT_viewnumpad", PAD3, KM_PRESS, KM_ALT|KM_CTRL, 0); + RNA_enum_set(kmi->ptr, "type", RV3D_VIEW_LEFT); + RNA_boolean_set(kmi->ptr, "align_active", TRUE); + kmi= WM_keymap_add_item(keymap, "VIEW3D_OT_viewnumpad", PAD7, KM_PRESS, KM_ALT|KM_CTRL, 0); + RNA_enum_set(kmi->ptr, "type", RV3D_VIEW_BOTTOM); + RNA_boolean_set(kmi->ptr, "align_active", TRUE); +#else kmi= WM_keymap_add_item(keymap, "VIEW3D_OT_viewnumpad", PAD1, KM_PRESS, KM_SHIFT, 0); RNA_enum_set(kmi->ptr, "type", RV3D_VIEW_FRONT); RNA_boolean_set(kmi->ptr, "align_active", TRUE); @@ -199,6 +219,7 @@ void view3d_keymap(wmKeyConfig *keyconf) kmi= WM_keymap_add_item(keymap, "VIEW3D_OT_viewnumpad", PAD7, KM_PRESS, KM_SHIFT|KM_CTRL, 0); RNA_enum_set(kmi->ptr, "type", RV3D_VIEW_BOTTOM); RNA_boolean_set(kmi->ptr, "align_active", TRUE); +#endif WM_keymap_add_item(keymap, "VIEW3D_OT_localview", PADSLASHKEY, KM_PRESS, 0, 0); -- cgit v1.2.3 From d0074169fb7696b53030037a1a48ae3608346306 Mon Sep 17 00:00:00 2001 From: Ton Roosendaal Date: Tue, 28 Dec 2010 11:01:26 +0000 Subject: Bugfix: creating new 3d views in Blender now uses same defaults as startup blend: showing solid + outline selection. (It was wire, without outline select... confused people) --- source/blender/editors/space_view3d/space_view3d.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) (limited to 'source/blender/editors/space_view3d') diff --git a/source/blender/editors/space_view3d/space_view3d.c b/source/blender/editors/space_view3d/space_view3d.c index 08c50b95778..5c54791b2a0 100644 --- a/source/blender/editors/space_view3d/space_view3d.c +++ b/source/blender/editors/space_view3d/space_view3d.c @@ -196,13 +196,15 @@ static SpaceLink *view3d_new(const bContext *C) v3d->grid= 1.0f; v3d->gridlines= 16; v3d->gridsubdiv = 10; - v3d->drawtype= OB_WIRE; + v3d->drawtype= OB_SOLID; v3d->gridflag |= V3D_SHOW_X; v3d->gridflag |= V3D_SHOW_Y; v3d->gridflag |= V3D_SHOW_FLOOR; v3d->gridflag &= ~V3D_SHOW_Z; + v3d->flag |= V3D_SELECT_OUTLINE; + v3d->lens= 35.0f; v3d->near= 0.01f; v3d->far= 500.0f; -- cgit v1.2.3 From f3e623f49790ad0f92525e5f5a8094173d68e61f Mon Sep 17 00:00:00 2001 From: Ton Roosendaal Date: Thu, 30 Dec 2010 14:47:40 +0000 Subject: Bugfix #25407 Lamp shadows for offscreen render (opengl anim) had to be remade to cope with animated objects. Fix proved by Alexander Kuznetsov in the tracker log. Thanks! --- source/blender/editors/space_view3d/view3d_draw.c | 5 +++++ 1 file changed, 5 insertions(+) (limited to 'source/blender/editors/space_view3d') diff --git a/source/blender/editors/space_view3d/view3d_draw.c b/source/blender/editors/space_view3d/view3d_draw.c index c2928614d27..29629165661 100644 --- a/source/blender/editors/space_view3d/view3d_draw.c +++ b/source/blender/editors/space_view3d/view3d_draw.c @@ -2066,6 +2066,10 @@ void ED_view3d_draw_offscreen(Scene *scene, View3D *v3d, ARegion *ar, int winx, /* free images which can have changed on frame-change * warning! can be slow so only free animated images - campbell */ GPU_free_images_anim(); + + /* shadow buffers, before we setup matrices */ + if(draw_glsl_material(scene, NULL, v3d, v3d->drawtype)) + gpu_update_lamps_shadows(scene, v3d); /* set background color, fallback on the view background color */ if(scene->world) { @@ -2294,6 +2298,7 @@ static void draw_viewport_fps(Scene *scene, ARegion *ar) BLF_draw_default(22, ar->winy-17, 0.0f, printable, sizeof(printable)-1); } +/* warning: this function has duplicate drawing in ED_view3d_draw_offscreen() */ void view3d_main_area_draw(const bContext *C, ARegion *ar) { Scene *scene= CTX_data_scene(C); -- cgit v1.2.3 From d4ea9eb9e73e43589ed0e3ce1f4ad2f8366035d5 Mon Sep 17 00:00:00 2001 From: Joshua Leung Date: Fri, 31 Dec 2010 03:35:34 +0000 Subject: Bugfix [#25415] Circle Selection does not work on bones in Pose mode Clobbered together some new code to do this based on the code for Edit Bone circle select as this case doesn't seem to have been implemented yet. NOTE: the code in view3d_select.c needs some urgent love and tidying up (like a room full of flaking paint). --- .../blender/editors/space_view3d/view3d_select.c | 75 ++++++++++++++++++++-- 1 file changed, 71 insertions(+), 4 deletions(-) (limited to 'source/blender/editors/space_view3d') diff --git a/source/blender/editors/space_view3d/view3d_select.c b/source/blender/editors/space_view3d/view3d_select.c index bbb26ad09a4..d26137bd115 100644 --- a/source/blender/editors/space_view3d/view3d_select.c +++ b/source/blender/editors/space_view3d/view3d_select.c @@ -32,6 +32,7 @@ #include #include +#include "DNA_action_types.h" #include "DNA_armature_types.h" #include "DNA_curve_types.h" #include "DNA_meta_types.h" @@ -1688,9 +1689,11 @@ static int do_object_pose_box_select(bContext *C, ViewContext *vc, rcti *rect, i bone = get_indexed_bone(base->object, *col & ~(BONESEL_ANY)); if(bone) { if(select) { - bone->flag |= BONE_SELECTED; - bone_selected=1; + if ((bone->flag & BONE_UNSELECTABLE)==0) { + bone->flag |= BONE_SELECTED; + bone_selected=1; // XXX select_actionchannel_by_name(base->object->action, bone->name, 1); + } } else { bArmature *arm= base->object->data; @@ -2053,6 +2056,67 @@ static void lattice_circle_select(ViewContext *vc, int select, short *mval, floa } +// NOTE: pose-bone case is copied from editbone case... +static short pchan_circle_doSelectJoint(void *userData, bPoseChannel *pchan, int x, int y) +{ + struct {ViewContext *vc; short select, mval[2]; float radius; } *data = userData; + int mx = x - data->mval[0], my = y - data->mval[1]; + float r = sqrt(mx*mx + my*my); + + if (r <= data->radius) { + if (data->select) + pchan->bone->flag |= BONE_SELECTED; + else + pchan->bone->flag &= ~BONE_SELECTED; + return 1; + } + return 0; +} +static void pose_circle_select(ViewContext *vc, int select, short *mval, float rad) +{ + struct {ViewContext *vc; short select, mval[2]; float radius; } data; + bPose *pose = vc->obact->pose; + bPoseChannel *pchan; + int change= FALSE; + + /* set vc->edit data */ + data.select = select; + data.mval[0] = mval[0]; + data.mval[1] = mval[1]; + data.radius = rad; + + ED_view3d_init_mats_rv3d(vc->obact, vc->rv3d); /* for foreach's screen/vert projection */ + + /* check each PoseChannel... */ + // TODO: could be optimised at some point + for (pchan = pose->chanbase.first; pchan; pchan = pchan->next) { + short sco1[2], sco2[2], didpoint=0; + float vec[3]; + + /* project head location to screenspace */ + mul_v3_m4v3(vec, vc->obact->obmat, pchan->pose_head); + project_short(vc->ar, vec, sco1); + + /* project tail location to screenspace */ + mul_v3_m4v3(vec, vc->obact->obmat, pchan->pose_tail); + project_short(vc->ar, vec, sco2); + + /* check if the head and/or tail is in the circle + * - the call to check also does the selection already + */ + if (pchan_circle_doSelectJoint(&data, pchan, sco1[0], sco1[1])) + didpoint= 1; + if (pchan_circle_doSelectJoint(&data, pchan, sco2[0], sco2[1])) + didpoint= 1; + + change |= didpoint; + } + + if (change) { + WM_main_add_notifier(NC_OBJECT|ND_BONE_SELECT, vc->obact); + } +} + static short armature_circle_doSelectJoint(void *userData, EditBone *ebone, int x, int y, short head) { struct {ViewContext *vc; short select, mval[2]; float radius; } *data = userData; @@ -2172,8 +2236,9 @@ static int view3d_circle_select_exec(bContext *C, wmOperator *op) select= (gesture_mode==GESTURE_MODAL_SELECT); - if(CTX_data_edit_object(C) || paint_facesel_test(obact) || - (obact && obact->mode & OB_MODE_PARTICLE_EDIT)) { + if( CTX_data_edit_object(C) || paint_facesel_test(obact) || + (obact && (obact->mode & (OB_MODE_PARTICLE_EDIT|OB_MODE_POSE))) ) + { ViewContext vc; short mval[2]; @@ -2191,6 +2256,8 @@ static int view3d_circle_select_exec(bContext *C, wmOperator *op) paint_facesel_circle_select(&vc, select, mval, (float)radius); WM_event_add_notifier(C, NC_GEOM|ND_SELECT, obact->data); } + else if(obact->mode & OB_MODE_POSE) + pose_circle_select(&vc, select, mval, (float)radius); else return PE_circle_select(C, select, mval, (float)radius); } -- cgit v1.2.3 From 17c3275c36b62066c33bf79b4698de2557f9a5b7 Mon Sep 17 00:00:00 2001 From: Campbell Barton Date: Mon, 3 Jan 2011 01:26:54 +0000 Subject: bugfix [#25459] Zooming out with view3d.zoom() crashes blender completely --- source/blender/editors/space_view3d/view3d_edit.c | 67 ++++++++++++++++------- 1 file changed, 46 insertions(+), 21 deletions(-) (limited to 'source/blender/editors/space_view3d') diff --git a/source/blender/editors/space_view3d/view3d_edit.c b/source/blender/editors/space_view3d/view3d_edit.c index 8dfbe982ede..b06f2221a84 100644 --- a/source/blender/editors/space_view3d/view3d_edit.c +++ b/source/blender/editors/space_view3d/view3d_edit.c @@ -324,7 +324,7 @@ static void calctrackballvec(rcti *rect, int mx, int my, float *vec) static void viewops_data_create(bContext *C, wmOperator *op, wmEvent *event) { static float lastofs[3] = {0,0,0}; - View3D *v3d = CTX_wm_view3d(C); + View3D *v3d; RegionView3D *rv3d; ViewOpsData *vod= MEM_callocN(sizeof(ViewOpsData), "viewops data"); @@ -332,6 +332,7 @@ static void viewops_data_create(bContext *C, wmOperator *op, wmEvent *event) op->customdata= vod; vod->sa= CTX_wm_area(C); vod->ar= CTX_wm_region(C); + v3d= vod->sa->spacedata.first; vod->rv3d= rv3d= vod->ar->regiondata; vod->dist0= rv3d->dist; copy_qt_qt(vod->oldquat, rv3d->viewquat); @@ -404,19 +405,26 @@ static void viewops_data_create(bContext *C, wmOperator *op, wmEvent *event) static void viewops_data_free(bContext *C, wmOperator *op) { + ARegion *ar; Paint *p = paint_get_active(CTX_data_scene(C)); - ViewOpsData *vod= op->customdata; - vod->rv3d->rflag &= ~RV3D_NAVIGATING; + if(op->customdata) { + ViewOpsData *vod= op->customdata; + ar= vod->ar; + vod->rv3d->rflag &= ~RV3D_NAVIGATING; - if(p && (p->flags & PAINT_FAST_NAVIGATE)) - ED_region_tag_redraw(vod->ar); + if(vod->timer) + WM_event_remove_timer(CTX_wm_manager(C), vod->timer->win, vod->timer); - if(vod->timer) - WM_event_remove_timer(CTX_wm_manager(C), CTX_wm_window(C), vod->timer); + MEM_freeN(vod); + op->customdata= NULL; + } + else { + ar= CTX_wm_region(C); + } - MEM_freeN(vod); - op->customdata= NULL; + if(p && (p->flags & PAINT_FAST_NAVIGATE)) + ED_region_tag_redraw(ar); } /* ************************** viewrotate **********************************/ @@ -1194,11 +1202,30 @@ static int viewzoom_modal(bContext *C, wmOperator *op, wmEvent *event) static int viewzoom_exec(bContext *C, wmOperator *op) { - View3D *v3d = CTX_wm_view3d(C); - RegionView3D *rv3d= CTX_wm_region_view3d(C); + View3D *v3d; + RegionView3D *rv3d; + ScrArea *sa; + ARegion *ar; + int delta= RNA_int_get(op->ptr, "delta"); - int mx = RNA_int_get(op->ptr, "mx"); - int my = RNA_int_get(op->ptr, "my"); + int mx, my; + + if(op->customdata) { + ViewOpsData *vod= op->customdata; + + sa= vod->sa; + ar= vod->ar; + } + else { + sa= CTX_wm_area(C); + ar= CTX_wm_region(C); + } + + v3d= sa->spacedata.first; + rv3d= ar->regiondata; + + mx= RNA_property_is_set(op->ptr, "mx") ? RNA_int_get(op->ptr, "mx") : ar->winx / 2; + my= RNA_property_is_set(op->ptr, "my") ? RNA_int_get(op->ptr, "my") : ar->winy / 2; if(delta < 0) { /* this min and max is also in viewmove() */ @@ -1207,7 +1234,7 @@ static int viewzoom_exec(bContext *C, wmOperator *op) if(rv3d->camzoom < RV3D_CAMZOOM_MIN) rv3d->camzoom= RV3D_CAMZOOM_MIN; } else if(rv3d->dist<10.0*v3d->far) { - view_zoom_mouseloc(CTX_wm_region(C), 1.2f, mx, my); + view_zoom_mouseloc(ar, 1.2f, mx, my); } } else { @@ -1216,16 +1243,16 @@ static int viewzoom_exec(bContext *C, wmOperator *op) if(rv3d->camzoom > RV3D_CAMZOOM_MAX) rv3d->camzoom= RV3D_CAMZOOM_MAX; } else if(rv3d->dist> 0.001*v3d->grid) { - view_zoom_mouseloc(CTX_wm_region(C), .83333f, mx, my); + view_zoom_mouseloc(ar, .83333f, mx, my); } } if(rv3d->viewlock & RV3D_BOXVIEW) - view3d_boxview_sync(CTX_wm_area(C), CTX_wm_region(C)); + view3d_boxview_sync(sa, ar); request_depth_update(rv3d); - ED_region_tag_redraw(CTX_wm_region(C)); - + ED_region_tag_redraw(ar); + viewops_data_free(C, op); return OPERATOR_FINISHED; @@ -1233,8 +1260,6 @@ static int viewzoom_exec(bContext *C, wmOperator *op) static int viewzoom_invoke(bContext *C, wmOperator *op, wmEvent *event) { - int delta= RNA_int_get(op->ptr, "delta"); - /* if one or the other zoom position aren't set, set from event */ if (!RNA_property_is_set(op->ptr, "mx") || !RNA_property_is_set(op->ptr, "my")) { @@ -1242,7 +1267,7 @@ static int viewzoom_invoke(bContext *C, wmOperator *op, wmEvent *event) RNA_int_set(op->ptr, "my", event->y); } - if(delta) { + if(RNA_property_is_set(op->ptr, "delta")) { /* makes op->customdata */ viewops_data_create(C, op, event); viewzoom_exec(C, op); -- cgit v1.2.3 From f53363058549f1096dee7f5d2eecc87e049046d8 Mon Sep 17 00:00:00 2001 From: Campbell Barton Date: Mon, 3 Jan 2011 06:45:47 +0000 Subject: dont draw lamp volume when its being used as the view camera, would flicker annoyingly when flying the lamp about to position it. --- source/blender/editors/space_view3d/drawobject.c | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) (limited to 'source/blender/editors/space_view3d') diff --git a/source/blender/editors/space_view3d/drawobject.c b/source/blender/editors/space_view3d/drawobject.c index 1f1acef02db..e62b3c6746f 100644 --- a/source/blender/editors/space_view3d/drawobject.c +++ b/source/blender/editors/space_view3d/drawobject.c @@ -919,11 +919,10 @@ static void drawlamp(Scene *scene, View3D *v3d, RegionView3D *rv3d, Base *base, float lampsize; float imat[4][4], curcol[4]; unsigned char col[4]; - int drawcone= (dt>OB_WIRE && !(G.f & G_PICKSEL) && la->type == LA_SPOT && (la->mode & LA_SHOW_CONE)); - /* cone can't be drawn for duplicated lamps, because duplilist would be freed to */ /* the moment of view3d_draw_transp() call */ - drawcone&= (base->flag & OB_FROMDUPLI)==0; + const short is_view= (rv3d->persp==RV3D_CAMOB && v3d->camera == base->object); + const short drawcone= (dt>OB_WIRE && !(G.f & G_PICKSEL) && (la->type == LA_SPOT) && (la->mode & LA_SHOW_CONE) && !(base->flag & OB_FROMDUPLI) && !is_view); if(drawcone && !v3d->transp) { /* in this case we need to draw delayed */ @@ -1028,7 +1027,10 @@ static void drawlamp(Scene *scene, View3D *v3d, RegionView3D *rv3d, Base *base, glPopMatrix(); /* back in object space */ zero_v3(vec); - if ((la->type==LA_SPOT) || (la->type==LA_YF_PHOTON)) { + if(is_view) { + /* skip drawing extra info */ + } + else if ((la->type==LA_SPOT) || (la->type==LA_YF_PHOTON)) { lvec[0]=lvec[1]= 0.0; lvec[2] = 1.0; x = rv3d->persmat[0][2]; @@ -1171,7 +1173,7 @@ static void drawlamp(Scene *scene, View3D *v3d, RegionView3D *rv3d, Base *base, setlinestyle(0); - if(la->type==LA_SPOT && (la->mode & LA_SHAD_BUF) ) { + if((la->type == LA_SPOT) && (la->mode & LA_SHAD_BUF) && (is_view == FALSE)) { drawshadbuflimits(la, ob->obmat); } -- cgit v1.2.3 From 486c3cd937782bb7bb7feae3bc6ecf9a65141fd6 Mon Sep 17 00:00:00 2001 From: Campbell Barton Date: Mon, 3 Jan 2011 12:41:16 +0000 Subject: DAG_id_tag_update was being called with non object ID's and OB_RECALC_* flags which only apply to objects. harmless but misleading. --- source/blender/editors/space_view3d/view3d_snap.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'source/blender/editors/space_view3d') diff --git a/source/blender/editors/space_view3d/view3d_snap.c b/source/blender/editors/space_view3d/view3d_snap.c index 64aa21d6ad8..79e993a7085 100644 --- a/source/blender/editors/space_view3d/view3d_snap.c +++ b/source/blender/editors/space_view3d/view3d_snap.c @@ -87,7 +87,7 @@ static void special_transvert_update(Object *obedit) if(obedit) { - DAG_id_tag_update(obedit->data, OB_RECALC_DATA); + DAG_id_tag_update(obedit->data, 0); if(obedit->type==OB_MESH) { Mesh *me= obedit->data; -- cgit v1.2.3 From 64c3ea272e7be85c0f589a6f28eae28d7e7d0a9e Mon Sep 17 00:00:00 2001 From: Sergey Sharybin Date: Wed, 5 Jan 2011 10:40:38 +0000 Subject: Todo item: linked curve objects behaves incorrect with modifiers Use object's displists for storing deformed tesselated curve. Was unable to totally get rid of curve's displist because of how texture space is calculating. --- source/blender/editors/space_view3d/drawobject.c | 13 ++++++------- 1 file changed, 6 insertions(+), 7 deletions(-) (limited to 'source/blender/editors/space_view3d') diff --git a/source/blender/editors/space_view3d/drawobject.c b/source/blender/editors/space_view3d/drawobject.c index e62b3c6746f..d17657f086a 100644 --- a/source/blender/editors/space_view3d/drawobject.c +++ b/source/blender/editors/space_view3d/drawobject.c @@ -3146,7 +3146,7 @@ static int drawDispList(Scene *scene, View3D *v3d, RegionView3D *rv3d, Base *bas case OB_CURVE: cu= ob->data; - lb= &cu->disp; + lb= &ob->disp; if(solid) { dl= lb->first; @@ -3193,7 +3193,7 @@ static int drawDispList(Scene *scene, View3D *v3d, RegionView3D *rv3d, Base *bas break; case OB_SURF: - lb= &((Curve *)ob->data)->disp; + lb= &ob->disp; if(solid) { dl= lb->first; @@ -5436,7 +5436,7 @@ static void drawObjectSelect(Scene *scene, View3D *v3d, ARegion *ar, Base *base) if (dm) { hasfaces= dm->getNumFaces(dm); } else { - hasfaces= displist_has_faces(&cu->disp); + hasfaces= displist_has_faces(&ob->disp); } if (hasfaces && boundbox_clip(rv3d, ob->obmat, ob->bb ? ob->bb : cu->bb)) { @@ -5444,7 +5444,7 @@ static void drawObjectSelect(Scene *scene, View3D *v3d, ARegion *ar, Base *base) if (dm) { draw_mesh_object_outline(v3d, ob, dm); } else { - drawDispListwire(&cu->disp); + drawDispListwire(&ob->disp); } draw_index_wire= 1; } @@ -5499,7 +5499,7 @@ static void drawWireExtra(Scene *scene, RegionView3D *rv3d, Object *ob) if (ob->derivedFinal) { drawCurveDMWired(ob); } else { - drawDispListwire(&cu->disp); + drawDispListwire(&ob->disp); } if (ob->type==OB_CURVE) @@ -5820,9 +5820,8 @@ void draw_object(Scene *scene, ARegion *ar, View3D *v3d, Base *base, int flag) /* bad exception, solve this! otherwise outline shows too late */ if(ELEM3(ob->type, OB_CURVE, OB_SURF, OB_FONT)) { - cu= ob->data; /* still needed for curves hidden in other layers. depgraph doesnt handle that yet */ - if (cu->disp.first==NULL) makeDispListCurveTypes(scene, ob, 0); + if (ob->disp.first==NULL) makeDispListCurveTypes(scene, ob, 0); } /* draw outline for selected objects, mesh does itself */ -- cgit v1.2.3 From 054deb4584be2198843be0adf3f9b07d2b0fccfa Mon Sep 17 00:00:00 2001 From: Campbell Barton Date: Wed, 5 Jan 2011 15:37:36 +0000 Subject: remove ED_retopo.h --- source/blender/editors/space_view3d/view3d_edit.c | 2 +- source/blender/editors/space_view3d/view3d_select.c | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) (limited to 'source/blender/editors/space_view3d') diff --git a/source/blender/editors/space_view3d/view3d_edit.c b/source/blender/editors/space_view3d/view3d_edit.c index b06f2221a84..4f1a732fc81 100644 --- a/source/blender/editors/space_view3d/view3d_edit.c +++ b/source/blender/editors/space_view3d/view3d_edit.c @@ -52,6 +52,7 @@ #include "BIF_gl.h" +#include "BIF_glutil.h" #include "WM_api.h" #include "WM_types.h" @@ -60,7 +61,6 @@ #include "RNA_define.h" #include "ED_particle.h" -#include "ED_retopo.h" #include "ED_screen.h" #include "ED_transform.h" #include "ED_mesh.h" diff --git a/source/blender/editors/space_view3d/view3d_select.c b/source/blender/editors/space_view3d/view3d_select.c index d26137bd115..5f3713392b7 100644 --- a/source/blender/editors/space_view3d/view3d_select.c +++ b/source/blender/editors/space_view3d/view3d_select.c @@ -54,6 +54,7 @@ #include "BIF_gl.h" +#include "BIF_glutil.h" #include "WM_api.h" #include "WM_types.h" @@ -66,7 +67,6 @@ #include "ED_particle.h" #include "ED_mesh.h" #include "ED_object.h" -#include "ED_retopo.h" #include "ED_screen.h" #include "ED_mball.h" -- cgit v1.2.3 From 8f21a43535cb200c0569566a1b012aec883aa53c Mon Sep 17 00:00:00 2001 From: Campbell Barton Date: Fri, 7 Jan 2011 18:36:47 +0000 Subject: split BKE_utildefines.h, now it only has blender specific defines like GS() MAKE_ID, FILE_MAXDIR, moved the generic defines to BLI_utildefines.h. no functional changes. --- source/blender/editors/space_view3d/drawarmature.c | 1 + source/blender/editors/space_view3d/drawmesh.c | 2 +- source/blender/editors/space_view3d/drawobject.c | 1 + source/blender/editors/space_view3d/drawvolume.c | 5 +---- source/blender/editors/space_view3d/space_view3d.c | 1 + source/blender/editors/space_view3d/view3d_buttons.c | 2 +- source/blender/editors/space_view3d/view3d_draw.c | 1 + source/blender/editors/space_view3d/view3d_edit.c | 1 + source/blender/editors/space_view3d/view3d_fly.c | 1 + source/blender/editors/space_view3d/view3d_header.c | 10 +++++----- source/blender/editors/space_view3d/view3d_ops.c | 2 +- source/blender/editors/space_view3d/view3d_select.c | 1 + source/blender/editors/space_view3d/view3d_snap.c | 1 + source/blender/editors/space_view3d/view3d_toolbar.c | 1 + source/blender/editors/space_view3d/view3d_view.c | 1 + 15 files changed, 19 insertions(+), 12 deletions(-) (limited to 'source/blender/editors/space_view3d') diff --git a/source/blender/editors/space_view3d/drawarmature.c b/source/blender/editors/space_view3d/drawarmature.c index 27cb305f78f..82859591beb 100644 --- a/source/blender/editors/space_view3d/drawarmature.c +++ b/source/blender/editors/space_view3d/drawarmature.c @@ -43,6 +43,7 @@ #include "BLI_blenlib.h" #include "BLI_math.h" #include "BLI_dlrbTree.h" +#include "BLI_utildefines.h" #include "BKE_animsys.h" #include "BKE_action.h" diff --git a/source/blender/editors/space_view3d/drawmesh.c b/source/blender/editors/space_view3d/drawmesh.c index e38e9309611..6cd31328b1e 100644 --- a/source/blender/editors/space_view3d/drawmesh.c +++ b/source/blender/editors/space_view3d/drawmesh.c @@ -34,7 +34,7 @@ #include "BLI_math.h" #include "BLI_edgehash.h" #include "BLI_editVert.h" - +#include "BLI_utildefines.h" #include "DNA_material_types.h" #include "DNA_meshdata_types.h" diff --git a/source/blender/editors/space_view3d/drawobject.c b/source/blender/editors/space_view3d/drawobject.c index d17657f086a..49c6cea6c7d 100644 --- a/source/blender/editors/space_view3d/drawobject.c +++ b/source/blender/editors/space_view3d/drawobject.c @@ -47,6 +47,7 @@ #include "BLI_editVert.h" #include "BLI_edgehash.h" #include "BLI_rand.h" +#include "BLI_utildefines.h" #include "BKE_anim.h" //for the where_on_path function #include "BKE_constraint.h" // for the get_constraint_target function diff --git a/source/blender/editors/space_view3d/drawvolume.c b/source/blender/editors/space_view3d/drawvolume.c index 89bb0044eaf..d3691e7300a 100644 --- a/source/blender/editors/space_view3d/drawvolume.c +++ b/source/blender/editors/space_view3d/drawvolume.c @@ -31,10 +31,6 @@ #include "MEM_guardedalloc.h" - - - - #include "DNA_scene_types.h" #include "DNA_screen_types.h" #include "DNA_view3d_types.h" @@ -44,6 +40,7 @@ #include "BLI_editVert.h" #include "BLI_edgehash.h" #include "BLI_rand.h" +#include "BLI_utildefines.h" #include "BKE_curve.h" #include "BKE_constraint.h" // for the get_constraint_target function diff --git a/source/blender/editors/space_view3d/space_view3d.c b/source/blender/editors/space_view3d/space_view3d.c index 5c54791b2a0..9ec68d62364 100644 --- a/source/blender/editors/space_view3d/space_view3d.c +++ b/source/blender/editors/space_view3d/space_view3d.c @@ -37,6 +37,7 @@ #include "BLI_blenlib.h" #include "BLI_math.h" #include "BLI_rand.h" +#include "BLI_utildefines.h" #include "BKE_object.h" #include "BKE_context.h" diff --git a/source/blender/editors/space_view3d/view3d_buttons.c b/source/blender/editors/space_view3d/view3d_buttons.c index 85900435112..445b126cb2f 100644 --- a/source/blender/editors/space_view3d/view3d_buttons.c +++ b/source/blender/editors/space_view3d/view3d_buttons.c @@ -45,6 +45,7 @@ #include "BLI_blenlib.h" #include "BLI_editVert.h" #include "BLI_rand.h" +#include "BLI_utildefines.h" #include "BKE_action.h" #include "BKE_context.h" @@ -56,7 +57,6 @@ #include "BKE_screen.h" #include "BKE_deform.h" - #include "WM_api.h" #include "WM_types.h" diff --git a/source/blender/editors/space_view3d/view3d_draw.c b/source/blender/editors/space_view3d/view3d_draw.c index 29629165661..6afe2791ff9 100644 --- a/source/blender/editors/space_view3d/view3d_draw.c +++ b/source/blender/editors/space_view3d/view3d_draw.c @@ -45,6 +45,7 @@ #include "BLI_blenlib.h" #include "BLI_math.h" #include "BLI_rand.h" +#include "BLI_utildefines.h" #include "BKE_anim.h" #include "BKE_context.h" diff --git a/source/blender/editors/space_view3d/view3d_edit.c b/source/blender/editors/space_view3d/view3d_edit.c index 4f1a732fc81..35cddda5362 100644 --- a/source/blender/editors/space_view3d/view3d_edit.c +++ b/source/blender/editors/space_view3d/view3d_edit.c @@ -41,6 +41,7 @@ #include "BLI_blenlib.h" #include "BLI_math.h" #include "BLI_rand.h" +#include "BLI_utildefines.h" #include "BKE_context.h" #include "BKE_image.h" diff --git a/source/blender/editors/space_view3d/view3d_fly.c b/source/blender/editors/space_view3d/view3d_fly.c index 6b600f277f0..1e856ad49f7 100644 --- a/source/blender/editors/space_view3d/view3d_fly.c +++ b/source/blender/editors/space_view3d/view3d_fly.c @@ -32,6 +32,7 @@ #include "BLI_math.h" #include "BLI_blenlib.h" +#include "BLI_utildefines.h" #include "BKE_context.h" #include "BKE_object.h" diff --git a/source/blender/editors/space_view3d/view3d_header.c b/source/blender/editors/space_view3d/view3d_header.c index 0f2f182e951..a481fdb59f6 100644 --- a/source/blender/editors/space_view3d/view3d_header.c +++ b/source/blender/editors/space_view3d/view3d_header.c @@ -37,6 +37,11 @@ #include "MEM_guardedalloc.h" +#include "BLI_math.h" +#include "BLI_blenlib.h" +#include "BLI_editVert.h" +#include "BLI_utildefines.h" + #include "BKE_context.h" #include "BKE_depsgraph.h" #include "BKE_effect.h" @@ -58,11 +63,6 @@ #include "RNA_define.h" #include "RNA_enum_types.h" - -#include "BLI_math.h" -#include "BLI_blenlib.h" -#include "BLI_editVert.h" - #include "UI_interface.h" #include "UI_resources.h" diff --git a/source/blender/editors/space_view3d/view3d_ops.c b/source/blender/editors/space_view3d/view3d_ops.c index 6043db6a02f..cb6eee26df5 100644 --- a/source/blender/editors/space_view3d/view3d_ops.c +++ b/source/blender/editors/space_view3d/view3d_ops.c @@ -38,7 +38,7 @@ #include "BLI_math.h" #include "BLI_blenlib.h" - +#include "BLI_utildefines.h" #include "RNA_access.h" diff --git a/source/blender/editors/space_view3d/view3d_select.c b/source/blender/editors/space_view3d/view3d_select.c index 5f3713392b7..4bb263d3ed9 100644 --- a/source/blender/editors/space_view3d/view3d_select.c +++ b/source/blender/editors/space_view3d/view3d_select.c @@ -47,6 +47,7 @@ #include "BLI_editVert.h" #include "BLI_rand.h" #include "BLI_linklist.h" +#include "BLI_utildefines.h" #include "BKE_context.h" #include "BKE_paint.h" diff --git a/source/blender/editors/space_view3d/view3d_snap.c b/source/blender/editors/space_view3d/view3d_snap.c index 79e993a7085..e90998da21c 100644 --- a/source/blender/editors/space_view3d/view3d_snap.c +++ b/source/blender/editors/space_view3d/view3d_snap.c @@ -43,6 +43,7 @@ #include "BLI_math.h" #include "BLI_editVert.h" #include "BLI_linklist.h" +#include "BLI_utildefines.h" #include "BKE_armature.h" #include "BKE_context.h" diff --git a/source/blender/editors/space_view3d/view3d_toolbar.c b/source/blender/editors/space_view3d/view3d_toolbar.c index c87eecb4220..730cc553ff3 100644 --- a/source/blender/editors/space_view3d/view3d_toolbar.c +++ b/source/blender/editors/space_view3d/view3d_toolbar.c @@ -40,6 +40,7 @@ #include "BLI_blenlib.h" #include "BLI_editVert.h" #include "BLI_rand.h" +#include "BLI_utildefines.h" #include "BKE_context.h" #include "BKE_idprop.h" diff --git a/source/blender/editors/space_view3d/view3d_view.c b/source/blender/editors/space_view3d/view3d_view.c index c63bb7919a6..a259e29e9a0 100644 --- a/source/blender/editors/space_view3d/view3d_view.c +++ b/source/blender/editors/space_view3d/view3d_view.c @@ -36,6 +36,7 @@ #include "BLI_math.h" #include "BLI_rect.h" #include "BLI_listbase.h" +#include "BLI_utildefines.h" #include "BKE_anim.h" #include "BKE_action.h" -- cgit v1.2.3 From 89c9aaaa25cc7ce60c305d8e30e1c008cb117cf1 Mon Sep 17 00:00:00 2001 From: Campbell Barton Date: Fri, 7 Jan 2011 19:18:31 +0000 Subject: remove references to BKE_utildefines where its not needed. - move GS() define into DNA_ID.h - add BLI_utildefines as an automatic include with makesrna generated files. --- source/blender/editors/space_view3d/drawarmature.c | 2 +- source/blender/editors/space_view3d/drawmesh.c | 2 +- source/blender/editors/space_view3d/drawobject.c | 2 +- source/blender/editors/space_view3d/drawvolume.c | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) (limited to 'source/blender/editors/space_view3d') diff --git a/source/blender/editors/space_view3d/drawarmature.c b/source/blender/editors/space_view3d/drawarmature.c index 82859591beb..18a83e16ca1 100644 --- a/source/blender/editors/space_view3d/drawarmature.c +++ b/source/blender/editors/space_view3d/drawarmature.c @@ -51,7 +51,7 @@ #include "BKE_global.h" #include "BKE_modifier.h" #include "BKE_nla.h" -#include "BKE_utildefines.h" + #include "BIF_gl.h" #include "BIF_glutil.h" diff --git a/source/blender/editors/space_view3d/drawmesh.c b/source/blender/editors/space_view3d/drawmesh.c index 6cd31328b1e..c6cbfe44df4 100644 --- a/source/blender/editors/space_view3d/drawmesh.c +++ b/source/blender/editors/space_view3d/drawmesh.c @@ -50,7 +50,7 @@ #include "BKE_material.h" #include "BKE_paint.h" #include "BKE_property.h" -#include "BKE_utildefines.h" + #include "BIF_gl.h" #include "BIF_glutil.h" diff --git a/source/blender/editors/space_view3d/drawobject.c b/source/blender/editors/space_view3d/drawobject.c index 49c6cea6c7d..17e8b09ad68 100644 --- a/source/blender/editors/space_view3d/drawobject.c +++ b/source/blender/editors/space_view3d/drawobject.c @@ -68,7 +68,7 @@ #include "BKE_particle.h" #include "BKE_pointcache.h" #include "BKE_unit.h" -#include "BKE_utildefines.h" + #include "smoke_API.h" #include "BIF_gl.h" diff --git a/source/blender/editors/space_view3d/drawvolume.c b/source/blender/editors/space_view3d/drawvolume.c index d3691e7300a..0f6e0bdc834 100644 --- a/source/blender/editors/space_view3d/drawvolume.c +++ b/source/blender/editors/space_view3d/drawvolume.c @@ -62,7 +62,7 @@ #include "BKE_particle.h" #include "BKE_property.h" #include "BKE_smoke.h" -#include "BKE_utildefines.h" + #include "smoke_API.h" #include "BIF_gl.h" -- cgit v1.2.3 From 70a828d5a5d0bd49765b281c01ca27cf188e3fca Mon Sep 17 00:00:00 2001 From: Campbell Barton Date: Sun, 9 Jan 2011 01:17:56 +0000 Subject: remove unused vars, comment some which look like they could be useful still. have makesrna.c omit unused _data definitions for rna funcs with no args. --- source/blender/editors/space_view3d/view3d_buttons.c | 7 +------ 1 file changed, 1 insertion(+), 6 deletions(-) (limited to 'source/blender/editors/space_view3d') diff --git a/source/blender/editors/space_view3d/view3d_buttons.c b/source/blender/editors/space_view3d/view3d_buttons.c index 445b126cb2f..53a4981661f 100644 --- a/source/blender/editors/space_view3d/view3d_buttons.c +++ b/source/blender/editors/space_view3d/view3d_buttons.c @@ -282,12 +282,7 @@ static void v3d_editvertex_buts(uiLayout *layout, View3D *v3d, Object *ob, float if(block) { // buttons uiBut *but; - int but_y; - if((ob->parent) && (ob->partype == PARBONE)) but_y = 135; - else but_y = 150; - - - + memcpy(tfp->ve_median, median, sizeof(tfp->ve_median)); uiBlockBeginAlign(block); -- cgit v1.2.3 From 99a835d48258cb0106044ceb8de87d5c4ec16cd4 Mon Sep 17 00:00:00 2001 From: Campbell Barton Date: Sun, 9 Jan 2011 15:28:43 +0000 Subject: warning from clang, possible crash: 'cd' could be NULL, all other particle draw types checked 'cd' except for PART_DRAW_AXIS, seems logical to have the check here too. --- source/blender/editors/space_view3d/drawobject.c | 16 +++++++++------- 1 file changed, 9 insertions(+), 7 deletions(-) (limited to 'source/blender/editors/space_view3d') diff --git a/source/blender/editors/space_view3d/drawobject.c b/source/blender/editors/space_view3d/drawobject.c index 17e8b09ad68..8b77ff9bbdc 100644 --- a/source/blender/editors/space_view3d/drawobject.c +++ b/source/blender/editors/space_view3d/drawobject.c @@ -3326,13 +3326,15 @@ static void draw_particle(ParticleKey *state, int draw_as, short draw, float pix vec[1]=vec[2]=0.0; mul_qt_v3(state->rot,vec); if(draw_as==PART_DRAW_AXIS) { - cd[1]=cd[2]=cd[4]=cd[5]=0.0; - cd[0]=cd[3]=1.0; - cd[6]=cd[8]=cd[9]=cd[11]=0.0; - cd[7]=cd[10]=1.0; - cd[13]=cd[12]=cd[15]=cd[16]=0.0; - cd[14]=cd[17]=1.0; - pdd->cd+=18; + if(cd) { + cd[1]=cd[2]=cd[4]=cd[5]=0.0; + cd[0]=cd[3]=1.0; + cd[6]=cd[8]=cd[9]=cd[11]=0.0; + cd[7]=cd[10]=1.0; + cd[13]=cd[12]=cd[15]=cd[16]=0.0; + cd[14]=cd[17]=1.0; + pdd->cd+=18; + } copy_v3_v3(vec2,state->co); } -- cgit v1.2.3 From ede0d855229713ee383d114cf3c6fecc4ff30464 Mon Sep 17 00:00:00 2001 From: Campbell Barton Date: Mon, 10 Jan 2011 03:58:07 +0000 Subject: comment/remove various unused vars, also make rna function for new images require width and hight args. --- source/blender/editors/space_view3d/drawobject.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'source/blender/editors/space_view3d') diff --git a/source/blender/editors/space_view3d/drawobject.c b/source/blender/editors/space_view3d/drawobject.c index 8b77ff9bbdc..19353e9f29e 100644 --- a/source/blender/editors/space_view3d/drawobject.c +++ b/source/blender/editors/space_view3d/drawobject.c @@ -2482,7 +2482,7 @@ static void draw_mesh_fancy(Scene *scene, ARegion *ar, View3D *v3d, RegionView3D const short hasHaloMat = (ma && (ma->material_type == MA_TYPE_HALO)); const short is_paint_sel= (ob==OBACT && paint_facesel_test(ob)); int draw_wire = 0; - int totvert, totedge, totface; + int /* totvert,*/ totedge, totface; DispList *dl; DerivedMesh *dm= mesh_get_derived_final(scene, ob, scene->customdata_mask); @@ -2493,7 +2493,7 @@ static void draw_mesh_fancy(Scene *scene, ARegion *ar, View3D *v3d, RegionView3D draw_wire = 2; /* draw wire after solid using zoffset and depth buffer adjusment */ } - totvert = dm->getNumVerts(dm); + /* totvert = dm->getNumVerts(dm); */ /*UNUSED*/ totedge = dm->getNumEdges(dm); totface = dm->getNumFaces(dm); -- cgit v1.2.3 From 63018144badeb10c858504c918a3f66047c068b0 Mon Sep 17 00:00:00 2001 From: Campbell Barton Date: Wed, 12 Jan 2011 03:41:12 +0000 Subject: remove redundant assignments & unused vars. also minor functional changes - OBJECT_OT_make_links_data() type property is now assigned to the operator property (so popup menu can find it) - removing BG image now returns cancelled if no image is removed. --- source/blender/editors/space_view3d/drawarmature.c | 8 ++++---- source/blender/editors/space_view3d/drawmesh.c | 5 +---- source/blender/editors/space_view3d/drawobject.c | 5 ++--- source/blender/editors/space_view3d/view3d_edit.c | 11 ++++++----- source/blender/editors/space_view3d/view3d_view.c | 2 -- 5 files changed, 13 insertions(+), 18 deletions(-) (limited to 'source/blender/editors/space_view3d') diff --git a/source/blender/editors/space_view3d/drawarmature.c b/source/blender/editors/space_view3d/drawarmature.c index 18a83e16ca1..901aaba2cb1 100644 --- a/source/blender/editors/space_view3d/drawarmature.c +++ b/source/blender/editors/space_view3d/drawarmature.c @@ -630,15 +630,15 @@ static float co[16] ={ /* smat, imat = mat & imat to draw screenaligned */ static void draw_sphere_bone_dist(float smat[][4], float imat[][4], bPoseChannel *pchan, EditBone *ebone) { - float head, tail, length, dist; + float head, tail, dist /*, length*/; float *headvec, *tailvec, dirvec[3]; /* figure out the sizes of spheres */ if (ebone) { /* this routine doesn't call get_matrix_editbone() that calculates it */ ebone->length = len_v3v3(ebone->head, ebone->tail); - - length= ebone->length; + + /*length= ebone->length;*/ /*UNUSED*/ tail= ebone->rad_tail; dist= ebone->dist; if (ebone->parent && (ebone->flag & BONE_CONNECTED)) @@ -649,7 +649,7 @@ static void draw_sphere_bone_dist(float smat[][4], float imat[][4], bPoseChannel tailvec= ebone->tail; } else { - length= pchan->bone->length; + /*length= pchan->bone->length;*/ /*UNUSED*/ tail= pchan->bone->rad_tail; dist= pchan->bone->dist; if (pchan->parent && (pchan->bone->flag & BONE_CONNECTED)) diff --git a/source/blender/editors/space_view3d/drawmesh.c b/source/blender/editors/space_view3d/drawmesh.c index c6cbfe44df4..caac8d1d9fe 100644 --- a/source/blender/editors/space_view3d/drawmesh.c +++ b/source/blender/editors/space_view3d/drawmesh.c @@ -93,13 +93,10 @@ static EdgeHash *get_tface_mesh_marked_edge_info(Mesh *me) EdgeHash *eh = BLI_edgehash_new(); int i; MFace *mf; - MTFace *tf = NULL; for (i=0; itotface; i++) { mf = &me->mface[i]; - if (me->mtface) - tf = &me->mtface[i]; - + if (mf->v3) { if (!(mf->flag&ME_HIDE)) { unsigned int flags = eEdge_Visible; diff --git a/source/blender/editors/space_view3d/drawobject.c b/source/blender/editors/space_view3d/drawobject.c index 19353e9f29e..26445c4d742 100644 --- a/source/blender/editors/space_view3d/drawobject.c +++ b/source/blender/editors/space_view3d/drawobject.c @@ -3448,7 +3448,6 @@ static void draw_particle(ParticleKey *state, int draw_as, short draw, float pix static void draw_new_particle_system(Scene *scene, View3D *v3d, RegionView3D *rv3d, Base *base, ParticleSystem *psys, int ob_dt) { Object *ob=base->object; - ParticleSystemModifierData *psmd; ParticleEditSettings *pset = PE_settings(scene); ParticleSettings *part; ParticleData *pars, *pa; @@ -3460,7 +3459,7 @@ static void draw_new_particle_system(Scene *scene, View3D *v3d, RegionView3D *rv float vel[3], imat[4][4]; float timestep, pixsize=1.0, pa_size, r_tilt, r_length; float pa_time, pa_birthtime, pa_dietime, pa_health; - float cfra= bsystem_time(scene, ob,(float)CFRA,0.0); + float cfra; float ma_r=0.0f, ma_g=0.0f, ma_b=0.0f; int a, totpart, totpoint=0, totve=0, drawn, draw_as, totchild=0; int select=ob->flag&SELECT, create_cdata=0, need_v=0; @@ -3496,7 +3495,7 @@ static void draw_new_particle_system(Scene *scene, View3D *v3d, RegionView3D *rv sim.scene= scene; sim.ob= ob; sim.psys= psys; - sim.psmd = psmd = psys_get_modifier(ob,psys); + sim.psmd = psys_get_modifier(ob,psys); if(part->phystype==PART_PHYS_KEYED){ if(psys->flag&PSYS_KEYED){ diff --git a/source/blender/editors/space_view3d/view3d_edit.c b/source/blender/editors/space_view3d/view3d_edit.c index 35cddda5362..4eeacd6f05f 100644 --- a/source/blender/editors/space_view3d/view3d_edit.c +++ b/source/blender/editors/space_view3d/view3d_edit.c @@ -2314,20 +2314,21 @@ void VIEW3D_OT_background_image_add(wmOperatorType *ot) /* ***** remove image operator ******* */ static int background_image_remove_exec(bContext *C, wmOperator *op) { - BGpic *bgpic_rem = CTX_data_pointer_get_type(C, "bgpic", &RNA_BackgroundImage).data; View3D *vd = CTX_wm_view3d(C); int index = RNA_int_get(op->ptr, "index"); + BGpic *bgpic_rem= BLI_findlink(&vd->bgpicbase, index); - bgpic_rem = BLI_findlink(&vd->bgpicbase, index); if(bgpic_rem) { BLI_remlink(&vd->bgpicbase, bgpic_rem); if(bgpic_rem->ima) bgpic_rem->ima->id.us--; MEM_freeN(bgpic_rem); + WM_event_add_notifier(C, NC_SPACE|ND_SPACE_VIEW3D, vd); + return OPERATOR_FINISHED; + } + else { + return OPERATOR_CANCELLED; } - WM_event_add_notifier(C, NC_SPACE|ND_SPACE_VIEW3D, vd); - - return OPERATOR_FINISHED; } void VIEW3D_OT_background_image_remove(wmOperatorType *ot) diff --git a/source/blender/editors/space_view3d/view3d_view.c b/source/blender/editors/space_view3d/view3d_view.c index a259e29e9a0..2f7a24d600f 100644 --- a/source/blender/editors/space_view3d/view3d_view.c +++ b/source/blender/editors/space_view3d/view3d_view.c @@ -1743,7 +1743,6 @@ int ED_view3d_context_activate(bContext *C) bScreen *sc= CTX_wm_screen(C); ScrArea *sa= CTX_wm_area(C); ARegion *ar; - RegionView3D *rv3d; /* sa can be NULL when called from python */ if(sa==NULL || sa->spacetype != SPACE_VIEW3D) @@ -1764,7 +1763,6 @@ int ED_view3d_context_activate(bContext *C) // bad context switch .. CTX_wm_area_set(C, sa); CTX_wm_region_set(C, ar); - rv3d= ar->regiondata; return 1; } -- cgit v1.2.3 From 604d029ddf164e87eb453d83c59e65c2f16f8879 Mon Sep 17 00:00:00 2001 From: Ton Roosendaal Date: Wed, 12 Jan 2011 18:00:23 +0000 Subject: Bugfix #25570 The tool-redo depends on a working undo system, so it can rewind a step and then redo operator with new settings. When a user disables undo, this won't work. Now the properties for redo operator (toolbar, F6) will grey out when a redo isn't possible. --- source/blender/editors/space_view3d/view3d_toolbar.c | 3 +++ 1 file changed, 3 insertions(+) (limited to 'source/blender/editors/space_view3d') diff --git a/source/blender/editors/space_view3d/view3d_toolbar.c b/source/blender/editors/space_view3d/view3d_toolbar.c index 730cc553ff3..33ba1dbb7f9 100644 --- a/source/blender/editors/space_view3d/view3d_toolbar.c +++ b/source/blender/editors/space_view3d/view3d_toolbar.c @@ -114,6 +114,9 @@ static void view3d_panel_operator_redo(const bContext *C, Panel *pa) return; block= uiLayoutGetBlock(pa->layout); + + if(ED_undo_valid(C, op->type->name)==0) + uiLayoutSetEnabled(pa->layout, 0); uiBlockSetFunc(block, ED_undo_operator_repeat_cb, op, NULL); -- cgit v1.2.3 From 8227b3d463955d887a987fe546d8eefa2757a982 Mon Sep 17 00:00:00 2001 From: Campbell Barton Date: Thu, 13 Jan 2011 04:53:55 +0000 Subject: remove/comment unused vars also removed unnecessary NULL checks (where the pointer was used later without checking). --- source/blender/editors/space_view3d/drawarmature.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) (limited to 'source/blender/editors/space_view3d') diff --git a/source/blender/editors/space_view3d/drawarmature.c b/source/blender/editors/space_view3d/drawarmature.c index 901aaba2cb1..f16078ba454 100644 --- a/source/blender/editors/space_view3d/drawarmature.c +++ b/source/blender/editors/space_view3d/drawarmature.c @@ -760,7 +760,7 @@ static void draw_sphere_bone_dist(float smat[][4], float imat[][4], bPoseChannel /* smat, imat = mat & imat to draw screenaligned */ static void draw_sphere_bone_wire(float smat[][4], float imat[][4], int armflag, int boneflag, int constflag, unsigned int id, bPoseChannel *pchan, EditBone *ebone) { - float head, tail, length; + float head, tail /*, length*/; float *headvec, *tailvec, dirvec[3]; /* figure out the sizes of spheres */ @@ -768,7 +768,7 @@ static void draw_sphere_bone_wire(float smat[][4], float imat[][4], int armflag, /* this routine doesn't call get_matrix_editbone() that calculates it */ ebone->length = len_v3v3(ebone->head, ebone->tail); - length= ebone->length; + /*length= ebone->length;*/ /*UNUSED*/ tail= ebone->rad_tail; if (ebone->parent && (boneflag & BONE_CONNECTED)) head= ebone->parent->rad_tail; @@ -778,7 +778,7 @@ static void draw_sphere_bone_wire(float smat[][4], float imat[][4], int armflag, tailvec= ebone->tail; } else { - length= pchan->bone->length; + /*length= pchan->bone->length;*/ /*UNUSED*/ tail= pchan->bone->rad_tail; if ((pchan->parent) && (boneflag & BONE_CONNECTED)) head= pchan->parent->bone->rad_tail; -- cgit v1.2.3 From 4cb79661eb4b69b66a5c5c980790db360c7d7332 Mon Sep 17 00:00:00 2001 From: Janne Karhu Date: Sat, 15 Jan 2011 12:29:22 +0000 Subject: Fix for [#25633] Particles display switching causes crash when Velocity disp. ON * Particle draw data wasn't freed properly in some cases. * Velocity + circle draw type also crashed due to missing null pointer check. --- source/blender/editors/space_view3d/drawobject.c | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) (limited to 'source/blender/editors/space_view3d') diff --git a/source/blender/editors/space_view3d/drawobject.c b/source/blender/editors/space_view3d/drawobject.c index 26445c4d742..8724f2f9def 100644 --- a/source/blender/editors/space_view3d/drawobject.c +++ b/source/blender/editors/space_view3d/drawobject.c @@ -3684,6 +3684,11 @@ static void draw_new_particle_system(Scene *scene, View3D *v3d, RegionView3D *rv pdd->nd= pdd->ndata; pdd->tot_vec_size= tot_vec_size; } + else if(psys->pdd) { + psys_free_pdd(psys); + MEM_freeN(psys->pdd); + pdd = psys->pdd = NULL; + } if(pdd) { pdd->ma_r = &ma_r; @@ -3842,7 +3847,7 @@ static void draw_new_particle_system(Scene *scene, View3D *v3d, RegionView3D *rv if(drawn) { /* additional things to draw for each particle */ /* (velocity, size and number) */ - if((part->draw & PART_DRAW_VEL) && pdd->vedata){ + if((part->draw & PART_DRAW_VEL) && pdd && pdd->vedata){ copy_v3_v3(pdd->ved,state.co); pdd->ved += 3; mul_v3_v3fl(vel, state.vel, timestep); -- cgit v1.2.3 From 86bbab7de53b07ad9a45b11dbff6bd5c0ee40c14 Mon Sep 17 00:00:00 2001 From: Campbell Barton Date: Sat, 15 Jan 2011 16:14:57 +0000 Subject: remove/comment unused defines. --- source/blender/editors/space_view3d/view3d_intern.h | 6 ------ 1 file changed, 6 deletions(-) (limited to 'source/blender/editors/space_view3d') diff --git a/source/blender/editors/space_view3d/view3d_intern.h b/source/blender/editors/space_view3d/view3d_intern.h index 06d457778b2..73c07e8ac25 100644 --- a/source/blender/editors/space_view3d/view3d_intern.h +++ b/source/blender/editors/space_view3d/view3d_intern.h @@ -54,12 +54,6 @@ struct bMotionPath; #define DRAW_CONSTCOLOR 2 #define DRAW_SCENESET 4 -#define V3D_XRAY 1 -#define V3D_TRANSP 2 -#define V3D_XRAYTRANSP 4 - -#define V3D_SELECT_MOUSE 1 - /* view3d_header.c */ void view3d_header_buttons(const struct bContext *C, struct ARegion *ar); void VIEW3D_OT_layers(struct wmOperatorType *ot); -- cgit v1.2.3 From 1a0d88a10825a692291be27385103820477a851a Mon Sep 17 00:00:00 2001 From: Campbell Barton Date: Mon, 17 Jan 2011 22:37:24 +0000 Subject: fix [#25691] Lasso select on 3D Text editing segfaults poll function was incorrect. --- source/blender/editors/space_view3d/view3d_select.c | 20 ++++++++++++++------ 1 file changed, 14 insertions(+), 6 deletions(-) (limited to 'source/blender/editors/space_view3d') diff --git a/source/blender/editors/space_view3d/view3d_select.c b/source/blender/editors/space_view3d/view3d_select.c index 4bb263d3ed9..c55a1bf1489 100644 --- a/source/blender/editors/space_view3d/view3d_select.c +++ b/source/blender/editors/space_view3d/view3d_select.c @@ -218,16 +218,24 @@ void arrows_move_cursor(unsigned short event) static int view3d_selectable_data(bContext *C) { Object *ob = CTX_data_active_object(C); - + if (!ED_operator_region_view3d_active(C)) return 0; - - if (!CTX_data_edit_object(C)) - if (ob && ob->mode & OB_MODE_SCULPT) + + if (ob->mode & OB_MODE_EDIT) { + if(ob->type == OB_FONT) { return 0; - if (ob && ob->mode & (OB_MODE_VERTEX_PAINT|OB_MODE_WEIGHT_PAINT|OB_MODE_TEXTURE_PAINT) && !paint_facesel_test(ob)) + } + } + else { + if (ob && ob->mode & OB_MODE_SCULPT) { return 0; - + } + if (ob && ob->mode & (OB_MODE_VERTEX_PAINT|OB_MODE_WEIGHT_PAINT|OB_MODE_TEXTURE_PAINT) && !paint_facesel_test(ob)) { + return 0; + } + } + return 1; } -- cgit v1.2.3 From 398935163264df0f9937230d06184712f4a367b8 Mon Sep 17 00:00:00 2001 From: Campbell Barton Date: Mon, 17 Jan 2011 23:47:11 +0000 Subject: fix [#25694] Center View (Home Key) --- source/blender/editors/space_view3d/view3d_edit.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'source/blender/editors/space_view3d') diff --git a/source/blender/editors/space_view3d/view3d_edit.c b/source/blender/editors/space_view3d/view3d_edit.c index 4eeacd6f05f..ab41ecb18c4 100644 --- a/source/blender/editors/space_view3d/view3d_edit.c +++ b/source/blender/editors/space_view3d/view3d_edit.c @@ -1364,7 +1364,7 @@ static int view3d_all_exec(bContext *C, wmOperator *op) /* was view3d_home() in } for(base= scene->base.first; base; base= base->next) { - if(base->lay & v3d->lay) { + if(BASE_VISIBLE(v3d, base)) { onedone= 1; minmax_object(base->object, min, max); } -- cgit v1.2.3 From e49df9e09fca37fc1c85392574f9b68c48e92e57 Mon Sep 17 00:00:00 2001 From: Joshua Leung Date: Tue, 18 Jan 2011 01:04:14 +0000 Subject: Bugfix [#25684b] Surface and Stroke options are not working with Use Sketching Sessions. Fix for secondary issue noted in this bug report. Some of the code for the fancy 3d view sketching options needed to be moved around so that there is a clearer "paint/sketch session" and "stroke" separation between various stages. There's still some more stuff that needs to be done here before I think it's totally cleaned up. --- source/blender/editors/space_view3d/view3d_view.c | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) (limited to 'source/blender/editors/space_view3d') diff --git a/source/blender/editors/space_view3d/view3d_view.c b/source/blender/editors/space_view3d/view3d_view.c index 2f7a24d600f..49071af8bdd 100644 --- a/source/blender/editors/space_view3d/view3d_view.c +++ b/source/blender/editors/space_view3d/view3d_view.c @@ -69,15 +69,21 @@ opengl drawing context */ void view3d_operator_needs_opengl(const bContext *C) { + wmWindow *win = CTX_wm_window(C); ARegion *ar= CTX_wm_region(C); + + view3d_region_operator_needs_opengl(win, ar); +} +void view3d_region_operator_needs_opengl(wmWindow *win, ARegion *ar) +{ /* for debugging purpose, context should always be OK */ - if(ar->regiontype!=RGN_TYPE_WINDOW) - printf("view3d_operator_needs_opengl error, wrong region\n"); + if ((ar == NULL) || (ar->regiontype!=RGN_TYPE_WINDOW)) + printf("view3d_region_operator_needs_opengl error, wrong region\n"); else { RegionView3D *rv3d= ar->regiondata; - wmSubWindowSet(CTX_wm_window(C), ar->swinid); + wmSubWindowSet(win, ar->swinid); glMatrixMode(GL_PROJECTION); glLoadMatrixf(rv3d->winmat); glMatrixMode(GL_MODELVIEW); -- cgit v1.2.3 From 2167dc7f390468e196e64367e483366ea35767c7 Mon Sep 17 00:00:00 2001 From: Ton Roosendaal Date: Tue, 18 Jan 2011 14:34:59 +0000 Subject: Bugfix, irc report: general view3d operator poll() was reading NULL caused by commit for fix [#25691] 16 hours ago. --- .../blender/editors/space_view3d/view3d_select.c | 22 ++++++++++++---------- 1 file changed, 12 insertions(+), 10 deletions(-) (limited to 'source/blender/editors/space_view3d') diff --git a/source/blender/editors/space_view3d/view3d_select.c b/source/blender/editors/space_view3d/view3d_select.c index c55a1bf1489..f85bdc437f3 100644 --- a/source/blender/editors/space_view3d/view3d_select.c +++ b/source/blender/editors/space_view3d/view3d_select.c @@ -222,17 +222,19 @@ static int view3d_selectable_data(bContext *C) if (!ED_operator_region_view3d_active(C)) return 0; - if (ob->mode & OB_MODE_EDIT) { - if(ob->type == OB_FONT) { - return 0; - } - } - else { - if (ob && ob->mode & OB_MODE_SCULPT) { - return 0; + if(ob) { + if (ob->mode & OB_MODE_EDIT) { + if(ob->type == OB_FONT) { + return 0; + } } - if (ob && ob->mode & (OB_MODE_VERTEX_PAINT|OB_MODE_WEIGHT_PAINT|OB_MODE_TEXTURE_PAINT) && !paint_facesel_test(ob)) { - return 0; + else { + if (ob->mode & OB_MODE_SCULPT) { + return 0; + } + if (ob->mode & (OB_MODE_VERTEX_PAINT|OB_MODE_WEIGHT_PAINT|OB_MODE_TEXTURE_PAINT) && !paint_facesel_test(ob)) { + return 0; + } } } -- cgit v1.2.3 From f49d7d59dc0a83e074e9202a54c22f3c056aa5a6 Mon Sep 17 00:00:00 2001 From: Ton Roosendaal Date: Wed, 19 Jan 2011 14:19:20 +0000 Subject: Bugfix #25652 Report was that move-to-layer menu failed. The real cause was more complex; had to dive deep in the dungeons of the interface code that handled undos and operators. Found several issues: - popup menus (like redo operator, color picker) executed again on a mouse-exit - far too many buttons were sending undo pushes; even worse, in the operator redo-panel each button action was pushed twice - in case operator redo-buttons have own callbacks (like layer buttons) the redo wasn't working - layerbutton menu was called without creating a proper undo/redo case Things should all work smoother now! On todo: - better definition and handling of all versions for operator menus (four types now, not fun) also: make operator "do" menu, which on first action does operator and then switches to redo-ing - bring back Undo menu, to list the undo stack and jump in it. --- source/blender/editors/space_view3d/view3d_toolbar.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) (limited to 'source/blender/editors/space_view3d') diff --git a/source/blender/editors/space_view3d/view3d_toolbar.c b/source/blender/editors/space_view3d/view3d_toolbar.c index 33ba1dbb7f9..3f69ce3e8a8 100644 --- a/source/blender/editors/space_view3d/view3d_toolbar.c +++ b/source/blender/editors/space_view3d/view3d_toolbar.c @@ -118,7 +118,8 @@ static void view3d_panel_operator_redo(const bContext *C, Panel *pa) if(ED_undo_valid(C, op->type->name)==0) uiLayoutSetEnabled(pa->layout, 0); - uiBlockSetFunc(block, ED_undo_operator_repeat_cb, op, NULL); + /* note, blockfunc is a default but->func, use Handle func to allow button callbacks too */ + uiBlockSetHandleFunc(block, ED_undo_operator_repeat_cb_evt, op); view3d_panel_operator_redo_operator(C, pa, op); } -- cgit v1.2.3 From d7c6ddd7e9bd055e93e076c530c6d578ba23f036 Mon Sep 17 00:00:00 2001 From: Campbell Barton Date: Fri, 21 Jan 2011 02:32:58 +0000 Subject: correct spelling --- source/blender/editors/space_view3d/view3d_draw.c | 2 +- source/blender/editors/space_view3d/view3d_edit.c | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) (limited to 'source/blender/editors/space_view3d') diff --git a/source/blender/editors/space_view3d/view3d_draw.c b/source/blender/editors/space_view3d/view3d_draw.c index 6afe2791ff9..52f4697bad1 100644 --- a/source/blender/editors/space_view3d/view3d_draw.c +++ b/source/blender/editors/space_view3d/view3d_draw.c @@ -2014,7 +2014,7 @@ static void view3d_main_area_setup_view(Scene *scene, View3D *v3d, ARegion *ar, /* calculate pixelsize factor once, is used for lamps and obcenters */ { /* note: '1.0f / len_v3(v1)' replaced 'len_v3(rv3d->viewmat[0])' - * because of float point precission problems at large values [#23908] */ + * because of float point precision problems at large values [#23908] */ float v1[3], v2[3]; float len1, len2; diff --git a/source/blender/editors/space_view3d/view3d_edit.c b/source/blender/editors/space_view3d/view3d_edit.c index ab41ecb18c4..bbb52826de6 100644 --- a/source/blender/editors/space_view3d/view3d_edit.c +++ b/source/blender/editors/space_view3d/view3d_edit.c @@ -699,7 +699,7 @@ static void viewrotate_apply(ViewOpsData *vod, int x, int y) vod->oldx= x; vod->oldy= y; - /* avoid precission loss over time */ + /* avoid precision loss over time */ normalize_qt(rv3d->viewquat); ED_region_tag_redraw(vod->ar); -- cgit v1.2.3 From 89c617a1168294037b8878752b82daa1311a7b73 Mon Sep 17 00:00:00 2001 From: Campbell Barton Date: Sun, 30 Jan 2011 15:29:22 +0000 Subject: remove nan-makefiles --- source/blender/editors/space_view3d/Makefile | 61 ---------------------------- 1 file changed, 61 deletions(-) delete mode 100644 source/blender/editors/space_view3d/Makefile (limited to 'source/blender/editors/space_view3d') diff --git a/source/blender/editors/space_view3d/Makefile b/source/blender/editors/space_view3d/Makefile deleted file mode 100644 index 58d88194c22..00000000000 --- a/source/blender/editors/space_view3d/Makefile +++ /dev/null @@ -1,61 +0,0 @@ -# -# $Id$ -# -# ***** BEGIN GPL LICENSE BLOCK ***** -# -# This program is free software; you can redistribute it and/or -# modify it under the terms of the GNU General Public License -# as published by the Free Software Foundation; either version 2 -# of the License, or (at your option) any later version. -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program; if not, write to the Free Software Foundation, -# Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. -# -# The Original Code is Copyright (C) 2007 Blender Foundation -# All rights reserved. -# -# The Original Code is: all of this file. -# -# Contributor(s): none yet. -# -# ***** END GPL LICENSE BLOCK ***** -# -# Makes module object directory and bounces make to subdirectories. - -LIBNAME = ed_view3d -DIR = $(OCGDIR)/blender/$(LIBNAME) - -include nan_compile.mk - -CFLAGS += $(LEVEL_1_C_WARNINGS) - -CPPFLAGS += -I$(NAN_GLEW)/include -CPPFLAGS += -I$(OPENGL_HEADERS) - - -# not very neat.... -CPPFLAGS += -I../../windowmanager -CPPFLAGS += -I../../blenloader -CPPFLAGS += -I../../blenkernel -CPPFLAGS += -I../../blenlib -CPPFLAGS += -I../../makesdna -CPPFLAGS += -I../../imbuf -CPPFLAGS += -I../../python -CPPFLAGS += -I../../gpu -CPPFLAGS += -I../../makesrna -CPPFLAGS += -I../../render/extern/include -CPPFLAGS += -I../../blenfont -CPPFLAGS += -I$(NAN_GUARDEDALLOC)/include -CPPFLAGS += -I$(NAN_SMOKE)/include -ifneq ($(NAN_NO_KETSJI),true) - CPPFLAGS += -I../../../kernel/gen_system -endif - -# own include -CPPFLAGS += -I../include -- cgit v1.2.3 From 691f2abad1f2d22fd6dec7430d6266366ecc1b21 Mon Sep 17 00:00:00 2001 From: Campbell Barton Date: Wed, 2 Feb 2011 03:32:58 +0000 Subject: fix [#25684] Grease pencil strokes with "Surface" option attach erratically to curves. added new functions - view_autodist_depth_segment() - plot_line_v2v2i(), which takes a callback and plots x/y points. --- source/blender/editors/space_view3d/view3d_edit.c | 43 +++++++++++++++++++++-- 1 file changed, 41 insertions(+), 2 deletions(-) (limited to 'source/blender/editors/space_view3d') diff --git a/source/blender/editors/space_view3d/view3d_edit.c b/source/blender/editors/space_view3d/view3d_edit.c index bbb52826de6..6df0793f2fe 100644 --- a/source/blender/editors/space_view3d/view3d_edit.c +++ b/source/blender/editors/space_view3d/view3d_edit.c @@ -2622,7 +2622,7 @@ void VIEW3D_OT_enable_manipulator(wmOperatorType *ot) /* ************************* below the line! *********************** */ -static float view_autodist_depth_margin(ARegion *ar, short *mval, int margin) +static float view_autodist_depth_margin(ARegion *ar, short mval[2], int margin) { ViewDepths depth_temp= {0}; rcti rect; @@ -2721,12 +2721,51 @@ int view_autodist_simple(ARegion *ar, short *mval, float mouse_worldloc[3], int return 1; } -int view_autodist_depth(struct ARegion *ar, short *mval, int margin, float *depth) +int view_autodist_depth(struct ARegion *ar, short mval[2], int margin, float *depth) { *depth= view_autodist_depth_margin(ar, mval, margin); return (*depth==FLT_MAX) ? 0:1; +} + +static int depth_segment_cb(int x, int y, void *userData) +{ + struct { struct ARegion *ar; int margin; float depth; } *data = userData; + short mval[2]; + float depth; + + mval[0]= (short)x; + mval[1]= (short)y; + + depth= view_autodist_depth_margin(data->ar, mval, data->margin); + + if(depth != FLT_MAX) { + data->depth= depth; return 0; + } + else { + return 1; + } +} + +int view_autodist_depth_segment(struct ARegion *ar, short mval_sta[2], short mval_end[2], int margin, float *depth) +{ + struct { struct ARegion *ar; int margin; float depth; } data = {0}; + int p1[2]; + int p2[2]; + + data.ar= ar; + data.margin= margin; + data.depth= FLT_MAX; + + VECCOPY2D(p1, mval_sta); + VECCOPY2D(p2, mval_end); + + plot_line_v2v2i(p1, p2, depth_segment_cb, &data); + + *depth= data.depth; + + return (*depth==FLT_MAX) ? 0:1; } /* ********************* NDOF ************************ */ -- cgit v1.2.3 From 2ed0ddef047b961272e70108e37af9526405ae7d Mon Sep 17 00:00:00 2001 From: Ton Roosendaal Date: Sat, 5 Feb 2011 19:07:54 +0000 Subject: todo list item: 3D View: In quad-view mode, the options to set back/bottom/left views were blocked. Now they work again. Note: the oparator polls don't have a check for properties... so it cannot be finegrained here. Checks are inside code. --- source/blender/editors/space_view3d/view3d_edit.c | 32 +++++----------------- .../blender/editors/space_view3d/view3d_intern.h | 1 - source/blender/editors/space_view3d/view3d_view.c | 7 +++++ 3 files changed, 14 insertions(+), 26 deletions(-) (limited to 'source/blender/editors/space_view3d') diff --git a/source/blender/editors/space_view3d/view3d_edit.c b/source/blender/editors/space_view3d/view3d_edit.c index 6df0793f2fe..bc9c41f3add 100644 --- a/source/blender/editors/space_view3d/view3d_edit.c +++ b/source/blender/editors/space_view3d/view3d_edit.c @@ -766,7 +766,7 @@ static int viewrotate_invoke(bContext *C, wmOperator *op, wmEvent *event) if(rv3d->viewlock) { /* poll should check but in some cases fails, see poll func for details */ viewops_data_free(C, op); - return OPERATOR_CANCELLED; + return OPERATOR_PASS_THROUGH; } /* switch from camera view when: */ @@ -828,21 +828,6 @@ static int view3d_camera_active_poll(bContext *C) return 0; } -static int view3d_rotate_poll(bContext *C) -{ - if (!ED_operator_region_view3d_active(C)) { - return 0; - } else { - RegionView3D *rv3d= CTX_wm_region_view3d(C); - /* rv3d is null in menus, but it's ok when the menu is clicked on */ - /* XXX of course, this doesn't work with quadview - * Maybe having exec return PASSTHROUGH would be better than polling here - * Poll functions are full of problems anyway. - * */ - return rv3d == NULL || rv3d->viewlock == 0; - } -} - void VIEW3D_OT_rotate(wmOperatorType *ot) { @@ -854,7 +839,7 @@ void VIEW3D_OT_rotate(wmOperatorType *ot) /* api callbacks */ ot->invoke= viewrotate_invoke; ot->modal= viewrotate_modal; - ot->poll= view3d_rotate_poll; + ot->poll= ED_operator_region_view3d_active; /* flags */ ot->flag= OPTYPE_BLOCKING|OPTYPE_GRAB_POINTER; @@ -1953,6 +1938,9 @@ static int viewnumpad_exec(bContext *C, wmOperator *op) viewnum = RNA_enum_get(op->ptr, "type"); align_active = RNA_boolean_get(op->ptr, "align_active"); + /* set this to zero, gets handled in axis_set_view */ + if(rv3d->viewlock) + align_active= 0; /* Use this to test if we started out with a camera */ @@ -2060,12 +2048,6 @@ static int viewnumpad_exec(bContext *C, wmOperator *op) return OPERATOR_FINISHED; } -int region3d_unlocked_poll(bContext *C) -{ - RegionView3D *rv3d= CTX_wm_region_view3d(C); - return (rv3d && rv3d->viewlock==0); -} - void VIEW3D_OT_viewnumpad(wmOperatorType *ot) { @@ -2076,7 +2058,7 @@ void VIEW3D_OT_viewnumpad(wmOperatorType *ot) /* api callbacks */ ot->exec= viewnumpad_exec; - ot->poll= region3d_unlocked_poll; + ot->poll= ED_operator_region_view3d_active; /* flags */ ot->flag= 0; @@ -2144,7 +2126,7 @@ void VIEW3D_OT_view_orbit(wmOperatorType *ot) /* api callbacks */ ot->exec= vieworbit_exec; - ot->poll= view3d_rotate_poll; + ot->poll= ED_operator_region_view3d_active; /* flags */ ot->flag= 0; diff --git a/source/blender/editors/space_view3d/view3d_intern.h b/source/blender/editors/space_view3d/view3d_intern.h index 73c07e8ac25..0f1fe2fba07 100644 --- a/source/blender/editors/space_view3d/view3d_intern.h +++ b/source/blender/editors/space_view3d/view3d_intern.h @@ -85,7 +85,6 @@ void VIEW3D_OT_drawtype(struct wmOperatorType *ot); void view3d_boxview_copy(ScrArea *sa, ARegion *ar); void view3d_persp_mat4(struct RegionView3D *rv3d, float mat[][4]); -int region3d_unlocked_poll(struct bContext *C); /* view3d_fly.c */ void view3d_keymap(struct wmKeyConfig *keyconf); diff --git a/source/blender/editors/space_view3d/view3d_view.c b/source/blender/editors/space_view3d/view3d_view.c index 49071af8bdd..7ed85cacc1e 100644 --- a/source/blender/editors/space_view3d/view3d_view.c +++ b/source/blender/editors/space_view3d/view3d_view.c @@ -477,6 +477,13 @@ static int view3d_setobjectascamera_exec(bContext *C, wmOperator *UNUSED(op)) return OPERATOR_FINISHED; } +static int region3d_unlocked_poll(bContext *C) +{ + RegionView3D *rv3d= CTX_wm_region_view3d(C); + return (rv3d && rv3d->viewlock==0); +} + + void VIEW3D_OT_object_as_camera(wmOperatorType *ot) { -- cgit v1.2.3 From 5af9e5fda96bbf47ebf6bb5cfdd6b67bcbb365cb Mon Sep 17 00:00:00 2001 From: Campbell Barton Date: Sat, 12 Feb 2011 09:09:52 +0000 Subject: - resource leak in pointcache, opendir without closedir() - reading pointcache was using an incorrect, always NULL variable. - commented NDof code, was giving warnings and isnt used now. --- source/blender/editors/space_view3d/view3d_edit.c | 2 ++ 1 file changed, 2 insertions(+) (limited to 'source/blender/editors/space_view3d') diff --git a/source/blender/editors/space_view3d/view3d_edit.c b/source/blender/editors/space_view3d/view3d_edit.c index bc9c41f3add..de0878925ae 100644 --- a/source/blender/editors/space_view3d/view3d_edit.c +++ b/source/blender/editors/space_view3d/view3d_edit.c @@ -2799,6 +2799,7 @@ void filterNDOFvalues(float *sbval) sbval[i]=0.0; } +#if 0 // statics for controlling rv3d->dist corrections. // viewmoveNDOF zeros and adjusts rv3d->ofs. // viewmove restores based on dz_flag state. @@ -3139,6 +3140,7 @@ void viewmoveNDOF(Scene *scene, ARegion *ar, View3D *v3d, int UNUSED(mode)) */ // XXX scrarea_do_windraw(curarea); } +#endif // if 0, unused NDof code /* give a 4x4 matrix from a perspective view, only needs viewquat, ofs and dist * basically the same as... -- cgit v1.2.3 From 55f68c36574779ae2fac3652466584628b22c633 Mon Sep 17 00:00:00 2001 From: Campbell Barton Date: Sat, 12 Feb 2011 16:54:24 +0000 Subject: fix for more warnings. - modifier code was using sizeof() without knowing the sizeof the array when clearing the modifier type array. - use BLI_snprintf rather then sprintf where the size of the string is known. - particle drawing code kept a reference to stack float values (not a problem at the moment but would crash if accessed later). --- source/blender/editors/space_view3d/drawobject.c | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) (limited to 'source/blender/editors/space_view3d') diff --git a/source/blender/editors/space_view3d/drawobject.c b/source/blender/editors/space_view3d/drawobject.c index 8724f2f9def..aa35438a387 100644 --- a/source/blender/editors/space_view3d/drawobject.c +++ b/source/blender/editors/space_view3d/drawobject.c @@ -4070,8 +4070,14 @@ static void draw_new_particle_system(Scene *scene, View3D *v3d, RegionView3D *rv psys->lattice= NULL; } - if( (base->flag & OB_FROMDUPLI) && (ob->flag & OB_FROMGROUP) ) + if(pdd) { + /* drop references to stack memory */ + pdd->ma_r= pdd->ma_g= pdd->ma_b= NULL; + } + + if( (base->flag & OB_FROMDUPLI) && (ob->flag & OB_FROMGROUP) ) { glLoadMatrixf(rv3d->viewmat); + } } static void draw_update_ptcache_edit(Scene *scene, Object *ob, PTCacheEdit *edit) -- cgit v1.2.3 From 0955c664aa7c5fc5f0bd345c58219c40f04ab9c1 Mon Sep 17 00:00:00 2001 From: Campbell Barton Date: Sun, 13 Feb 2011 10:52:18 +0000 Subject: fix for warnings from Sparse static source code checker, mostly BKE/BLI and python functions. - use NULL rather then 0 where possible (makes code & function calls more readable IMHO). - set static variables and functions (exposed some unused vars/funcs). - use func(void) rather then func() for definitions. --- source/blender/editors/space_view3d/drawobject.c | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) (limited to 'source/blender/editors/space_view3d') diff --git a/source/blender/editors/space_view3d/drawobject.c b/source/blender/editors/space_view3d/drawobject.c index aa35438a387..207e9f94b5a 100644 --- a/source/blender/editors/space_view3d/drawobject.c +++ b/source/blender/editors/space_view3d/drawobject.c @@ -573,7 +573,7 @@ typedef struct ViewCachedString { /* str is allocated past the end */ } ViewCachedString; -void view3d_cached_text_draw_begin() +void view3d_cached_text_draw_begin(void) { ListBase *strings= &CachedText[CachedTextLevel]; strings->first= strings->last= NULL; @@ -5368,7 +5368,7 @@ static void draw_bb_quadric(BoundBox *bb, short type) static void draw_bounding_volume(Scene *scene, Object *ob) { - BoundBox *bb=0; + BoundBox *bb= NULL; if(ob->type==OB_MESH) { bb= mesh_get_bb(ob); @@ -5379,7 +5379,7 @@ static void draw_bounding_volume(Scene *scene, Object *ob) else if(ob->type==OB_MBALL) { if(is_basis_mball(ob)) { bb= ob->bb; - if(bb==0) { + if(bb==NULL) { makeDispListMBall(scene, ob); bb= ob->bb; } @@ -5390,7 +5390,7 @@ static void draw_bounding_volume(Scene *scene, Object *ob) return; } - if(bb==0) return; + if(bb==NULL) return; if(ob->boundtype==OB_BOUND_BOX) draw_box(bb->vec); else draw_bb_quadric(bb, ob->boundtype); -- cgit v1.2.3 From 4124804b4e67c7a1d15abaac220d08497e37d34a Mon Sep 17 00:00:00 2001 From: Campbell Barton Date: Sun, 13 Feb 2011 14:16:36 +0000 Subject: many functions in blender are not marked static but should be. most local modifier,GPU,ImBuf and Interface functions are now static. also fixed an error were the fluid modifier definition and the header didnt have the same number of args. --- source/blender/editors/space_view3d/drawmesh.c | 2 +- source/blender/editors/space_view3d/drawobject.c | 3 +-- source/blender/editors/space_view3d/drawvolume.c | 2 +- source/blender/editors/space_view3d/space_view3d.c | 3 ++- source/blender/editors/space_view3d/view3d_buttons.c | 8 ++++---- source/blender/editors/space_view3d/view3d_draw.c | 2 +- source/blender/editors/space_view3d/view3d_edit.c | 4 ++-- source/blender/editors/space_view3d/view3d_header.c | 14 +++++++------- source/blender/editors/space_view3d/view3d_select.c | 8 ++++---- source/blender/editors/space_view3d/view3d_view.c | 4 ++-- 10 files changed, 25 insertions(+), 25 deletions(-) (limited to 'source/blender/editors/space_view3d') diff --git a/source/blender/editors/space_view3d/drawmesh.c b/source/blender/editors/space_view3d/drawmesh.c index caac8d1d9fe..5c2adc10d85 100644 --- a/source/blender/editors/space_view3d/drawmesh.c +++ b/source/blender/editors/space_view3d/drawmesh.c @@ -340,7 +340,7 @@ static int set_draw_settings_cached(int clearcache, int textured, MTFace *texfac /* Icky globals, fix with userdata parameter */ -struct TextureDrawState { +static struct TextureDrawState { Object *ob; int islit, istex; int color_profile; diff --git a/source/blender/editors/space_view3d/drawobject.c b/source/blender/editors/space_view3d/drawobject.c index 207e9f94b5a..c90c301b6d1 100644 --- a/source/blender/editors/space_view3d/drawobject.c +++ b/source/blender/editors/space_view3d/drawobject.c @@ -5558,8 +5558,7 @@ static void draw_hooks(Object *ob) } } -// -void drawRBpivot(bRigidBodyJointConstraint *data) +static void drawRBpivot(bRigidBodyJointConstraint *data) { int axis; float mat[4][4]; diff --git a/source/blender/editors/space_view3d/drawvolume.c b/source/blender/editors/space_view3d/drawvolume.c index 0f6e0bdc834..1479dc950c9 100644 --- a/source/blender/editors/space_view3d/drawvolume.c +++ b/source/blender/editors/space_view3d/drawvolume.c @@ -126,7 +126,7 @@ static double tval() struct GPUTexture; -int intersect_edges(float *points, float a, float b, float c, float d, float edges[12][2][3]) +static int intersect_edges(float *points, float a, float b, float c, float d, float edges[12][2][3]) { int i; float t; diff --git a/source/blender/editors/space_view3d/space_view3d.c b/source/blender/editors/space_view3d/space_view3d.c index 9ec68d62364..f7ccebda6ae 100644 --- a/source/blender/editors/space_view3d/space_view3d.c +++ b/source/blender/editors/space_view3d/space_view3d.c @@ -43,6 +43,7 @@ #include "BKE_context.h" #include "BKE_screen.h" +#include "ED_space_api.h" #include "ED_screen.h" #include "ED_object.h" @@ -910,7 +911,7 @@ static void view3d_props_area_listener(ARegion *ar, wmNotifier *wmn) } /*area (not region) level listener*/ -void space_view3d_listener(struct ScrArea *sa, struct wmNotifier *wmn) +static void space_view3d_listener(struct ScrArea *sa, struct wmNotifier *wmn) { View3D *v3d = sa->spacedata.first; diff --git a/source/blender/editors/space_view3d/view3d_buttons.c b/source/blender/editors/space_view3d/view3d_buttons.c index 53a4981661f..cefe0254ae4 100644 --- a/source/blender/editors/space_view3d/view3d_buttons.c +++ b/source/blender/editors/space_view3d/view3d_buttons.c @@ -709,7 +709,7 @@ static void do_view3d_vgroup_buttons(bContext *C, void *UNUSED(arg), int event) WM_event_add_notifier(C, NC_GEOM|ND_DATA, ob->data); } -int view3d_panel_vgroup_poll(const bContext *C, PanelType *UNUSED(pt)) +static int view3d_panel_vgroup_poll(const bContext *C, PanelType *UNUSED(pt)) { Scene *scene= CTX_data_scene(C); Object *ob= OBACT; @@ -925,7 +925,7 @@ static void v3d_posearmature_buts(uiLayout *layout, Object *ob) } /* assumes armature editmode */ -void validate_editbonebutton_cb(bContext *C, void *bonev, void *namev) +static void validate_editbonebutton_cb(bContext *C, void *bonev, void *namev) { EditBone *eBone= bonev; char oldname[sizeof(eBone->name)], newname[sizeof(eBone->name)]; @@ -1199,12 +1199,12 @@ static void do_view3d_region_buttons(bContext *C, void *UNUSED(index), int event WM_event_add_notifier(C, NC_SPACE|ND_SPACE_VIEW3D, ob); } -void removeTransformOrientation_func(bContext *C, void *target, void *UNUSED(arg)) +static void removeTransformOrientation_func(bContext *C, void *target, void *UNUSED(arg)) { BIF_removeTransformOrientation(C, (TransformOrientation *) target); } -void selectTransformOrientation_func(bContext *C, void *target, void *UNUSED(arg)) +static void selectTransformOrientation_func(bContext *C, void *target, void *UNUSED(arg)) { BIF_selectTransformOrientation(C, (TransformOrientation *) target); } diff --git a/source/blender/editors/space_view3d/view3d_draw.c b/source/blender/editors/space_view3d/view3d_draw.c index 52f4697bad1..58adb9aad43 100644 --- a/source/blender/editors/space_view3d/view3d_draw.c +++ b/source/blender/editors/space_view3d/view3d_draw.c @@ -917,7 +917,7 @@ void view3d_calc_camera_border(Scene *scene, ARegion *ar, RegionView3D *rv3d, Vi } } -void view3d_set_1_to_1_viewborder(Scene *scene, ARegion *ar) +static void view3d_set_1_to_1_viewborder(Scene *scene, ARegion *ar) { RegionView3D *rv3d= ar->regiondata; float size[2]; diff --git a/source/blender/editors/space_view3d/view3d_edit.c b/source/blender/editors/space_view3d/view3d_edit.c index de0878925ae..76bd590bd3c 100644 --- a/source/blender/editors/space_view3d/view3d_edit.c +++ b/source/blender/editors/space_view3d/view3d_edit.c @@ -2777,7 +2777,7 @@ int view_autodist_depth_segment(struct ARegion *ar, short mval_sta[2], short mva // those are still not ok -float ndof_axis_scale[6] = { +static float ndof_axis_scale[6] = { +0.01, // Tx +0.01, // Tz +0.01, // Ty @@ -2786,7 +2786,7 @@ float ndof_axis_scale[6] = { +0.0015 // Ry }; -void filterNDOFvalues(float *sbval) +static void filterNDOFvalues(float *sbval) { int i=0; float max = 0.0; diff --git a/source/blender/editors/space_view3d/view3d_header.c b/source/blender/editors/space_view3d/view3d_header.c index a481fdb59f6..2ee4f7a9e55 100644 --- a/source/blender/editors/space_view3d/view3d_header.c +++ b/source/blender/editors/space_view3d/view3d_header.c @@ -137,7 +137,7 @@ static void handle_view3d_lock(bContext *C) } } -static int layers_exec(bContext *C, wmOperator *op) +static int view3d_layers_exec(bContext *C, wmOperator *op) { Main *bmain= CTX_data_main(C); Scene *scene= CTX_data_scene(C); @@ -210,7 +210,7 @@ static int layers_exec(bContext *C, wmOperator *op) /* applies shift and alt, lazy coding or ok? :) */ /* the local per-keymap-entry keymap will solve it */ -static int layers_invoke(bContext *C, wmOperator *op, wmEvent *event) +static int view3d_layers_invoke(bContext *C, wmOperator *op, wmEvent *event) { if(event->ctrl || event->oskey) return OPERATOR_PASS_THROUGH; @@ -222,12 +222,12 @@ static int layers_invoke(bContext *C, wmOperator *op, wmEvent *event) int nr= RNA_int_get(op->ptr, "nr") + 10; RNA_int_set(op->ptr, "nr", nr); } - layers_exec(C, op); + view3d_layers_exec(C, op); return OPERATOR_FINISHED; } -int layers_poll(bContext *C) +static int view3d_layers_poll(bContext *C) { return (ED_operator_view3d_active(C) && CTX_wm_view3d(C)->localvd==NULL); } @@ -240,9 +240,9 @@ void VIEW3D_OT_layers(wmOperatorType *ot) ot->idname= "VIEW3D_OT_layers"; /* api callbacks */ - ot->invoke= layers_invoke; - ot->exec= layers_exec; - ot->poll= layers_poll; + ot->invoke= view3d_layers_invoke; + ot->exec= view3d_layers_exec; + ot->poll= view3d_layers_poll; /* flags */ ot->flag= OPTYPE_REGISTER|OPTYPE_UNDO; diff --git a/source/blender/editors/space_view3d/view3d_select.c b/source/blender/editors/space_view3d/view3d_select.c index f85bdc437f3..70d77f4e489 100644 --- a/source/blender/editors/space_view3d/view3d_select.c +++ b/source/blender/editors/space_view3d/view3d_select.c @@ -137,7 +137,7 @@ void view3d_get_transformation(ARegion *ar, RegionView3D *rv3d, Object *ob, bglM /* local prototypes */ -void EM_backbuf_checkAndSelectVerts(EditMesh *em, int select) +static void EM_backbuf_checkAndSelectVerts(EditMesh *em, int select) { EditVert *eve; int index= em_wireoffs; @@ -151,7 +151,7 @@ void EM_backbuf_checkAndSelectVerts(EditMesh *em, int select) } } -void EM_backbuf_checkAndSelectEdges(EditMesh *em, int select) +static void EM_backbuf_checkAndSelectEdges(EditMesh *em, int select) { EditEdge *eed; int index= em_solidoffs; @@ -165,7 +165,7 @@ void EM_backbuf_checkAndSelectEdges(EditMesh *em, int select) } } -void EM_backbuf_checkAndSelectFaces(EditMesh *em, int select) +static void EM_backbuf_checkAndSelectFaces(EditMesh *em, int select) { EditFace *efa; int index= 1; @@ -179,7 +179,7 @@ void EM_backbuf_checkAndSelectFaces(EditMesh *em, int select) } } -void EM_backbuf_checkAndSelectTFaces(Mesh *me, int select) +static void EM_backbuf_checkAndSelectTFaces(Mesh *me, int select) { MFace *mface = me->mface; int a; diff --git a/source/blender/editors/space_view3d/view3d_view.c b/source/blender/editors/space_view3d/view3d_view.c index 7ed85cacc1e..04f9f2d11d4 100644 --- a/source/blender/editors/space_view3d/view3d_view.c +++ b/source/blender/editors/space_view3d/view3d_view.c @@ -427,7 +427,7 @@ static int view3d_setcameratoview_exec(bContext *C, wmOperator *UNUSED(op)) } -int view3d_setcameratoview_poll(bContext *C) +static int view3d_setcameratoview_poll(bContext *C) { View3D *v3d = CTX_wm_view3d(C); RegionView3D *rv3d= CTX_wm_region_view3d(C); @@ -1734,7 +1734,7 @@ extern void StartKetsjiShell(struct bContext *C, struct ARegion *ar, rcti *cam_f #endif // WITH_GAMEENGINE -int game_engine_poll(bContext *C) +static int game_engine_poll(bContext *C) { /* we need a context and area to launch BGE it's a temporary solution to avoid crash at load time -- cgit v1.2.3 From 8ea0b4685cadd7c7bede9017d07a296bab635469 Mon Sep 17 00:00:00 2001 From: Campbell Barton Date: Mon, 14 Feb 2011 03:15:55 +0000 Subject: misc small changes: - rename rna collection structs Main prefix to BlendData: eg, MainObjects --> BlendDataObjects - printing python collection now prints its type (when available) - renamed shadowed vars in bpy_rna.c. - when making functions static I also made debugging/test functions static, reverse and add definitions to headers instead. --- source/blender/editors/space_view3d/view3d_edit.c | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) (limited to 'source/blender/editors/space_view3d') diff --git a/source/blender/editors/space_view3d/view3d_edit.c b/source/blender/editors/space_view3d/view3d_edit.c index 76bd590bd3c..796cb1a64d1 100644 --- a/source/blender/editors/space_view3d/view3d_edit.c +++ b/source/blender/editors/space_view3d/view3d_edit.c @@ -2776,7 +2776,7 @@ int view_autodist_depth_segment(struct ARegion *ar, short mval_sta[2], short mva // speed and os, i changed the scaling values, but // those are still not ok - +#if 0 static float ndof_axis_scale[6] = { +0.01, // Tx +0.01, // Tz @@ -2799,7 +2799,6 @@ static void filterNDOFvalues(float *sbval) sbval[i]=0.0; } -#if 0 // statics for controlling rv3d->dist corrections. // viewmoveNDOF zeros and adjusts rv3d->ofs. // viewmove restores based on dz_flag state. -- cgit v1.2.3 From 8b7482892b2ecb456be60b42fe1625156d19e954 Mon Sep 17 00:00:00 2001 From: Campbell Barton Date: Mon, 14 Feb 2011 17:55:27 +0000 Subject: made most variables which are only used in a single file and not defined in header static for blenlib, blenkernel and editors. --- source/blender/editors/space_view3d/drawmesh.c | 2 +- source/blender/editors/space_view3d/drawobject.c | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) (limited to 'source/blender/editors/space_view3d') diff --git a/source/blender/editors/space_view3d/drawmesh.c b/source/blender/editors/space_view3d/drawmesh.c index 5c2adc10d85..59d9d1bb0b4 100644 --- a/source/blender/editors/space_view3d/drawmesh.c +++ b/source/blender/editors/space_view3d/drawmesh.c @@ -562,7 +562,7 @@ static int wpaint__setSolidDrawOptions(void *userData, int index, int *drawSmoot return 1; } -void draw_mesh_text(Scene *scene, Object *ob, int glsl) +static void draw_mesh_text(Scene *scene, Object *ob, int glsl) { Mesh *me = ob->data; DerivedMesh *ddm; diff --git a/source/blender/editors/space_view3d/drawobject.c b/source/blender/editors/space_view3d/drawobject.c index c90c301b6d1..321f68a157f 100644 --- a/source/blender/editors/space_view3d/drawobject.c +++ b/source/blender/editors/space_view3d/drawobject.c @@ -5306,7 +5306,7 @@ static void draw_box(float vec[8][3]) } /* uses boundbox, function used by Ketsji */ -void get_local_bounds(Object *ob, float *center, float *size) +static void get_local_bounds(Object *ob, float *center, float *size) { BoundBox *bb= object_get_boundbox(ob); -- cgit v1.2.3 From 86cf6b40162b683a209cef499fd5beb2d69cc6e1 Mon Sep 17 00:00:00 2001 From: Campbell Barton Date: Tue, 15 Feb 2011 14:38:43 +0000 Subject: moving dir strings into global namespace for doc access (coming up) --- source/blender/editors/space_view3d/space_view3d.c | 12 ++++++------ source/blender/editors/space_view3d/view3d_intern.h | 2 ++ 2 files changed, 8 insertions(+), 6 deletions(-) (limited to 'source/blender/editors/space_view3d') diff --git a/source/blender/editors/space_view3d/space_view3d.c b/source/blender/editors/space_view3d/space_view3d.c index f7ccebda6ae..ef2fa693cb1 100644 --- a/source/blender/editors/space_view3d/space_view3d.c +++ b/source/blender/editors/space_view3d/space_view3d.c @@ -951,6 +951,11 @@ static void space_view3d_listener(struct ScrArea *sa, struct wmNotifier *wmn) #endif } +const char *view3d_context_dir[] = { + "selected_objects", "selected_bases", "selected_editable_objects", + "selected_editable_bases", "visible_objects", "visible_bases", "selectable_objects", "selectable_bases", + "active_base", "active_object", NULL}; + static int view3d_context(const bContext *C, const char *member, bContextDataResult *result) { View3D *v3d= CTX_wm_view3d(C); @@ -959,12 +964,7 @@ static int view3d_context(const bContext *C, const char *member, bContextDataRes unsigned int lay = v3d ? v3d->lay:scene->lay; /* fallback to the scene layer, allows duplicate and other oject operators to run outside the 3d view */ if(CTX_data_dir(member)) { - static const char *dir[] = { - "selected_objects", "selected_bases", "selected_editable_objects", - "selected_editable_bases", "visible_objects", "visible_bases", "selectable_objects", "selectable_bases", - "active_base", "active_object", NULL}; - - CTX_data_dir_set(result, dir); + CTX_data_dir_set(result, view3d_context_dir); } else if(CTX_data_equals(member, "selected_objects") || CTX_data_equals(member, "selected_bases")) { int selected_objects= CTX_data_equals(member, "selected_objects"); diff --git a/source/blender/editors/space_view3d/view3d_intern.h b/source/blender/editors/space_view3d/view3d_intern.h index 0f1fe2fba07..b7efa7fced7 100644 --- a/source/blender/editors/space_view3d/view3d_intern.h +++ b/source/blender/editors/space_view3d/view3d_intern.h @@ -187,6 +187,8 @@ void VIEW3D_OT_snap_cursor_to_active(struct wmOperatorType *ot); ARegion *view3d_has_buttons_region(ScrArea *sa); ARegion *view3d_has_tools_region(ScrArea *sa); +extern const char *view3d_context_dir[]; /* doc access */ + /* draw_volume.c */ void draw_volume(struct ARegion *ar, struct GPUTexture *tex, float *min, float *max, int res[3], float dx, struct GPUTexture *tex_shadow); -- cgit v1.2.3 From 9d168f733719c3abeba245a92cb37530db2a98f4 Mon Sep 17 00:00:00 2001 From: Ton Roosendaal Date: Wed, 16 Feb 2011 18:04:03 +0000 Subject: Bugfix #26096 Switching layers reveiled hidden objects in wrong positions, changes are currently not being handled for hidden objects. Only way to fix it is by completely update newly visible objects... (Also fixed a typo and a compile warning) --- source/blender/editors/space_view3d/view3d_header.c | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) (limited to 'source/blender/editors/space_view3d') diff --git a/source/blender/editors/space_view3d/view3d_header.c b/source/blender/editors/space_view3d/view3d_header.c index 2ee4f7a9e55..2656127d73c 100644 --- a/source/blender/editors/space_view3d/view3d_header.c +++ b/source/blender/editors/space_view3d/view3d_header.c @@ -139,10 +139,11 @@ static void handle_view3d_lock(bContext *C) static int view3d_layers_exec(bContext *C, wmOperator *op) { - Main *bmain= CTX_data_main(C); Scene *scene= CTX_data_scene(C); ScrArea *sa= CTX_wm_area(C); View3D *v3d= sa->spacedata.first; + Base *base; + int oldlay= v3d->lay; int nr= RNA_int_get(op->ptr, "nr"); int toggle= RNA_boolean_get(op->ptr, "toggle"); @@ -200,8 +201,14 @@ static int view3d_layers_exec(bContext *C, wmOperator *op) if(v3d->scenelock) handle_view3d_lock(C); - /* new layers might need unflushed events events */ - DAG_scene_update_flags(bmain, scene, v3d->lay, FALSE); /* tags all that moves and flushes */ + /* XXX new layers might need updates, there is no provision yet to detect if that's needed */ + oldlay= ~oldlay & v3d->lay; + for (base= scene->base.first; base; base= base->next) { + if(base->lay & oldlay) + base->object->recalc= OB_RECALC_OB|OB_RECALC_DATA; + if(base->lay & oldlay) + printf("recalc %s\n", base->object->id.name+2); + } ED_area_tag_redraw(sa); -- cgit v1.2.3 From 1b25f48542b85f61e9fb6044e5ec0b1985a7906a Mon Sep 17 00:00:00 2001 From: Campbell Barton Date: Thu, 17 Feb 2011 12:05:09 +0000 Subject: clear some unused warnings --- source/blender/editors/space_view3d/drawobject.c | 4 ++-- source/blender/editors/space_view3d/view3d_buttons.c | 12 ++---------- 2 files changed, 4 insertions(+), 12 deletions(-) (limited to 'source/blender/editors/space_view3d') diff --git a/source/blender/editors/space_view3d/drawobject.c b/source/blender/editors/space_view3d/drawobject.c index 321f68a157f..df431f06ef6 100644 --- a/source/blender/editors/space_view3d/drawobject.c +++ b/source/blender/editors/space_view3d/drawobject.c @@ -5306,6 +5306,7 @@ static void draw_box(float vec[8][3]) } /* uses boundbox, function used by Ketsji */ +#if 0 static void get_local_bounds(Object *ob, float *center, float *size) { BoundBox *bb= object_get_boundbox(ob); @@ -5324,8 +5325,7 @@ static void get_local_bounds(Object *ob, float *center, float *size) center[2]= (bb->vec[0][2] + bb->vec[1][2])/2.0; } } - - +#endif static void draw_bb_quadric(BoundBox *bb, short type) { diff --git a/source/blender/editors/space_view3d/view3d_buttons.c b/source/blender/editors/space_view3d/view3d_buttons.c index cefe0254ae4..e880e4c3610 100644 --- a/source/blender/editors/space_view3d/view3d_buttons.c +++ b/source/blender/editors/space_view3d/view3d_buttons.c @@ -925,6 +925,7 @@ static void v3d_posearmature_buts(uiLayout *layout, Object *ob) } /* assumes armature editmode */ +#if 0 static void validate_editbonebutton_cb(bContext *C, void *bonev, void *namev) { EditBone *eBone= bonev; @@ -939,6 +940,7 @@ static void validate_editbonebutton_cb(bContext *C, void *bonev, void *namev) ED_armature_bone_rename(CTX_data_edit_object(C)->data, oldname, newname); // editarmature.c WM_event_add_notifier(C, NC_OBJECT|ND_BONE_SELECT, CTX_data_edit_object(C)); // XXX fix } +#endif static void v3d_editarmature_buts(uiLayout *layout, Object *ob) { @@ -1199,16 +1201,6 @@ static void do_view3d_region_buttons(bContext *C, void *UNUSED(index), int event WM_event_add_notifier(C, NC_SPACE|ND_SPACE_VIEW3D, ob); } -static void removeTransformOrientation_func(bContext *C, void *target, void *UNUSED(arg)) -{ - BIF_removeTransformOrientation(C, (TransformOrientation *) target); -} - -static void selectTransformOrientation_func(bContext *C, void *target, void *UNUSED(arg)) -{ - BIF_selectTransformOrientation(C, (TransformOrientation *) target); -} - static void view3d_panel_object(const bContext *C, Panel *pa) { uiBlock *block; -- cgit v1.2.3 From 27e812d69702c43313af8a5521841fd7f4da69f1 Mon Sep 17 00:00:00 2001 From: Campbell Barton Date: Thu, 17 Feb 2011 22:34:41 +0000 Subject: Clear some compiler warnings by commenting some functions, adding others to headers. left in warnings where functions obviously need to get ported to 2.5x still. Also, render stamp seq strip works again. --- source/blender/editors/space_view3d/view3d_draw.c | 1 + 1 file changed, 1 insertion(+) (limited to 'source/blender/editors/space_view3d') diff --git a/source/blender/editors/space_view3d/view3d_draw.c b/source/blender/editors/space_view3d/view3d_draw.c index 58adb9aad43..006605b08f9 100644 --- a/source/blender/editors/space_view3d/view3d_draw.c +++ b/source/blender/editors/space_view3d/view3d_draw.c @@ -917,6 +917,7 @@ void view3d_calc_camera_border(Scene *scene, ARegion *ar, RegionView3D *rv3d, Vi } } +/* sets the view to 1:1 camera/render-pixel */ static void view3d_set_1_to_1_viewborder(Scene *scene, ARegion *ar) { RegionView3D *rv3d= ar->regiondata; -- cgit v1.2.3 From 7a29a44cf4b6a8c8b771ac39cf9234f7f5149acd Mon Sep 17 00:00:00 2001 From: Ton Roosendaal Date: Fri, 18 Feb 2011 16:47:10 +0000 Subject: Bugfix 26131 Option "Align view to selected" only aligned to the last activated item in editmode. This whilst code comment even said "use alignment from Manipulator in normal mode". Now it does what it's (apparently) meant to do, and what brazilians think it should! ;) It aligns to selected! --- source/blender/editors/space_view3d/view3d_edit.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'source/blender/editors/space_view3d') diff --git a/source/blender/editors/space_view3d/view3d_edit.c b/source/blender/editors/space_view3d/view3d_edit.c index 796cb1a64d1..7842707d7e8 100644 --- a/source/blender/editors/space_view3d/view3d_edit.c +++ b/source/blender/editors/space_view3d/view3d_edit.c @@ -1879,7 +1879,7 @@ static void axis_set_view(bContext *C, float q1, float q2, float q3, float q4, s float twmat[3][3]; /* same as transform manipulator when normal is set */ - ED_getTransformOrientationMatrix(C, twmat, TRUE); + ED_getTransformOrientationMatrix(C, twmat, FALSE); mat3_to_quat( obact_quat,twmat); invert_qt(obact_quat); -- cgit v1.2.3 From 322ff7dfe42a77da4caf63fcaa98a82ef6e6ecad Mon Sep 17 00:00:00 2001 From: Nathan Letwory Date: Mon, 21 Feb 2011 12:35:04 +0000 Subject: I swear, it was just an innocence change in guardedalloc! The butterfly wing flap, causing a nice storm in the rest of blender. Now all dependencies should point ok again. CMakers, do double-test. --- source/blender/editors/space_view3d/CMakeLists.txt | 1 + source/blender/editors/space_view3d/SConscript | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) (limited to 'source/blender/editors/space_view3d') diff --git a/source/blender/editors/space_view3d/CMakeLists.txt b/source/blender/editors/space_view3d/CMakeLists.txt index 1f47a25ad92..fc9dd8c9bcc 100644 --- a/source/blender/editors/space_view3d/CMakeLists.txt +++ b/source/blender/editors/space_view3d/CMakeLists.txt @@ -23,6 +23,7 @@ set(INC ../include ../../blenfont ../../blenkernel + ../../blenloader ../../blenlib ../../gpu ../../imbuf diff --git a/source/blender/editors/space_view3d/SConscript b/source/blender/editors/space_view3d/SConscript index bb32f8b926e..3df59d485d5 100644 --- a/source/blender/editors/space_view3d/SConscript +++ b/source/blender/editors/space_view3d/SConscript @@ -6,7 +6,7 @@ defs = [ 'GLEW_STATIC' ] incs = '../include ../../blenlib ../../blenkernel ../../makesdna ../../imbuf' incs += ' ../../windowmanager #/intern/guardedalloc #/extern/glew/include' -incs += ' ../../render/extern/include' +incs += ' ../../render/extern/include ../../blenloader' incs += ' ../../gpu ../../makesrna ../../blenfont' incs += ' #/intern/smoke/extern' incs += ' #source/kernel/gen_system' -- cgit v1.2.3 From 8327333b402d2e4c95adc933f4ca11cfb4313e63 Mon Sep 17 00:00:00 2001 From: Ton Roosendaal Date: Mon, 21 Feb 2011 18:18:55 +0000 Subject: Accidentally left in a print for commit 34912 --- source/blender/editors/space_view3d/view3d_header.c | 2 -- 1 file changed, 2 deletions(-) (limited to 'source/blender/editors/space_view3d') diff --git a/source/blender/editors/space_view3d/view3d_header.c b/source/blender/editors/space_view3d/view3d_header.c index 2656127d73c..3e89fda9c04 100644 --- a/source/blender/editors/space_view3d/view3d_header.c +++ b/source/blender/editors/space_view3d/view3d_header.c @@ -206,8 +206,6 @@ static int view3d_layers_exec(bContext *C, wmOperator *op) for (base= scene->base.first; base; base= base->next) { if(base->lay & oldlay) base->object->recalc= OB_RECALC_OB|OB_RECALC_DATA; - if(base->lay & oldlay) - printf("recalc %s\n", base->object->id.name+2); } ED_area_tag_redraw(sa); -- cgit v1.2.3 From 12d62831b84cb386bbfe15fd678bf7d16aefa302 Mon Sep 17 00:00:00 2001 From: Campbell Barton Date: Tue, 22 Feb 2011 03:19:58 +0000 Subject: fix [#26172] Lattice vertice selection by border selection ( shortcut B ) doesn't update vertice number ( in info header ) missing notifier. --- source/blender/editors/space_view3d/view3d_select.c | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) (limited to 'source/blender/editors/space_view3d') diff --git a/source/blender/editors/space_view3d/view3d_select.c b/source/blender/editors/space_view3d/view3d_select.c index 70d77f4e489..cb6820ef582 100644 --- a/source/blender/editors/space_view3d/view3d_select.c +++ b/source/blender/editors/space_view3d/view3d_select.c @@ -1787,7 +1787,10 @@ static int view3d_borderselect_exec(bContext *C, wmOperator *op) } break; case OB_LATTICE: - ret= do_lattice_box_select(&vc, &rect, select, extend); + ret= do_lattice_box_select(&vc, &rect, select, extend); + if(ret & OPERATOR_FINISHED) { + WM_event_add_notifier(C, NC_GEOM|ND_SELECT, vc.obedit->data); + } break; default: assert(!"border select on incorrect object type"); -- cgit v1.2.3 From 93493743596cb757d4989453197d3ec5e93cdbde Mon Sep 17 00:00:00 2001 From: Campbell Barton Date: Wed, 23 Feb 2011 06:48:47 +0000 Subject: add back view 1:1 operator from 2.4x (Shift+PadEnter) --- source/blender/editors/space_view3d/view3d_draw.c | 17 ++------- source/blender/editors/space_view3d/view3d_edit.c | 41 ++++++++++++++++++++++ .../blender/editors/space_view3d/view3d_intern.h | 2 ++ source/blender/editors/space_view3d/view3d_ops.c | 3 ++ 4 files changed, 48 insertions(+), 15 deletions(-) (limited to 'source/blender/editors/space_view3d') diff --git a/source/blender/editors/space_view3d/view3d_draw.c b/source/blender/editors/space_view3d/view3d_draw.c index 006605b08f9..cb31dc7160c 100644 --- a/source/blender/editors/space_view3d/view3d_draw.c +++ b/source/blender/editors/space_view3d/view3d_draw.c @@ -850,7 +850,7 @@ static void draw_selected_name(Scene *scene, Object *ob, View3D *v3d) BLF_draw_default(offset, 10, 0.0f, info, sizeof(info)-1); } -static void view3d_get_viewborder_size(Scene *scene, ARegion *ar, float size_r[2]) +void view3d_viewborder_size_get(Scene *scene, ARegion *ar, float size_r[2]) { float winmax= MAX2(ar->winx, ar->winy); float aspect= (scene->r.xsch*scene->r.xasp) / (scene->r.ysch*scene->r.yasp); @@ -869,7 +869,7 @@ void view3d_calc_camera_border(Scene *scene, ARegion *ar, RegionView3D *rv3d, Vi float zoomfac, size[2]; float dx= 0.0f, dy= 0.0f; - view3d_get_viewborder_size(scene, ar, size); + view3d_viewborder_size_get(scene, ar, size); if (rv3d == NULL) rv3d = ar->regiondata; @@ -917,19 +917,6 @@ void view3d_calc_camera_border(Scene *scene, ARegion *ar, RegionView3D *rv3d, Vi } } -/* sets the view to 1:1 camera/render-pixel */ -static void view3d_set_1_to_1_viewborder(Scene *scene, ARegion *ar) -{ - RegionView3D *rv3d= ar->regiondata; - float size[2]; - int im_width= (scene->r.size*scene->r.xsch)/100; - - view3d_get_viewborder_size(scene, ar, size); - - rv3d->camzoom= (sqrt(4.0*im_width/size[0]) - M_SQRT2)*50.0; - rv3d->camzoom= CLAMPIS(rv3d->camzoom, RV3D_CAMZOOM_MIN, RV3D_CAMZOOM_MAX); -} - static void drawviewborder(Scene *scene, ARegion *ar, View3D *v3d) { float fac, a; diff --git a/source/blender/editors/space_view3d/view3d_edit.c b/source/blender/editors/space_view3d/view3d_edit.c index 7842707d7e8..9b26cae434d 100644 --- a/source/blender/editors/space_view3d/view3d_edit.c +++ b/source/blender/editors/space_view3d/view3d_edit.c @@ -1843,6 +1843,47 @@ void VIEW3D_OT_zoom_border(wmOperatorType *ot) RNA_def_int(ot->srna, "ymax", 0, INT_MIN, INT_MAX, "Y Max", "", INT_MIN, INT_MAX); } + +/* sets the view to 1:1 camera/render-pixel */ +static void view3d_set_1_to_1_viewborder(Scene *scene, ARegion *ar) +{ + RegionView3D *rv3d= ar->regiondata; + float size[2]; + int im_width= (scene->r.size*scene->r.xsch)/100; + + view3d_viewborder_size_get(scene, ar, size); + + rv3d->camzoom= (sqrt(4.0*im_width/size[0]) - M_SQRT2)*50.0; + rv3d->camzoom= CLAMPIS(rv3d->camzoom, RV3D_CAMZOOM_MIN, RV3D_CAMZOOM_MAX); +} + +static int view3d_zoom_1_to_1_camera_exec(bContext *C, wmOperator *UNUSED(op)) +{ + Scene *scene= CTX_data_scene(C); + ARegion *ar= CTX_wm_region(C); + + view3d_set_1_to_1_viewborder(scene, ar); + + WM_event_add_notifier(C, NC_SPACE|ND_SPACE_VIEW3D, CTX_wm_view3d(C)); + + return OPERATOR_FINISHED; +} + +void VIEW3D_OT_zoom_camera_1_to_1(wmOperatorType *ot) +{ + /* identifiers */ + ot->name= "Zoom Camera 1:1"; + ot->description = "Match the camera to 1:1 to the render output"; + ot->idname= "VIEW3D_OT_zoom_camera_1_to_1"; + + /* api callbacks */ + ot->exec= view3d_zoom_1_to_1_camera_exec; + ot->poll= view3d_camera_active_poll; + + /* flags */ + ot->flag= 0; +} + /* ********************* Changing view operator ****************** */ static EnumPropertyItem prop_view_items[] = { diff --git a/source/blender/editors/space_view3d/view3d_intern.h b/source/blender/editors/space_view3d/view3d_intern.h index b7efa7fced7..8b23955dcc7 100644 --- a/source/blender/editors/space_view3d/view3d_intern.h +++ b/source/blender/editors/space_view3d/view3d_intern.h @@ -63,6 +63,7 @@ void view3d_operatortypes(void); /* view3d_edit.c */ void VIEW3D_OT_zoom(struct wmOperatorType *ot); +void VIEW3D_OT_zoom_camera_1_to_1(struct wmOperatorType *ot); void VIEW3D_OT_move(struct wmOperatorType *ot); void VIEW3D_OT_rotate(struct wmOperatorType *ot); void VIEW3D_OT_view_all(struct wmOperatorType *ot); @@ -126,6 +127,7 @@ void draw_depth_gpencil(Scene *scene, ARegion *ar, View3D *v3d); void view3d_clr_clipping(void); void view3d_set_clipping(RegionView3D *rv3d); void add_view3d_after(ListBase *lb, Base *base, int flag); +void view3d_viewborder_size_get(struct Scene *scene, struct ARegion *ar, float size_r[2]); void circf(float x, float y, float rad); void circ(float x, float y, float rad); diff --git a/source/blender/editors/space_view3d/view3d_ops.c b/source/blender/editors/space_view3d/view3d_ops.c index cb6eee26df5..f38dac77df1 100644 --- a/source/blender/editors/space_view3d/view3d_ops.c +++ b/source/blender/editors/space_view3d/view3d_ops.c @@ -57,6 +57,7 @@ void view3d_operatortypes(void) WM_operatortype_append(VIEW3D_OT_rotate); WM_operatortype_append(VIEW3D_OT_move); WM_operatortype_append(VIEW3D_OT_zoom); + WM_operatortype_append(VIEW3D_OT_zoom_camera_1_to_1); WM_operatortype_append(VIEW3D_OT_view_all); WM_operatortype_append(VIEW3D_OT_viewnumpad); WM_operatortype_append(VIEW3D_OT_view_orbit); @@ -147,6 +148,8 @@ void view3d_keymap(wmKeyConfig *keyconf) RNA_int_set(WM_keymap_add_item(keymap, "VIEW3D_OT_zoom", WHEELINMOUSE, KM_PRESS, 0, 0)->ptr, "delta", 1); RNA_int_set(WM_keymap_add_item(keymap, "VIEW3D_OT_zoom", WHEELOUTMOUSE, KM_PRESS, 0, 0)->ptr, "delta", -1); + WM_keymap_add_item(keymap, "VIEW3D_OT_zoom_camera_1_to_1", PADENTER, KM_PRESS, KM_SHIFT, 0); + WM_keymap_add_item(keymap, "VIEW3D_OT_view_center_camera", HOMEKEY, KM_PRESS, 0, 0); /* only with camera view */ RNA_boolean_set(WM_keymap_add_item(keymap, "VIEW3D_OT_view_all", HOMEKEY, KM_PRESS, 0, 0)->ptr, "center", 0); /* only without camera view */ RNA_boolean_set(WM_keymap_add_item(keymap, "VIEW3D_OT_view_all", CKEY, KM_PRESS, KM_SHIFT, 0)->ptr, "center", 1); -- cgit v1.2.3 From 5b607701a7541c328cc058e10bd7a8c6d0c998ab Mon Sep 17 00:00:00 2001 From: Nathan Letwory Date: Wed, 23 Feb 2011 10:52:22 +0000 Subject: doxygen: prevent GPL license block from being parsed as doxygen comment. --- source/blender/editors/space_view3d/drawanimviz.c | 2 +- source/blender/editors/space_view3d/drawarmature.c | 2 +- source/blender/editors/space_view3d/drawmesh.c | 2 +- source/blender/editors/space_view3d/drawobject.c | 2 +- source/blender/editors/space_view3d/drawvolume.c | 2 +- source/blender/editors/space_view3d/space_view3d.c | 2 +- source/blender/editors/space_view3d/view3d_buttons.c | 2 +- source/blender/editors/space_view3d/view3d_draw.c | 2 +- source/blender/editors/space_view3d/view3d_edit.c | 2 +- source/blender/editors/space_view3d/view3d_fly.c | 2 +- source/blender/editors/space_view3d/view3d_header.c | 2 +- source/blender/editors/space_view3d/view3d_intern.h | 2 +- source/blender/editors/space_view3d/view3d_ops.c | 2 +- source/blender/editors/space_view3d/view3d_select.c | 2 +- source/blender/editors/space_view3d/view3d_snap.c | 2 +- source/blender/editors/space_view3d/view3d_toolbar.c | 2 +- source/blender/editors/space_view3d/view3d_view.c | 2 +- 17 files changed, 17 insertions(+), 17 deletions(-) (limited to 'source/blender/editors/space_view3d') diff --git a/source/blender/editors/space_view3d/drawanimviz.c b/source/blender/editors/space_view3d/drawanimviz.c index 7c07f99b8ea..3c72547bd66 100644 --- a/source/blender/editors/space_view3d/drawanimviz.c +++ b/source/blender/editors/space_view3d/drawanimviz.c @@ -1,4 +1,4 @@ -/** +/* * $Id$ * * ***** BEGIN GPL LICENSE BLOCK ***** diff --git a/source/blender/editors/space_view3d/drawarmature.c b/source/blender/editors/space_view3d/drawarmature.c index f16078ba454..1f0ee30c9e9 100644 --- a/source/blender/editors/space_view3d/drawarmature.c +++ b/source/blender/editors/space_view3d/drawarmature.c @@ -1,4 +1,4 @@ -/** +/* * $Id$ * * ***** BEGIN GPL LICENSE BLOCK ***** diff --git a/source/blender/editors/space_view3d/drawmesh.c b/source/blender/editors/space_view3d/drawmesh.c index 59d9d1bb0b4..19726f02665 100644 --- a/source/blender/editors/space_view3d/drawmesh.c +++ b/source/blender/editors/space_view3d/drawmesh.c @@ -1,4 +1,4 @@ -/** +/* * $Id$ * * ***** BEGIN GPL LICENSE BLOCK ***** diff --git a/source/blender/editors/space_view3d/drawobject.c b/source/blender/editors/space_view3d/drawobject.c index df431f06ef6..031607e3084 100644 --- a/source/blender/editors/space_view3d/drawobject.c +++ b/source/blender/editors/space_view3d/drawobject.c @@ -1,4 +1,4 @@ -/** +/* * $Id$ * * ***** BEGIN GPL LICENSE BLOCK ***** diff --git a/source/blender/editors/space_view3d/drawvolume.c b/source/blender/editors/space_view3d/drawvolume.c index 1479dc950c9..a2eefa2aad1 100644 --- a/source/blender/editors/space_view3d/drawvolume.c +++ b/source/blender/editors/space_view3d/drawvolume.c @@ -1,4 +1,4 @@ -/** +/* * $Id$ * * ***** BEGIN GPL LICENSE BLOCK ***** diff --git a/source/blender/editors/space_view3d/space_view3d.c b/source/blender/editors/space_view3d/space_view3d.c index ef2fa693cb1..96ef339a9b9 100644 --- a/source/blender/editors/space_view3d/space_view3d.c +++ b/source/blender/editors/space_view3d/space_view3d.c @@ -1,4 +1,4 @@ -/** +/* * $Id$ * * ***** BEGIN GPL LICENSE BLOCK ***** diff --git a/source/blender/editors/space_view3d/view3d_buttons.c b/source/blender/editors/space_view3d/view3d_buttons.c index e880e4c3610..0e4e1ad7266 100644 --- a/source/blender/editors/space_view3d/view3d_buttons.c +++ b/source/blender/editors/space_view3d/view3d_buttons.c @@ -1,4 +1,4 @@ -/** +/* * $Id$ * * ***** BEGIN GPL LICENSE BLOCK ***** diff --git a/source/blender/editors/space_view3d/view3d_draw.c b/source/blender/editors/space_view3d/view3d_draw.c index cb31dc7160c..4d591645679 100644 --- a/source/blender/editors/space_view3d/view3d_draw.c +++ b/source/blender/editors/space_view3d/view3d_draw.c @@ -1,4 +1,4 @@ -/** +/* * $Id$ * * ***** BEGIN GPL LICENSE BLOCK ***** diff --git a/source/blender/editors/space_view3d/view3d_edit.c b/source/blender/editors/space_view3d/view3d_edit.c index 9b26cae434d..0a3ecd735f0 100644 --- a/source/blender/editors/space_view3d/view3d_edit.c +++ b/source/blender/editors/space_view3d/view3d_edit.c @@ -1,4 +1,4 @@ -/** +/* * $Id$ * * ***** BEGIN GPL LICENSE BLOCK ***** diff --git a/source/blender/editors/space_view3d/view3d_fly.c b/source/blender/editors/space_view3d/view3d_fly.c index 1e856ad49f7..7a4fb86a4dd 100644 --- a/source/blender/editors/space_view3d/view3d_fly.c +++ b/source/blender/editors/space_view3d/view3d_fly.c @@ -1,4 +1,4 @@ -/** +/* * $Id$ * * ***** BEGIN GPL LICENSE BLOCK ***** diff --git a/source/blender/editors/space_view3d/view3d_header.c b/source/blender/editors/space_view3d/view3d_header.c index 3e89fda9c04..82605439b33 100644 --- a/source/blender/editors/space_view3d/view3d_header.c +++ b/source/blender/editors/space_view3d/view3d_header.c @@ -1,4 +1,4 @@ -/** +/* * $Id$ * * ***** BEGIN GPL LICENSE BLOCK ***** diff --git a/source/blender/editors/space_view3d/view3d_intern.h b/source/blender/editors/space_view3d/view3d_intern.h index 8b23955dcc7..a2a8f9afdb8 100644 --- a/source/blender/editors/space_view3d/view3d_intern.h +++ b/source/blender/editors/space_view3d/view3d_intern.h @@ -1,4 +1,4 @@ -/** +/* * $Id$ * * ***** BEGIN GPL LICENSE BLOCK ***** diff --git a/source/blender/editors/space_view3d/view3d_ops.c b/source/blender/editors/space_view3d/view3d_ops.c index f38dac77df1..8906fb6fb8e 100644 --- a/source/blender/editors/space_view3d/view3d_ops.c +++ b/source/blender/editors/space_view3d/view3d_ops.c @@ -1,4 +1,4 @@ -/** +/* * $Id$ * * ***** BEGIN GPL LICENSE BLOCK ***** diff --git a/source/blender/editors/space_view3d/view3d_select.c b/source/blender/editors/space_view3d/view3d_select.c index cb6820ef582..4aa64733875 100644 --- a/source/blender/editors/space_view3d/view3d_select.c +++ b/source/blender/editors/space_view3d/view3d_select.c @@ -1,4 +1,4 @@ -/** +/* * $Id$ * * ***** BEGIN GPL LICENSE BLOCK ***** diff --git a/source/blender/editors/space_view3d/view3d_snap.c b/source/blender/editors/space_view3d/view3d_snap.c index e90998da21c..4c007bb1aac 100644 --- a/source/blender/editors/space_view3d/view3d_snap.c +++ b/source/blender/editors/space_view3d/view3d_snap.c @@ -1,4 +1,4 @@ -/** +/* * $Id$ * * ***** BEGIN GPL LICENSE BLOCK ***** diff --git a/source/blender/editors/space_view3d/view3d_toolbar.c b/source/blender/editors/space_view3d/view3d_toolbar.c index 3f69ce3e8a8..bfe324df51e 100644 --- a/source/blender/editors/space_view3d/view3d_toolbar.c +++ b/source/blender/editors/space_view3d/view3d_toolbar.c @@ -1,4 +1,4 @@ -/** +/* * $Id$ * * ***** BEGIN GPL LICENSE BLOCK ***** diff --git a/source/blender/editors/space_view3d/view3d_view.c b/source/blender/editors/space_view3d/view3d_view.c index 04f9f2d11d4..36485b9e20e 100644 --- a/source/blender/editors/space_view3d/view3d_view.c +++ b/source/blender/editors/space_view3d/view3d_view.c @@ -1,4 +1,4 @@ -/** +/* * $Id$ * * ***** BEGIN GPL LICENSE BLOCK ***** -- cgit v1.2.3