[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [18591] branches/blender2.5/blender/source /blender: 2.5
Ton Roosendaal
ton at blender.org
Tue Jan 20 19:31:16 CET 2009
Revision: 18591
http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=18591
Author: ton
Date: 2009-01-20 19:31:11 +0100 (Tue, 20 Jan 2009)
Log Message:
-----------
2.5
View3D four-split: added box-clip for the three ortho
windows. Is all on by default, waiting for headers and
buttons to come back.
Also: hotkey for foursplit now also removes it (toggle)
Also: window_to_3d() function only did delta's,
renamed it to window_to_3d_delta and coded a
real window_to_3d()
Modified Paths:
--------------
branches/blender2.5/blender/source/blender/editors/gpencil/gpencil.c
branches/blender2.5/blender/source/blender/editors/include/ED_view3d.h
branches/blender2.5/blender/source/blender/editors/mesh/editmesh_add.c
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/editors/transform/transform.c
branches/blender2.5/blender/source/blender/editors/transform/transform_constraints.c
branches/blender2.5/blender/source/blender/editors/transform/transform_generics.c
branches/blender2.5/blender/source/blender/makesdna/DNA_view3d_types.h
Modified: branches/blender2.5/blender/source/blender/editors/gpencil/gpencil.c
===================================================================
--- branches/blender2.5/blender/source/blender/editors/gpencil/gpencil.c 2009-01-20 14:23:32 UTC (rev 18590)
+++ branches/blender2.5/blender/source/blender/editors/gpencil/gpencil.c 2009-01-20 18:31:11 UTC (rev 18591)
@@ -790,7 +790,7 @@
* - method taken from editview.c - mouse_cursor()
*/
project_short_noclip(ar, fp, mval);
- window_to_3d(ar, dvec, mval[0]-mx, mval[1]-my);
+ window_to_3d_delta(ar, dvec, mval[0]-mx, mval[1]-my);
VecSubf(p3d, fp, dvec);
}
}
@@ -1215,7 +1215,7 @@
/* method taken from editview.c - mouse_cursor() */
project_short_noclip(p->ar, fp, mval);
- window_to_3d(p->ar, dvec, mval[0]-mx, mval[1]-my);
+ window_to_3d_delta(p->ar, dvec, mval[0]-mx, mval[1]-my);
VecSubf(out, fp, dvec);
}
Modified: branches/blender2.5/blender/source/blender/editors/include/ED_view3d.h
===================================================================
--- branches/blender2.5/blender/source/blender/editors/include/ED_view3d.h 2009-01-20 14:23:32 UTC (rev 18590)
+++ branches/blender2.5/blender/source/blender/editors/include/ED_view3d.h 2009-01-20 18:31:11 UTC (rev 18591)
@@ -60,6 +60,7 @@
void initgrabz(struct RegionView3D *rv3d, float x, float y, float z);
void window_to_3d(struct ARegion *ar, float *vec, short mx, short my);
+void window_to_3d_delta(struct ARegion *ar, float *vec, short mx, short my);
/* Depth buffer */
float read_cached_depth(struct ViewContext *vc, int x, int y);
Modified: branches/blender2.5/blender/source/blender/editors/mesh/editmesh_add.c
===================================================================
--- branches/blender2.5/blender/source/blender/editors/mesh/editmesh_add.c 2009-01-20 14:23:32 UTC (rev 18590)
+++ branches/blender2.5/blender/source/blender/editors/mesh/editmesh_add.c 2009-01-20 18:31:11 UTC (rev 18591)
@@ -132,7 +132,7 @@
// XXX initgrabz(fp[0], fp[1], fp[2]);
// if(mval[0]!=IS_CLIPPED) {
-// window_to_3d(dvec, mval[0]-mx, mval[1]-my);
+// window_to_3d_delta(dvec, mval[0]-mx, mval[1]-my);
// VecSubf(fp, fp, dvec);
// }
}
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:23:32 UTC (rev 18590)
+++ branches/blender2.5/blender/source/blender/editors/screen/screen_ops.c 2009-01-20 18:31:11 UTC (rev 18591)
@@ -1453,10 +1453,31 @@
/* some rules... */
if(ar->regiontype!=RGN_TYPE_WINDOW)
BKE_report(op->reports, RPT_ERROR, "Only window region can be 4-splitted");
+ else if(ar->alignment==RGN_ALIGN_QSPLIT) {
+ ScrArea *sa= CTX_wm_area(C);
+ ARegion *arn;
+
+ /* keep current region */
+ ar->alignment= 0;
+
+ if(sa->spacetype==SPACE_VIEW3D) {
+ RegionView3D *rv3d= ar->regiondata;
+ rv3d->viewlock= 0;
+ }
+
+ for(ar= sa->regionbase.first; ar; ar= arn) {
+ arn= ar->next;
+ if(ar->alignment==RGN_ALIGN_QSPLIT) {
+ ED_region_exit(C, ar);
+ BKE_area_region_free(sa->type, ar);
+ BLI_remlink(&sa->regionbase, ar);
+ MEM_freeN(ar);
+ }
+ }
+ WM_event_add_notifier(C, NC_SCREEN|NA_EDITED, NULL);
+ }
else if(ar->next)
BKE_report(op->reports, RPT_ERROR, "Only last region can be 4-splitted");
- else if(ar->alignment==RGN_ALIGN_QSPLIT)
- BKE_report(op->reports, RPT_ERROR, "Cannot split further");
else {
ScrArea *sa= CTX_wm_area(C);
ARegion *newar;
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:23:32 UTC (rev 18590)
+++ branches/blender2.5/blender/source/blender/editors/space_view3d/view3d_draw.c 2009-01-20 18:31:11 UTC (rev 18591)
@@ -149,26 +149,30 @@
{
BoundBox *bb= rv3d->clipbb;
- UI_ThemeColorShade(TH_BACK, -8);
-
- glBegin(GL_QUADS);
-
- glVertex3fv(bb->vec[0]); glVertex3fv(bb->vec[1]); glVertex3fv(bb->vec[2]); glVertex3fv(bb->vec[3]);
- glVertex3fv(bb->vec[0]); glVertex3fv(bb->vec[4]); glVertex3fv(bb->vec[5]); glVertex3fv(bb->vec[1]);
- glVertex3fv(bb->vec[4]); glVertex3fv(bb->vec[7]); glVertex3fv(bb->vec[6]); glVertex3fv(bb->vec[5]);
- glVertex3fv(bb->vec[7]); glVertex3fv(bb->vec[3]); glVertex3fv(bb->vec[2]); glVertex3fv(bb->vec[6]);
- glVertex3fv(bb->vec[1]); glVertex3fv(bb->vec[5]); glVertex3fv(bb->vec[6]); glVertex3fv(bb->vec[2]);
- glVertex3fv(bb->vec[7]); glVertex3fv(bb->vec[4]); glVertex3fv(bb->vec[0]); glVertex3fv(bb->vec[3]);
-
- glEnd();
+ if(bb) {
+ UI_ThemeColorShade(TH_BACK, -8);
+
+ glBegin(GL_QUADS);
+
+ glVertex3fv(bb->vec[0]); glVertex3fv(bb->vec[1]); glVertex3fv(bb->vec[2]); glVertex3fv(bb->vec[3]);
+ glVertex3fv(bb->vec[0]); glVertex3fv(bb->vec[4]); glVertex3fv(bb->vec[5]); glVertex3fv(bb->vec[1]);
+ glVertex3fv(bb->vec[4]); glVertex3fv(bb->vec[7]); glVertex3fv(bb->vec[6]); glVertex3fv(bb->vec[5]);
+ glVertex3fv(bb->vec[7]); glVertex3fv(bb->vec[3]); glVertex3fv(bb->vec[2]); glVertex3fv(bb->vec[6]);
+ glVertex3fv(bb->vec[1]); glVertex3fv(bb->vec[5]); glVertex3fv(bb->vec[6]); glVertex3fv(bb->vec[2]);
+ glVertex3fv(bb->vec[7]); glVertex3fv(bb->vec[4]); glVertex3fv(bb->vec[0]); glVertex3fv(bb->vec[3]);
+
+ glEnd();
+ }
}
void view3d_set_clipping(RegionView3D *rv3d)
{
double plane[4];
- int a;
+ int a, tot=4;
- for(a=0; a<4; a++) {
+ if(rv3d->viewlock) tot= 6;
+
+ for(a=0; a<tot; a++) {
QUATCOPY(plane, rv3d->clip[a]);
glClipPlane(GL_CLIP_PLANE0+a, plane);
glEnable(GL_CLIP_PLANE0+a);
@@ -179,7 +183,7 @@
{
int a;
- for(a=0; a<4; a++) {
+ for(a=0; a<6; a++) {
glDisable(GL_CLIP_PLANE0+a);
}
}
@@ -1327,7 +1331,7 @@
/* calc window coord */
initgrabz(rv3d, 0.0, 0.0, 0.0);
- window_to_3d(ar, vec, 1, 0);
+ window_to_3d_delta(ar, vec, 1, 0);
fac= MAX3( fabs(vec[0]), fabs(vec[1]), fabs(vec[1]) );
fac= 1.0/fac;
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:23:32 UTC (rev 18590)
+++ branches/blender2.5/blender/source/blender/editors/space_view3d/view3d_edit.c 2009-01-20 18:31:11 UTC (rev 18591)
@@ -83,6 +83,87 @@
/* ********************** view3d_edit: view manipulations ********************* */
+/* ********************* box view support ***************** */
+
+static void view3d_boxview_clip(ScrArea *sa)
+{
+ ARegion *ar;
+ BoundBox *bb = MEM_callocN(sizeof(BoundBox), "clipbb");
+ float clip[6][4];
+ float x1, y1, z1, ofs[3];
+ int val;
+
+ /* create bounding box */
+ for(ar= sa->regionbase.first; ar; ar= ar->next) {
+ if(ar->regiontype==RGN_TYPE_WINDOW) {
+ RegionView3D *rv3d= ar->regiondata;
+
+ if(rv3d->viewlock) {
+ if(ELEM(rv3d->view, V3D_VIEW_TOP, V3D_VIEW_BOTTOM)) {
+ if(ar->winx>ar->winy) x1= rv3d->dist;
+ else x1= ar->winx*rv3d->dist/ar->winy;
+
+ if(ar->winx>ar->winy) y1= ar->winy*rv3d->dist/ar->winx;
+ else y1= rv3d->dist;
+
+ ofs[0]= rv3d->ofs[0];
+ ofs[1]= rv3d->ofs[1];
+ }
+ else if(ELEM(rv3d->view, V3D_VIEW_FRONT, V3D_VIEW_BACK)) {
+ ofs[2]= rv3d->ofs[2];
+
+ if(ar->winx>ar->winy) z1= ar->winy*rv3d->dist/ar->winx;
+ else z1= rv3d->dist;
+ }
+ }
+ }
+ }
+
+ for(val=0; val<8; val++) {
+ if(ELEM4(val, 0, 3, 4, 7))
+ bb->vec[val][0]= -x1 - ofs[0];
+ else
+ bb->vec[val][0]= x1 - ofs[0];
+
+ if(ELEM4(val, 0, 1, 4, 5))
+ bb->vec[val][1]= -y1 - ofs[1];
+ else
+ bb->vec[val][1]= y1 - ofs[1];
+
+ if(val > 3)
+ bb->vec[val][2]= -z1 - ofs[2];
+ else
+ bb->vec[val][2]= z1 - ofs[2];
+ }
+
+ /* normals for plane equations */
+ CalcNormFloat(bb->vec[0], bb->vec[1], bb->vec[4], clip[0]);
+ CalcNormFloat(bb->vec[1], bb->vec[2], bb->vec[5], clip[1]);
+ CalcNormFloat(bb->vec[2], bb->vec[3], bb->vec[6], clip[2]);
+ CalcNormFloat(bb->vec[3], bb->vec[0], bb->vec[7], clip[3]);
+ CalcNormFloat(bb->vec[4], bb->vec[5], bb->vec[6], clip[4]);
+ CalcNormFloat(bb->vec[0], bb->vec[2], bb->vec[1], clip[5]);
+
+ /* then plane equations */
+ for(val=0; val<5; val++) {
+ clip[val][3]= - clip[val][0]*bb->vec[val][0] - clip[val][1]*bb->vec[val][1] - clip[val][2]*bb->vec[val][2];
+ }
+ clip[5][3]= - clip[5][0]*bb->vec[0][0] - clip[5][1]*bb->vec[0][1] - clip[5][2]*bb->vec[0][2];
+
+ /* create bounding box */
+ for(ar= sa->regionbase.first; ar; ar= ar->next) {
+ if(ar->regiontype==RGN_TYPE_WINDOW) {
+ RegionView3D *rv3d= ar->regiondata;
+
+ if(rv3d->viewlock) {
+ rv3d->rflag |= RV3D_CLIPPING;
+ memcpy(rv3d->clip, clip, sizeof(clip));
+ }
+ }
+ }
+ MEM_freeN(bb);
+}
+
/* sync ortho view of region to others, for view transforms */
static void view3d_boxview_sync(ScrArea *sa, ARegion *ar)
{
@@ -119,6 +200,7 @@
}
}
}
+ view3d_boxview_clip(sa);
}
/* for home, center etc */
@@ -138,6 +220,7 @@
}
}
}
+ view3d_boxview_clip(sa);
}
/* ************************** init for view ops **********************************/
@@ -487,7 +570,7 @@
else {
float dvec[3];
- window_to_3d(vod->ar, dvec, x-vod->oldx, y-vod->oldy);
+ window_to_3d_delta(vod->ar, dvec, x-vod->oldx, y-vod->oldy);
VecAddf(vod->rv3d->ofs, vod->rv3d->ofs, dvec);
if(vod->rv3d->viewlock)
@@ -575,7 +658,7 @@
/* Project cursor position into 3D space */
initgrabz(rv3d, tpos[0], tpos[1], tpos[2]);
- window_to_3d(ar, dvec, mouseloc[0]-vb[0]/2, mouseloc[1]-vb[1]/2);
+ window_to_3d_delta(ar, dvec, mouseloc[0]-vb[0]/2, mouseloc[1]-vb[1]/2);
/* Calculate view target position for dolly */
tvec[0] = -(tpos[0] + dvec[0]);
@@ -1141,7 +1224,7 @@
initgrabz(rv3d, -new_ofs[0], -new_ofs[1], -new_ofs[2]);
- window_to_3d(ar, dvec, (rect.xmin+rect.xmax-vb[0])/2, (rect.ymin+rect.ymax-vb[1])/2);
+ window_to_3d_delta(ar, dvec, (rect.xmin+rect.xmax-vb[0])/2, (rect.ymin+rect.ymax-vb[1])/2);
/* center the view to the center of the rectangle */
VecSubf(new_ofs, new_ofs, dvec);
}
@@ -1398,10 +1481,10 @@
initgrabz(rv3d, 0.0, 0.0, 0.0);
- if(viewnum == V3D_VIEW_PANRIGHT) window_to_3d(ar, vec, -32, 0);
- else if(viewnum == V3D_VIEW_PANLEFT) window_to_3d(ar, vec, 32, 0);
- else if(viewnum == V3D_VIEW_PANUP) window_to_3d(ar, vec, 0, -25);
@@ Diff output truncated at 10240 characters. @@
More information about the Bf-blender-cvs
mailing list