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

Ton Roosendaal ton at blender.org
Tue Jan 20 15:23:32 CET 2009


Revision: 18590
          http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=18590
Author:   ton
Date:     2009-01-20 15:23:32 +0100 (Tue, 20 Jan 2009)

Log Message:
-----------
2.5

Couldn't leave to finish this; four-split 3d view now
syncs the ortho views to a box-view. Brings back good
old Amiga Sculpt4D feeling! :) What's not done is to
use the box to clip away invisible stuff.

Note that it still allows to switch top-bottom, 
left-right or front-back. The 4th window is entirely
free.

Test: use shift+alt+ctrl+S. In due time will all go
the headermenu, configurable, of course.

Modified Paths:
--------------
    branches/blender2.5/blender/source/blender/editors/screen/screen_ops.c
    branches/blender2.5/blender/source/blender/editors/space_view3d/view3d_draw.c
    branches/blender2.5/blender/source/blender/editors/space_view3d/view3d_edit.c
    branches/blender2.5/blender/source/blender/editors/space_view3d/view3d_view.c
    branches/blender2.5/blender/source/blender/makesdna/DNA_view3d_types.h

Modified: branches/blender2.5/blender/source/blender/editors/screen/screen_ops.c
===================================================================
--- branches/blender2.5/blender/source/blender/editors/screen/screen_ops.c	2009-01-20 14:19:39 UTC (rev 18589)
+++ branches/blender2.5/blender/source/blender/editors/screen/screen_ops.c	2009-01-20 14:23:32 UTC (rev 18590)
@@ -1469,6 +1469,26 @@
 			BLI_addtail(&sa->regionbase, newar);
 		}
 		
+		/* lock views and set them */
+		if(sa->spacetype==SPACE_VIEW3D) {
+			RegionView3D *rv3d;
+			
+			rv3d= ar->regiondata;
+			rv3d->viewlock= RV3D_LOCKED; rv3d->view= V3D_VIEW_FRONT; rv3d->persp= V3D_ORTHO;
+			
+			ar= ar->next;
+			rv3d= ar->regiondata;
+			rv3d->viewlock= RV3D_LOCKED; rv3d->view= V3D_VIEW_TOP; rv3d->persp= V3D_ORTHO;
+			
+			ar= ar->next;
+			rv3d= ar->regiondata;
+			rv3d->viewlock= RV3D_LOCKED; rv3d->view= V3D_VIEW_RIGHT; rv3d->persp= V3D_ORTHO;
+			
+			ar= ar->next;
+			rv3d= ar->regiondata;
+			rv3d->view= V3D_VIEW_CAMERA; rv3d->persp= V3D_CAMOB;
+		}
+		
 		WM_event_add_notifier(C, NC_SCREEN|NA_EDITED, NULL);
 	}
 	

