[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [49718] trunk/blender/source/blender/ editors/space_view3d/view3d_edit.c: support for border zooming out by using the middle mouse button, works in 2D views already
Campbell Barton
ideasman42 at gmail.com
Wed Aug 8 21:54:32 CEST 2012
Revision: 49718
http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=49718
Author: campbellbarton
Date: 2012-08-08 19:54:31 +0000 (Wed, 08 Aug 2012)
Log Message:
-----------
support for border zooming out by using the middle mouse button, works in 2D views already
Modified Paths:
--------------
trunk/blender/source/blender/editors/space_view3d/view3d_edit.c
Modified: trunk/blender/source/blender/editors/space_view3d/view3d_edit.c
===================================================================
--- trunk/blender/source/blender/editors/space_view3d/view3d_edit.c 2012-08-08 18:37:06 UTC (rev 49717)
+++ trunk/blender/source/blender/editors/space_view3d/view3d_edit.c 2012-08-08 19:54:31 UTC (rev 49718)
@@ -2542,10 +2542,12 @@
View3D *v3d = CTX_wm_view3d(C);
RegionView3D *rv3d = CTX_wm_region_view3d(C);
Scene *scene = CTX_data_scene(C);
+ int gesture_mode;
/* Zooms in on a border drawn by the user */
rcti rect;
- float dvec[3], vb[2], xscale, yscale, scale;
+ float dvec[3], vb[2], xscale, yscale;
+ float dist_range_min;
/* SMOOTHVIEW */
float new_dist;
@@ -2565,6 +2567,9 @@
rect.xmax = RNA_int_get(op->ptr, "xmax");
rect.ymax = RNA_int_get(op->ptr, "ymax");
+ /* check if zooming in/out view */
+ gesture_mode = RNA_int_get(op->ptr, "gesture_mode");
+
/* Get Z Depths, needed for perspective, nice for ortho */
bgl_get_mats(&mats);
draw_depth(scene, ar, v3d, NULL);
@@ -2608,13 +2613,13 @@
dvec[1] = p[1] - p_corner[1];
dvec[2] = p[2] - p_corner[2];
- new_dist = len_v3(dvec);
- if (new_dist <= v3d->near * 1.5f) new_dist = v3d->near * 1.5f;
-
new_ofs[0] = -p[0];
new_ofs[1] = -p[1];
new_ofs[2] = -p[2];
+ new_dist = len_v3(dvec);
+ dist_range_min = v3d->near * 1.5f;
+
}
else { /* othographic */
/* find the current window width and height */
@@ -2649,12 +2654,23 @@
/* work out the ratios, so that everything selected fits when we zoom */
xscale = ((rect.xmax - rect.xmin) / vb[0]);
yscale = ((rect.ymax - rect.ymin) / vb[1]);
- scale = (xscale >= yscale) ? xscale : yscale;
+ new_dist *= maxf(xscale, yscale);
/* zoom in as required, or as far as we can go */
- new_dist = ((new_dist * scale) >= 0.001f * v3d->grid) ? new_dist * scale : 0.001f * v3d->grid;
+ dist_range_min = 0.001f * v3d->grid;
}
+ if (gesture_mode == GESTURE_MODAL_OUT) {
+ sub_v3_v3v3(dvec, new_ofs, rv3d->ofs);
+ new_dist = rv3d->dist * (rv3d->dist / new_dist);
+ add_v3_v3v3(new_ofs, rv3d->ofs, dvec);
+ }
+
+ /* clamp after because we may have been zooming out */
+ if (new_dist < dist_range_min) {
+ new_dist = dist_range_min;
+ }
+
smooth_view(C, v3d, ar, NULL, NULL, new_ofs, NULL, &new_dist, NULL);
if (rv3d->viewlock & RV3D_BOXVIEW)
@@ -2694,11 +2710,11 @@
ot->flag = 0;
/* rna */
+ RNA_def_int(ot->srna, "gesture_mode", 0, INT_MIN, INT_MAX, "Gesture Mode", "", INT_MIN, INT_MAX);
RNA_def_int(ot->srna, "xmin", 0, INT_MIN, INT_MAX, "X Min", "", INT_MIN, INT_MAX);
RNA_def_int(ot->srna, "xmax", 0, INT_MIN, INT_MAX, "X Max", "", INT_MIN, INT_MAX);
RNA_def_int(ot->srna, "ymin", 0, INT_MIN, INT_MAX, "Y Min", "", INT_MIN, INT_MAX);
RNA_def_int(ot->srna, "ymax", 0, INT_MIN, INT_MAX, "Y Max", "", INT_MIN, INT_MAX);
-
}
/* sets the view to 1:1 camera/render-pixel */
More information about the Bf-blender-cvs
mailing list