[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