Modified: branches/blender2.5/blender/source/blender/editors/space_view3d/view3d_draw.c
===================================================================
--- branches/blender2.5/blender/source/blender/editors/space_view3d/view3d_draw.c	2009-01-20 14:19:39 UTC (rev 18589)
+++ branches/blender2.5/blender/source/blender/editors/space_view3d/view3d_draw.c	2009-01-20 14:23:32 UTC (rev 18590)
@@ -646,24 +646,31 @@
 	char *name = NULL;
 	
 	switch (rv3d->view) {
-		case 1:
-			if (rv3d->persp == V3D_ORTHO)
-				name = (rv3d->rflag & RV3D_OPP_DIRECTION_NAME) ? "Back Ortho" : "Front Ortho";
-			else
-				name = (rv3d->rflag & RV3D_OPP_DIRECTION_NAME) ? "Back Persp" : "Front Persp";
+		case V3D_VIEW_FRONT:
+			if (rv3d->persp == V3D_ORTHO) name = "Front Ortho";
+			else name = "Front Persp";
 			break;
-		case 3:
-			if (rv3d->persp == V3D_ORTHO)
-				name = (rv3d->rflag & RV3D_OPP_DIRECTION_NAME) ? "Left Ortho" : "Right Ortho";
-			else
-				name = (rv3d->rflag & RV3D_OPP_DIRECTION_NAME) ? "Left Persp" : "Right Persp";
+		case V3D_VIEW_BACK:
+			if (rv3d->persp == V3D_ORTHO) name = "Back Ortho";
+			else name = "Back Persp";
 			break;
-		case 7:
-			if (rv3d->persp == V3D_ORTHO)
-				name = (rv3d->rflag & RV3D_OPP_DIRECTION_NAME) ? "Bottom Ortho" : "Top Ortho";
-			else
-				name = (rv3d->rflag & RV3D_OPP_DIRECTION_NAME) ? "Bottom Persp" : "Top Persp";
+		case V3D_VIEW_TOP:
+			if (rv3d->persp == V3D_ORTHO) name = "Top Ortho";
+			else name = "Top Persp";
 			break;
+		case V3D_VIEW_BOTTOM:
+			if (rv3d->persp == V3D_ORTHO) name = "Bottom Ortho";
+			else name = "Bottom Persp";
+			break;
+		case V3D_VIEW_RIGHT:
+			if (rv3d->persp == V3D_ORTHO) name = "Right Ortho";
+			else name = "Right Persp";
+			break;
+		case V3D_VIEW_LEFT:
+			if (rv3d->persp == V3D_ORTHO) name = "Left Ortho";
+			else name = "Left Persp";
+			break;
+			
 		default:
 			if (rv3d->persp==V3D_CAMOB) {
 				if ((v3d->camera) && (v3d->camera->type == OB_CAMERA)) {

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-01-20 14:19:39 UTC (rev 18589)
+++ branches/blender2.5/blender/source/blender/editors/space_view3d/view3d_edit.c	2009-01-20 14:23:32 UTC (rev 18590)
@@ -83,9 +83,67 @@
 
 /* ********************** view3d_edit: view manipulations ********************* */
 
+/* sync ortho view of region to others, for view transforms */
+static void view3d_boxview_sync(ScrArea *sa, ARegion *ar)
+{
+	ARegion *artest;
+	RegionView3D *rv3d= ar->regiondata;
+	
+	for(artest= sa->regionbase.first; artest; artest= artest->next) {
+		if(artest!=ar && artest->regiontype==RGN_TYPE_WINDOW) {
+			RegionView3D *rv3dtest= artest->regiondata;
+			
+			if(rv3dtest->viewlock) {
+				rv3dtest->dist= rv3d->dist;
+
+				if( ELEM(rv3d->view, V3D_VIEW_TOP, V3D_VIEW_BOTTOM) ) {
+					if( ELEM(rv3dtest->view, V3D_VIEW_FRONT, V3D_VIEW_BACK))
+						rv3dtest->ofs[0]= rv3d->ofs[0];
+					else if( ELEM(rv3dtest->view, V3D_VIEW_RIGHT, V3D_VIEW_LEFT))
+						rv3dtest->ofs[1]= rv3d->ofs[1];
+				}
+				else if( ELEM(rv3d->view, V3D_VIEW_FRONT, V3D_VIEW_BACK) ) {
+					if( ELEM(rv3dtest->view, V3D_VIEW_TOP, V3D_VIEW_BOTTOM))
+						rv3dtest->ofs[0]= rv3d->ofs[0];
+					else if( ELEM(rv3dtest->view, V3D_VIEW_RIGHT, V3D_VIEW_LEFT))
+						rv3dtest->ofs[2]= rv3d->ofs[2];
+				}
+				else if( ELEM(rv3d->view, V3D_VIEW_RIGHT, V3D_VIEW_LEFT) ) {
+					if( ELEM(rv3dtest->view, V3D_VIEW_TOP, V3D_VIEW_BOTTOM))
+						rv3dtest->ofs[1]= rv3d->ofs[1];
+					if( ELEM(rv3dtest->view, V3D_VIEW_FRONT, V3D_VIEW_BACK))
+						rv3dtest->ofs[2]= rv3d->ofs[2];
+				}
+				
+				ED_region_tag_redraw(artest);
+			}
+		}
+	}
+}
+
+/* for home, center etc */
+static void view3d_boxview_copy(ScrArea *sa, ARegion *ar)
+{
+	ARegion *artest;
+	RegionView3D *rv3d= ar->regiondata;
+	
+	for(artest= sa->regionbase.first; artest; artest= artest->next) {
+		if(artest!=ar && artest->regiontype==RGN_TYPE_WINDOW) {
+			RegionView3D *rv3dtest= artest->regiondata;
+			
+			if(rv3dtest->viewlock) {
+				rv3dtest->dist= rv3d->dist;
+				VECCOPY(rv3dtest->ofs, rv3d->ofs);
+				ED_region_tag_redraw(artest);
+			}
+		}
+	}
+}
+
 /* ************************** init for view ops **********************************/
 
 typedef struct ViewOpsData {
+	ScrArea *sa;
 	ARegion *ar;
 	RegionView3D *rv3d;
 
@@ -137,6 +195,7 @@
 
 	/* store data */
 	op->customdata= vod;
+	vod->sa= CTX_wm_area(C);
 	vod->ar= CTX_wm_region(C);
 	vod->rv3d= rv3d= vod->ar->regiondata;
 	vod->dist0= rv3d->dist;
@@ -168,12 +227,12 @@
 
 static float snapquats[39][6] = {
 	/*{q0, q1, q3, q4, view, oposite_direction}*/
-{COS45, -SIN45, 0.0, 0.0, 1, 0},  //front
-{0.0, 0.0, -SIN45, -SIN45, 1, 1}, //back
-{1.0, 0.0, 0.0, 0.0, 7, 0},       //top
-{0.0, -1.0, 0.0, 0.0, 7, 1},      //bottom
-{0.5, -0.5, -0.5, -0.5, 3, 0},    //left
-{0.5, -0.5, 0.5, 0.5, 3, 1},      //right
+{COS45, -SIN45, 0.0, 0.0, V3D_VIEW_FRONT, 0},  //front
+{0.0, 0.0, -SIN45, -SIN45, V3D_VIEW_BACK, 0}, //back
+{1.0, 0.0, 0.0, 0.0, V3D_VIEW_TOP, 0},       //top
+{0.0, -1.0, 0.0, 0.0, V3D_VIEW_BOTTOM, 0},      //bottom
+{0.5, -0.5, -0.5, -0.5, V3D_VIEW_LEFT, 0},    //left
+{0.5, -0.5, 0.5, 0.5, V3D_VIEW_RIGHT, 0},      //right
 
 	/* some more 45 deg snaps */
 {0.65328145027160645, -0.65328145027160645, 0.27059805393218994, 0.27059805393218994, 0, 0},
@@ -326,7 +385,6 @@
 		for (i = 0 ; i < 39; i++){
 			float snapmat[3][3];
 			float view = (int)snapquats[i][4];
-			float oposite_dir = (int)snapquats[i][5];
 
 			QuatToMat3(snapquats[i], snapmat);
 
@@ -337,13 +395,6 @@
 				QUATCOPY(rv3d->viewquat, snapquats[i]);
 
 				rv3d->view = view;
-				if (view){
-					if (oposite_dir){
-						rv3d->rflag |= RV3D_OPP_DIRECTION_NAME;
-					}else{
-						rv3d->rflag &= ~RV3D_OPP_DIRECTION_NAME;
-					}
-				}
 
 				break;
 			}
@@ -380,8 +431,12 @@
 
 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;
+	
 	/* makes op->customdata */
 	viewops_data(C, op, event);
 	vod= op->customdata;
@@ -434,6 +489,9 @@
 
 		window_to_3d(vod->ar, dvec, x-vod->oldx, y-vod->oldy);
 		VecAddf(vod->rv3d->ofs, vod->rv3d->ofs, dvec);
+		
+		if(vod->rv3d->viewlock)
+			view3d_boxview_sync(vod->sa, vod->ar);
 	}
 
 	vod->oldx= x;
@@ -591,6 +649,9 @@
 
 // XXX	if(vod->rv3d->persp==V3D_ORTHO || vod->rv3d->persp==V3D_CAMOB) preview3d_event= 0;
 
+	if(vod->rv3d->viewlock)
+		view3d_boxview_sync(vod->sa, vod->ar);
+
 	ED_region_tag_redraw(vod->ar);
 }
 
@@ -640,6 +701,9 @@
 		else if(rv3d->dist> 0.001*v3d->grid) rv3d->dist*=.83333f;
 	}
 
+	if(rv3d->viewlock)
+		view3d_boxview_sync(CTX_wm_area(C), CTX_wm_region(C));
+	
 	ED_region_tag_redraw(CTX_wm_region(C));
 
 	return OPERATOR_FINISHED;
@@ -737,6 +801,9 @@
 		}
 	}
 // XXX	BIF_view3d_previewrender_signal(curarea, PR_DBASE|PR_DISPRECT);
