[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [18965] branches/blender2.5/blender/source /blender: 2.5

Ton Roosendaal ton at blender.org
Sat Feb 14 11:03:24 CET 2009


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. @@




More information about the Bf-blender-cvs mailing list