[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [58398] trunk/blender/source/blender: patch [#36000] View lock offset (allow panning when the view is locked)
Campbell Barton
ideasman42 at gmail.com
Fri Jul 19 12:54:02 CEST 2013
Revision: 58398
http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=58398
Author: campbellbarton
Date: 2013-07-19 10:54:02 +0000 (Fri, 19 Jul 2013)
Log Message:
-----------
patch [#36000] View lock offset (allow panning when the view is locked)
own patch
Modified Paths:
--------------
trunk/blender/source/blender/editors/space_view3d/view3d_edit.c
trunk/blender/source/blender/editors/space_view3d/view3d_intern.h
trunk/blender/source/blender/editors/space_view3d/view3d_ops.c
trunk/blender/source/blender/editors/space_view3d/view3d_view.c
trunk/blender/source/blender/makesdna/DNA_view3d_types.h
Modified: trunk/blender/source/blender/editors/space_view3d/view3d_edit.c
===================================================================
--- trunk/blender/source/blender/editors/space_view3d/view3d_edit.c 2013-07-19 10:51:54 UTC (rev 58397)
+++ trunk/blender/source/blender/editors/space_view3d/view3d_edit.c 2013-07-19 10:54:02 UTC (rev 58398)
@@ -1009,6 +1009,14 @@
return 0;
}
+static int view3d_lock_poll(bContext *C)
+{
+ View3D *v3d = CTX_wm_view3d(C);
+ RegionView3D *rv3d = CTX_wm_region_view3d(C);
+
+ return ED_view3d_offset_lock_check(v3d, rv3d);
+}
+
static int viewrotate_cancel(bContext *C, wmOperator *op)
{
viewops_data_free(C, op);
@@ -1537,7 +1545,11 @@
static void viewmove_apply(ViewOpsData *vod, int x, int y)
{
- if ((vod->rv3d->persp == RV3D_CAMOB) && !ED_view3d_camera_lock_check(vod->v3d, vod->rv3d)) {
+ if (ED_view3d_offset_lock_check(vod->v3d, vod->rv3d)) {
+ vod->rv3d->ofs_lock[0] -= ((vod->oldx - x) * 2.0f) / (float)vod->ar->winx;
+ vod->rv3d->ofs_lock[1] -= ((vod->oldy - y) * 2.0f) / (float)vod->ar->winy;
+ }
+ else if ((vod->rv3d->persp == RV3D_CAMOB) && !ED_view3d_camera_lock_check(vod->v3d, vod->rv3d)) {
const float zoomfac = BKE_screen_view3d_zoom_to_fac((float)vod->rv3d->camzoom) * 2.0f;
vod->rv3d->camdx += (vod->oldx - x) / (vod->ar->winx * zoomfac);
vod->rv3d->camdy += (vod->oldy - y) / (vod->ar->winy * zoomfac);
@@ -1614,8 +1626,6 @@
{
ViewOpsData *vod;
- VIEW3D_OP_OFS_LOCK_TEST(C, op);
-
/* makes op->customdata */
viewops_data_create(C, op, event);
vod = op->customdata;
@@ -2792,6 +2802,32 @@
ot->flag = 0;
}
+static int view3d_center_lock_exec(bContext *C, wmOperator *UNUSED(op)) /* was view3d_home() in 2.4x */
+{
+ RegionView3D *rv3d = CTX_wm_region_view3d(C);
+
+ zero_v2(rv3d->ofs_lock);
+
+ WM_event_add_notifier(C, NC_SPACE | ND_SPACE_VIEW3D, CTX_wm_view3d(C));
+
+ return OPERATOR_FINISHED;
+}
+
+void VIEW3D_OT_view_center_lock(wmOperatorType *ot)
+{
+ /* identifiers */
+ ot->name = "View Lock Center";
+ ot->description = "Center the view lock offset";
+ ot->idname = "VIEW3D_OT_view_center_lock";
+
+ /* api callbacks */
+ ot->exec = view3d_center_lock_exec;
+ ot->poll = view3d_lock_poll;
+
+ /* flags */
+ ot->flag = 0;
+}
+
/* ********************* Set render border operator ****************** */
static int render_border_exec(bContext *C, wmOperator *op)
Modified: trunk/blender/source/blender/editors/space_view3d/view3d_intern.h
===================================================================
--- trunk/blender/source/blender/editors/space_view3d/view3d_intern.h 2013-07-19 10:51:54 UTC (rev 58397)
+++ trunk/blender/source/blender/editors/space_view3d/view3d_intern.h 2013-07-19 10:54:02 UTC (rev 58398)
@@ -89,6 +89,7 @@
void VIEW3D_OT_view_center_cursor(struct wmOperatorType *ot);
void VIEW3D_OT_view_center_pick(struct wmOperatorType *ot);
void VIEW3D_OT_view_center_camera(struct wmOperatorType *ot);
+void VIEW3D_OT_view_center_lock(struct wmOperatorType *ot);
void VIEW3D_OT_view_pan(struct wmOperatorType *ot);
void VIEW3D_OT_view_persportho(struct wmOperatorType *ot);
void VIEW3D_OT_background_image_add(struct wmOperatorType *ot);
Modified: trunk/blender/source/blender/editors/space_view3d/view3d_ops.c
===================================================================
--- trunk/blender/source/blender/editors/space_view3d/view3d_ops.c 2013-07-19 10:51:54 UTC (rev 58397)
+++ trunk/blender/source/blender/editors/space_view3d/view3d_ops.c 2013-07-19 10:54:02 UTC (rev 58398)
@@ -148,6 +148,7 @@
WM_operatortype_append(VIEW3D_OT_view_center_cursor);
WM_operatortype_append(VIEW3D_OT_view_center_pick);
WM_operatortype_append(VIEW3D_OT_view_center_camera);
+ WM_operatortype_append(VIEW3D_OT_view_center_lock);
WM_operatortype_append(VIEW3D_OT_select);
WM_operatortype_append(VIEW3D_OT_select_border);
WM_operatortype_append(VIEW3D_OT_clip_border);
@@ -244,6 +245,7 @@
WM_keymap_add_item(keymap, "VIEW3D_OT_zoom_camera_1_to_1", PADENTER, KM_PRESS, KM_SHIFT, 0);
WM_keymap_add_item(keymap, "VIEW3D_OT_view_center_camera", HOMEKEY, KM_PRESS, 0, 0); /* only with camera view */
+ WM_keymap_add_item(keymap, "VIEW3D_OT_view_center_lock", HOMEKEY, KM_PRESS, 0, 0); /* only with lock view */
WM_keymap_add_item(keymap, "VIEW3D_OT_view_center_cursor", HOMEKEY, KM_PRESS, KM_ALT, 0);
WM_keymap_add_item(keymap, "VIEW3D_OT_view_center_pick", FKEY, KM_PRESS, KM_ALT, 0);
Modified: trunk/blender/source/blender/editors/space_view3d/view3d_view.c
===================================================================
--- trunk/blender/source/blender/editors/space_view3d/view3d_view.c 2013-07-19 10:51:54 UTC (rev 58397)
+++ trunk/blender/source/blender/editors/space_view3d/view3d_view.c 2013-07-19 10:54:02 UTC (rev 58398)
@@ -847,6 +847,9 @@
}
}
else {
+ bool use_lock_ofs = false;
+
+
/* should be moved to better initialize later on XXX */
if (rv3d->viewlock)
ED_view3d_lock(rv3d);
@@ -866,15 +869,34 @@
}
}
translate_m4(rv3d->viewmat, -vec[0], -vec[1], -vec[2]);
+ use_lock_ofs = true;
}
else if (v3d->ob_centre_cursor) {
float vec[3];
copy_v3_v3(vec, give_cursor(scene, v3d));
translate_m4(rv3d->viewmat, -vec[0], -vec[1], -vec[2]);
+ use_lock_ofs = true;
}
else {
translate_m4(rv3d->viewmat, rv3d->ofs[0], rv3d->ofs[1], rv3d->ofs[2]);
}
+
+ /* lock offset */
+ if (use_lock_ofs) {
+ float persmat[4][4], persinv[4][4];
+ float vec[3];
+
+ /* we could calculate the real persmat/persinv here
+ * but it would be unreliable so better to later */
+ mul_m4_m4m4(persmat, rv3d->winmat, rv3d->viewmat);
+ invert_m4_m4(persinv, persmat);
+
+ mul_v2_v2fl(vec, rv3d->ofs_lock, rv3d->is_persp ? rv3d->dist : 1.0f);
+ vec[2] = 0.0f;
+ mul_mat3_m4_v3(persinv, vec);
+ translate_m4(rv3d->viewmat, vec[0], vec[1], vec[2]);
+ }
+ /* end lock offset */
}
}
Modified: trunk/blender/source/blender/makesdna/DNA_view3d_types.h
===================================================================
--- trunk/blender/source/blender/makesdna/DNA_view3d_types.h 2013-07-19 10:51:54 UTC (rev 58397)
+++ trunk/blender/source/blender/makesdna/DNA_view3d_types.h 2013-07-19 10:54:02 UTC (rev 58398)
@@ -131,6 +131,7 @@
char viewlock;
char viewlock_quad; /* options for quadview (store while out of quad view) */
char pad[3];
+ float ofs_lock[2]; /* normalized offset for locked view: (-1, -1) bottom left, (1, 1) upper right */
short twdrawflag;
short rflag;
More information about the Bf-blender-cvs
mailing list