+	
+	if(rv3d->viewlock)
+		view3d_boxview_copy(CTX_wm_area(C), ar);
 
 	return OPERATOR_FINISHED;
 }
@@ -866,6 +933,8 @@
 	}
 
 // XXX	BIF_view3d_previewrender_signal(curarea, PR_DBASE|PR_DISPRECT);
+	if(rv3d->viewlock)
+		view3d_boxview_copy(CTX_wm_area(C), ar);
 
 	return OPERATOR_FINISHED;
 }
@@ -1088,6 +1157,9 @@
 
 	smooth_view(C, NULL, NULL, new_ofs, NULL, &new_dist, NULL);
 	
+	if(rv3d->viewlock)
+		view3d_boxview_sync(CTX_wm_area(C), ar);
+	
 	return OPERATOR_FINISHED;
 }
 
@@ -1150,11 +1222,27 @@
 	RegionView3D *rv3d= CTX_wm_region_view3d(C);
 	float new_quat[4];
 	
+	if(rv3d->viewlock) {
+		/* only pass on if */
+		if(rv3d->view==V3D_VIEW_FRONT && view==V3D_VIEW_BACK);
+		else if(rv3d->view==V3D_VIEW_BACK && view==V3D_VIEW_FRONT);
+		else if(rv3d->view==V3D_VIEW_RIGHT && view==V3D_VIEW_LEFT);
+		else if(rv3d->view==V3D_VIEW_LEFT && view==V3D_VIEW_RIGHT);
+		else if(rv3d->view==V3D_VIEW_BOTTOM && view==V3D_VIEW_TOP);
+		else if(rv3d->view==V3D_VIEW_TOP && view==V3D_VIEW_BOTTOM);
+		else return;
+	}
+	
 	new_quat[0]= q1; new_quat[1]= q2;
 	new_quat[2]= q3; new_quat[3]= q4;
 	
 	rv3d->view= view;
