Revision: 18965 http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=18965 Author: ton Date: 2009-02-14 11:03:24 +0100 (Sat, 14 Feb 2009)
Log Message: ----------- 2.5 - Localview in 3d window back. Note: it puts entire area on localview, so it works nice for 4-split views as well. - Added 'save over' menu in filewindow F2 operator. Mostly to comply to 2.48... such things can be on the review list. Modified Paths: -------------- branches/blender2.5/blender/source/blender/blenloader/intern/readfile.c branches/blender2.5/blender/source/blender/editors/space_file/file_ops.c branches/blender2.5/blender/source/blender/editors/space_view3d/space_view3d.c branches/blender2.5/blender/source/blender/editors/space_view3d/view3d_edit.c branches/blender2.5/blender/source/blender/editors/space_view3d/view3d_intern.h branches/blender2.5/blender/source/blender/editors/space_view3d/view3d_ops.c branches/blender2.5/blender/source/blender/editors/space_view3d/view3d_view.c Modified: branches/blender2.5/blender/source/blender/blenloader/intern/readfile.c =================================================================== --- branches/blender2.5/blender/source/blender/blenloader/intern/readfile.c 2009-02-14 07:52:25 UTC (rev 18964) +++ branches/blender2.5/blender/source/blender/blenloader/intern/readfile.c 2009-02-14 10:03:24 UTC (rev 18965) @@ -4316,16 +4316,18 @@ v3d->localvd->camera= sc->scene->camera; /* localview can become invalid during undo/redo steps, so we exit it when no could be found */ + /* XXX regionlocalview ? for(base= sc->scene->base.first; base; base= base->next) { if(base->lay & v3d->lay) break; } if(base==NULL) { v3d->lay= v3d->localvd->lay; v3d->layact= v3d->localvd->layact; - MEM_freeN(v3d->localvd); + MEM_freeN(v3d->localvd); v3d->localvd= NULL; v3d->localview= 0; } + */ } else if(v3d->scenelock) v3d->lay= sc->scene->lay; Modified: branches/blender2.5/blender/source/blender/editors/space_file/file_ops.c =================================================================== --- branches/blender2.5/blender/source/blender/editors/space_file/file_ops.c 2009-02-14 07:52:25 UTC (rev 18964) +++ branches/blender2.5/blender/source/blender/editors/space_file/file_ops.c 2009-02-14 10:03:24 UTC (rev 18965) @@ -45,6 +45,7 @@ #include "RNA_access.h" #include "RNA_define.h" +#include "UI_interface.h" #include "UI_view2d.h" #include "WM_api.h" @@ -495,11 +496,10 @@ strcat(name, sfile->params->file); RNA_string_set(op->ptr, "filename", name); - op->type->exec(C, op); - - WM_operator_free(op); + /* this gives ownership to pupmenu */ + uiPupMenuSaveOver(C, op, name); } - + return OPERATOR_FINISHED; } Modified: branches/blender2.5/blender/source/blender/editors/space_view3d/space_view3d.c =================================================================== --- branches/blender2.5/blender/source/blender/editors/space_view3d/space_view3d.c 2009-02-14 07:52:25 UTC (rev 18964) +++ branches/blender2.5/blender/source/blender/editors/space_view3d/space_view3d.c 2009-02-14 10:03:24 UTC (rev 18965) @@ -190,10 +190,10 @@ // XXX BIF_view3d_previewrender_free(v3do); if(v3do->localvd) { -// XXX restore_localviewdata(v3do); v3do->localvd= NULL; v3do->properties_storage= NULL; v3do->localview= 0; + v3do->lay= v3dn->localvd->lay; v3do->lay &= 0xFFFFFF; } Modified: branches/blender2.5/blender/source/blender/editors/space_view3d/view3d_edit.c =================================================================== --- branches/blender2.5/blender/source/blender/editors/space_view3d/view3d_edit.c 2009-02-14 07:52:25 UTC (rev 18964) +++ branches/blender2.5/blender/source/blender/editors/space_view3d/view3d_edit.c 2009-02-14 10:03:24 UTC (rev 18965) @@ -1004,8 +1004,11 @@ afm[0]= (max[0]-min[0]); afm[1]= (max[1]-min[1]); afm[2]= (max[2]-min[2]); - size= 0.7f*MAX3(afm[0], afm[1], afm[2]); - + size= MAX3(afm[0], afm[1], afm[2]); + /* perspective should be a bit farther away to look nice */ + if(rv3d->persp==V3D_ORTHO) + size*= 0.7; + if(size <= v3d->near*1.5f) size= v3d->near*1.5f; new_ofs[0]= -(min[0]+max[0])/2.0f; Modified: branches/blender2.5/blender/source/blender/editors/space_view3d/view3d_intern.h =================================================================== --- branches/blender2.5/blender/source/blender/editors/space_view3d/view3d_intern.h 2009-02-14 07:52:25 UTC (rev 18964) +++ branches/blender2.5/blender/source/blender/editors/space_view3d/view3d_intern.h 2009-02-14 10:03:24 UTC (rev 18965) @@ -123,6 +123,7 @@ /* view3d_view.c */ void VIEW3D_OT_smoothview(struct wmOperatorType *ot); void VIEW3D_OT_setcameratoview(struct wmOperatorType *ot); +void VIEW3D_OT_localview(struct wmOperatorType *ot); int boundbox_clip(RegionView3D *rv3d, float obmat[][4], struct BoundBox *bb); @@ -131,10 +132,6 @@ void view3d_project_float(struct ARegion *a, float *vec, float *adr, float mat[4][4]); void view3d_get_object_project_mat(RegionView3D *v3d, struct Object *ob, float pmat[4][4], float vmat[4][4]); -void initlocalview(Scene *scene, struct ARegion *ar, View3D *v3d); -void restore_localviewdata(View3D *vd); -void endlocalview(Scene *scene, ScrArea *sa); - void centerview(struct ARegion *ar, View3D *v3d); void smooth_view(struct bContext *C, Object *, Object *, float *ofs, float *quat, float *dist, float *lens); Modified: branches/blender2.5/blender/source/blender/editors/space_view3d/view3d_ops.c =================================================================== --- branches/blender2.5/blender/source/blender/editors/space_view3d/view3d_ops.c 2009-02-14 07:52:25 UTC (rev 18964) +++ branches/blender2.5/blender/source/blender/editors/space_view3d/view3d_ops.c 2009-02-14 10:03:24 UTC (rev 18965) @@ -91,7 +91,8 @@ WM_operatortype_append(VIEW3D_OT_wpaint); WM_operatortype_append(VIEW3D_OT_editmesh_face_toolbox); WM_operatortype_append(VIEW3D_OT_properties); - + WM_operatortype_append(VIEW3D_OT_localview); + transform_operatortypes(); } @@ -151,6 +152,8 @@ RNA_enum_set(WM_keymap_add_item(keymap, "VIEW3D_OT_view_pan", PAD6, KM_PRESS, KM_CTRL, 0)->ptr, "type", V3D_VIEW_PANRIGHT); RNA_enum_set(WM_keymap_add_item(keymap, "VIEW3D_OT_view_pan", PAD8, KM_PRESS, KM_CTRL, 0)->ptr, "type", V3D_VIEW_PANUP); + WM_keymap_add_item(keymap, "VIEW3D_OT_localview", PADSLASHKEY, KM_PRESS, 0, 0); + /* drawtype */ km = WM_keymap_add_item(keymap, "VIEW3D_OT_drawtype", ZKEY, KM_PRESS, 0, 0); RNA_int_set(km->ptr, "draw_type", OB_SOLID); Modified: branches/blender2.5/blender/source/blender/editors/space_view3d/view3d_view.c =================================================================== --- branches/blender2.5/blender/source/blender/editors/space_view3d/view3d_view.c 2009-02-14 07:52:25 UTC (rev 18964) +++ branches/blender2.5/blender/source/blender/editors/space_view3d/view3d_view.c 2009-02-14 10:03:24 UTC (rev 18965) @@ -1183,7 +1183,8 @@ return hits; } -// XXX solve: localview on region level? no.... layers are area, so all regions in area have to be set +/* ********************** local view operator ******************** */ + static unsigned int free_localbit(void) { unsigned int lay; @@ -1219,11 +1220,11 @@ } -void initlocalview(Scene *scene, ARegion *ar, View3D *v3d) +static void initlocalview(Scene *scene, ScrArea *sa) { - RegionView3D *rv3d= ar->regiondata; + View3D *v3d= sa->spacedata.first; Base *base; - float size = 0.0, min[3], max[3], afm[3]; + float size = 0.0, min[3], max[3], box[3]; unsigned int locallay; int ok=0; @@ -1247,111 +1248,136 @@ scene->obedit->lay= BASACT->lay; } else { - base= FIRSTBASE; - while(base) { + for(base= FIRSTBASE; base; base= base->next) { if(TESTBASE(v3d, base)) { minmax_object(base->object, min, max); base->lay |= locallay; base->object->lay= base->lay; ok= 1; } - base= base->next; } } - afm[0]= (max[0]-min[0]); - afm[1]= (max[1]-min[1]); - afm[2]= (max[2]-min[2]); - size= 0.7*MAX3(afm[0], afm[1], afm[2]); + box[0]= (max[0]-min[0]); + box[1]= (max[1]-min[1]); + box[2]= (max[2]-min[2]); + size= MAX3(box[0], box[1], box[2]); if(size<=0.01) size= 0.01; } if(ok) { + ARegion *ar; + v3d->localvd= MEM_mallocN(sizeof(View3D), "localview"); + memcpy(v3d->localvd, v3d, sizeof(View3D)); - rv3d->ofs[0]= -(min[0]+max[0])/2.0; - rv3d->ofs[1]= -(min[1]+max[1])/2.0; - rv3d->ofs[2]= -(min[2]+max[2])/2.0; + for(ar= sa->regionbase.first; ar; ar= ar->next) { + if(ar->regiontype == RGN_TYPE_WINDOW) { + RegionView3D *rv3d= ar->regiondata; - rv3d->dist= size; + rv3d->localvd= MEM_mallocN(sizeof(RegionView3D), "localview region"); + memcpy(rv3d->localvd, rv3d, sizeof(RegionView3D)); + + rv3d->ofs[0]= -(min[0]+max[0])/2.0; + rv3d->ofs[1]= -(min[1]+max[1])/2.0; + rv3d->ofs[2]= -(min[2]+max[2])/2.0; - // correction for window aspect ratio - if(ar->winy>2 && ar->winx>2) { - size= (float)ar->winx/(float)ar->winy; - if(size<1.0) size= 1.0/size; - rv3d->dist*= size; + rv3d->dist= size; + /* perspective should be a bit farther away to look nice */ + if(rv3d->persp==V3D_ORTHO) + rv3d->dist*= 0.7; + + // correction for window aspect ratio + if(ar->winy>2 && ar->winx>2) { + float asp= (float)ar->winx/(float)ar->winy; + if(asp<1.0) asp= 1.0/asp; + rv3d->dist*= asp; + } + + if (rv3d->persp==V3D_CAMOB) rv3d->persp= V3D_PERSP; + + v3d->cursor[0]= -rv3d->ofs[0]; + v3d->cursor[1]= -rv3d->ofs[1]; + v3d->cursor[2]= -rv3d->ofs[2]; + } } - - if (rv3d->persp==V3D_CAMOB) rv3d->persp= V3D_PERSP; if (v3d->near> 0.1) v3d->near= 0.1; - v3d->cursor[0]= -rv3d->ofs[0]; - v3d->cursor[1]= -rv3d->ofs[1]; - v3d->cursor[2]= -rv3d->ofs[2]; - v3d->lay= locallay; - -// XXX countall(); -// XXX scrarea_queue_winredraw(curarea); } else { /* clear flags */ - base= FIRSTBASE; - while(base) { + for(base= FIRSTBASE; base; base= base->next) { if( base->lay & locallay ) { base->lay-= locallay; if(base->lay==0) base->lay= v3d->layact; if(base->object != scene->obedit) base->flag |= SELECT; base->object->lay= base->lay; } - base= base->next; - } -// XXX scrarea_queue_headredraw(curarea); - + } v3d->localview= 0; } -// XXX BIF_view3d_previewrender_signal(curarea, PR_DBASE|PR_DISPRECT); + } -void restore_localviewdata(View3D *vd) +static void restore_localviewdata(ScrArea *sa, int free) { - if(vd->localvd==0) return; + ARegion *ar; + View3D *v3d= sa->spacedata.first; - VECCOPY(vd->ofs, vd->localvd->ofs); - vd->near= vd->localvd->near; - vd->far= vd->localvd->far; - vd->lay= vd->localvd->lay; - vd->layact= vd->localvd->layact; - vd->drawtype= vd->localvd->drawtype; - vd->camera= vd->localvd->camera; + if(v3d->localvd==NULL) return; + v3d->near= v3d->localvd->near; + v3d->far= v3d->localvd->far; + v3d->lay= v3d->localvd->lay; + v3d->layact= v3d->localvd->layact; + v3d->drawtype= v3d->localvd->drawtype; + v3d->camera= v3d->localvd->camera; + + if(free) { + MEM_freeN(v3d->localvd); + v3d->localvd= NULL; + v3d->localview= 0; + } + + for(ar= sa->regionbase.first; ar; ar= ar->next) { + if(ar->regiontype == RGN_TYPE_WINDOW) { + RegionView3D *rv3d= ar->regiondata; + + if(rv3d->localvd) { + rv3d->dist= rv3d->localvd->dist; @@ Diff output truncated at 10240 characters. @@ _______________________________________________ Bf-blender-cvs mailing list Bf-blender-cvs@blender.org http://lists.blender.org/mailman/listinfo/bf-blender-cvs