-	
+
+	if(rv3d->viewlock) {
+		ED_region_tag_redraw(CTX_wm_region(C));
+		return;
+	}
+
 	if (rv3d->persp==V3D_CAMOB && v3d->camera) {
 
 		if (U.uiflag & USER_AUTOPERSP) rv3d->persp= V3D_ORTHO;
@@ -1187,121 +1275,119 @@
 
 	/* Use this to test if we started out with a camera */
 
-	/* Indicate that this view is inverted,
-	 * but only if it actually _was_ inverted (jobbe) */
-	if (viewnum == V3D_VIEW_BOTTOM || viewnum == V3D_VIEW_BACK || viewnum == V3D_VIEW_LEFT)
-		rv3d->rflag |= RV3D_OPP_DIRECTION_NAME;
-	else if (viewnum != V3D_VIEW_PERSPORTHO)
-			rv3d->rflag &= ~RV3D_OPP_DIRECTION_NAME;
-
 	switch (viewnum) {
 		case V3D_VIEW_BOTTOM :
-			axis_set_view(C, 0.0, -1.0, 0.0, 0.0, 7, perspo);
+			axis_set_view(C, 0.0, -1.0, 0.0, 0.0, viewnum, perspo);
 			break;
 
 		case V3D_VIEW_BACK:
-			axis_set_view(C, 0.0, 0.0, (float)-cos(M_PI/4.0), (float)-cos(M_PI/4.0), 1, perspo);
+			axis_set_view(C, 0.0, 0.0, (float)-cos(M_PI/4.0), (float)-cos(M_PI/4.0), viewnum, perspo);
 			break;
 
 		case V3D_VIEW_LEFT:
-			axis_set_view(C, 0.5, -0.5, 0.5, 0.5, 3, perspo);
+			axis_set_view(C, 0.5, -0.5, 0.5, 0.5, viewnum, perspo);
 			break;
 
 		case V3D_VIEW_TOP:
-			axis_set_view(C, 1.0, 0.0, 0.0, 0.0, 7, perspo);
+			axis_set_view(C, 1.0, 0.0, 0.0, 0.0, viewnum, perspo);
 			break;
 
 		case V3D_VIEW_FRONT:

@@ Diff output truncated at 10240 characters. @@




More information about the Bf-blender-cvs mailing list