[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [23434] trunk/blender: fly mode back as a modal operator view3d.fly

Campbell Barton ideasman42 at gmail.com
Wed Sep 23 13:26:17 CEST 2009


Revision: 23434
          http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=23434
Author:   campbellbarton
Date:     2009-09-23 13:26:16 +0200 (Wed, 23 Sep 2009)

Log Message:
-----------
fly mode back as a modal operator view3d.fly
- access with the F key, Ctrl+Alt+F in editmode, View->Navigation menu
- camera, perspective & 4split (perspective view only)
- uses modal keymap, (same as 2.4x).
- bugfix since 2.4x, when flying upside down, turning left/right was inverted.
- bugfix for "Align Camera To View", was using deprecated v3d->ofs rather then rv3d->ofs, fixed for NDof fly too. checked v3d->ofs is only used in readfile.c

Todo
- Warping the cursor removed in 2.5, no way to place the cursor in the middle of the view.
- Adding keyframes while in flymode to record the path is missing.
- Not getting MMB mouse release events (used for pan). need to look into why.

Modified Paths:
--------------
    trunk/blender/release/ui/space_view3d.py
    trunk/blender/source/blender/editors/mesh/mesh_ops.c
    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

Modified: trunk/blender/release/ui/space_view3d.py
===================================================================
--- trunk/blender/release/ui/space_view3d.py	2009-09-23 09:30:48 UTC (rev 23433)
+++ trunk/blender/release/ui/space_view3d.py	2009-09-23 11:26:16 UTC (rev 23434)
@@ -136,6 +136,10 @@
 		
 		layout.item_floatO("view3d.zoom", "delta", 1.0, text="Zoom In")
 		layout.item_floatO("view3d.zoom", "delta", -1.0, text="Zoom Out")
+		
+		layout.itemS()
+		
+		layout.itemO("view3d.fly")
 
 class VIEW3D_MT_view_align(bpy.types.Menu):
 	__space_type__ = 'VIEW_3D'

Modified: trunk/blender/source/blender/editors/mesh/mesh_ops.c
===================================================================
--- trunk/blender/source/blender/editors/mesh/mesh_ops.c	2009-09-23 09:30:48 UTC (rev 23433)
+++ trunk/blender/source/blender/editors/mesh/mesh_ops.c	2009-09-23 11:26:16 UTC (rev 23434)
@@ -429,7 +429,7 @@
 	WM_keymap_add_item(keymap, "MESH_OT_edge_face_add", FKEY, KM_PRESS, 0, 0);
 	WM_keymap_add_item(keymap, "MESH_OT_duplicate_move", DKEY, KM_PRESS, KM_SHIFT, 0);
 	WM_keymap_add_item(keymap, "OBJECT_OT_mesh_add", AKEY, KM_PRESS, KM_SHIFT, 0);
-	WM_keymap_add_item(keymap, "MESH_OT_separate", PKEY, KM_PRESS, KM_SHIFT, 0);
+	WM_keymap_add_item(keymap, "MESH_OT_separate", PKEY, KM_PRESS, 0, 0);
 						/* use KM_RELEASE because same key is used for tweaks */
 	WM_keymap_add_item(keymap, "MESH_OT_dupli_extrude_cursor", LEFTMOUSE, KM_RELEASE, KM_CTRL, 0);
 	

Modified: trunk/blender/source/blender/editors/space_view3d/view3d_edit.c
===================================================================
--- trunk/blender/source/blender/editors/space_view3d/view3d_edit.c	2009-09-23 09:30:48 UTC (rev 23433)
+++ trunk/blender/source/blender/editors/space_view3d/view3d_edit.c	2009-09-23 11:26:16 UTC (rev 23434)
@@ -2338,7 +2338,7 @@
 
     if (use_sel) {
         QuatConj(q1); /* conj == inv for unit quat */
-        VecSubf(v3d->ofs, v3d->ofs, obofs);
+        VecSubf(rv3d->ofs, rv3d->ofs, obofs);
         QuatMulVecf(q1, rv3d->ofs);
         VecAddf(rv3d->ofs, rv3d->ofs, obofs);
     }

Modified: trunk/blender/source/blender/editors/space_view3d/view3d_intern.h
===================================================================
--- trunk/blender/source/blender/editors/space_view3d/view3d_intern.h	2009-09-23 09:30:48 UTC (rev 23433)
+++ trunk/blender/source/blender/editors/space_view3d/view3d_intern.h	2009-09-23 11:26:16 UTC (rev 23434)
@@ -124,6 +124,7 @@
 void VIEW3D_OT_setcameratoview(struct wmOperatorType *ot);
 void VIEW3D_OT_localview(struct wmOperatorType *ot);
 void VIEW3D_OT_game_start(struct wmOperatorType *ot);
+void VIEW3D_OT_fly(struct wmOperatorType *ot);
 
 
 int boundbox_clip(RegionView3D *rv3d, float obmat[][4], struct BoundBox *bb);
@@ -135,6 +136,8 @@
 void setwinmatrixview3d(ARegion *ar, View3D *v3d, rctf *rect);	/* rect: for picking */
 void setviewmatrixview3d(Scene *scene, View3D *v3d, RegionView3D *rv3d);
 
+void fly_modal_keymap(struct wmWindowManager *wm);
+
 /* view3d_buttons.c */
 void VIEW3D_OT_properties(struct wmOperatorType *ot);
 void view3d_buttons_register(struct ARegionType *art);

Modified: trunk/blender/source/blender/editors/space_view3d/view3d_ops.c
===================================================================
--- trunk/blender/source/blender/editors/space_view3d/view3d_ops.c	2009-09-23 09:30:48 UTC (rev 23433)
+++ trunk/blender/source/blender/editors/space_view3d/view3d_ops.c	2009-09-23 11:26:16 UTC (rev 23434)
@@ -85,6 +85,7 @@
 	WM_operatortype_append(VIEW3D_OT_drawtype);
 	WM_operatortype_append(VIEW3D_OT_localview);
 	WM_operatortype_append(VIEW3D_OT_game_start);
+	WM_operatortype_append(VIEW3D_OT_fly);
 	WM_operatortype_append(VIEW3D_OT_layers);
 	
 	WM_operatortype_append(VIEW3D_OT_properties);
@@ -123,6 +124,8 @@
 	WM_keymap_verify_item(keymap, "VIEW3D_OT_zoom", MIDDLEMOUSE, KM_PRESS, KM_CTRL, 0);
 	WM_keymap_verify_item(keymap, "VIEW3D_OT_view_center", PADPERIOD, KM_PRESS, 0, 0);
 	
+	WM_keymap_verify_item(keymap, "VIEW3D_OT_fly", FKEY, KM_PRESS, KM_ANY, 0);
+
 	WM_keymap_verify_item(keymap, "VIEW3D_OT_smoothview", TIMER1, KM_ANY, KM_ANY, 0);
 	
 	RNA_int_set(WM_keymap_add_item(keymap, "VIEW3D_OT_zoom", PADPLUSKEY, KM_PRESS, 0, 0)->ptr, "delta", 1);
@@ -218,5 +221,6 @@
 
 	transform_keymap_for_space(wm, keymap, SPACE_VIEW3D);
 
+	fly_modal_keymap(wm);
 }
 

Modified: trunk/blender/source/blender/editors/space_view3d/view3d_view.c
===================================================================
--- trunk/blender/source/blender/editors/space_view3d/view3d_view.c	2009-09-23 09:30:48 UTC (rev 23433)
+++ trunk/blender/source/blender/editors/space_view3d/view3d_view.c	2009-09-23 11:26:16 UTC (rev 23434)
@@ -56,9 +56,11 @@
 #include "BKE_object.h"
 #include "BKE_global.h"
 #include "BKE_main.h"
+#include "BKE_report.h"
 #include "BKE_scene.h"
 #include "BKE_screen.h"
 #include "BKE_utildefines.h"
+#include "BKE_depsgraph.h" /* for fly mode updating */
 
 #include "RE_pipeline.h"	// make_stars
 
@@ -384,26 +386,31 @@
 	ot->poll= ED_operator_view3d_active;
 }
 
-static int view3d_setcameratoview_exec(bContext *C, wmOperator *op)
+static void setcameratoview3d(View3D *v3d, RegionView3D *rv3d, Object *ob)
 {
-	View3D *v3d = CTX_wm_view3d(C);
-	RegionView3D *rv3d= CTX_wm_region_view3d(C);
-	Object *ob;
 	float dvec[3];
 	
-	ob= v3d->camera;
 	dvec[0]= rv3d->dist*rv3d->viewinv[2][0];
 	dvec[1]= rv3d->dist*rv3d->viewinv[2][1];
 	dvec[2]= rv3d->dist*rv3d->viewinv[2][2];
 	
 	VECCOPY(ob->loc, dvec);
-	VecSubf(ob->loc, ob->loc, v3d->ofs);
+	VecSubf(ob->loc, ob->loc, rv3d->ofs);
 	rv3d->viewquat[0]= -rv3d->viewquat[0];
 
 	QuatToEul(rv3d->viewquat, ob->rot);
 	rv3d->viewquat[0]= -rv3d->viewquat[0];
 	
 	ob->recalc= OB_RECALC_OB;
+}
+
+
+static int view3d_setcameratoview_exec(bContext *C, wmOperator *op)
+{
+	View3D *v3d = CTX_wm_view3d(C);
+	RegionView3D *rv3d= CTX_wm_region_view3d(C);
+
+	setcameratoview3d(v3d, rv3d, v3d->camera);
 	
 	WM_event_add_notifier(C, NC_OBJECT|ND_TRANSFORM, CTX_data_scene(C));
 	
@@ -1572,6 +1579,802 @@
 	ot->poll= game_engine_poll;
 }
 
+
+/* NOTE: these defines are saved in keymap files, do not change values but just add new ones */
+#define FLY_MODAL_CANCEL			1
+#define FLY_MODAL_CONFIRM			2
+#define FLY_MODAL_ACCELERATE 		3
+#define FLY_MODAL_DECELERATE		4
+#define FLY_MODAL_PAN_ENABLE		5
+#define FLY_MODAL_PAN_DISABLE		6
+#define FLY_MODAL_DIR_FORWARD		7
+#define FLY_MODAL_DIR_BACKWARD		8
+#define FLY_MODAL_DIR_LEFT			9
+#define FLY_MODAL_DIR_RIGHT			10
+#define FLY_MODAL_DIR_UP			11
+#define FLY_MODAL_DIR_DOWN			12
+#define FLY_MODAL_AXIS_LOCK_X		13
+#define FLY_MODAL_AXIS_LOCK_Z		14
+#define FLY_MODAL_PRECISION_ENABLE	15
+#define FLY_MODAL_PRECISION_DISABLE	16
+
+/* called in transform_ops.c, on each regeneration of keymaps  */
+void fly_modal_keymap(wmWindowManager *wm)
+{
+	static EnumPropertyItem modal_items[] = {
+	{FLY_MODAL_CANCEL,	"CANCEL", 0, "Cancel", ""},
+	{FLY_MODAL_CONFIRM,	"CONFIRM", 0, "Confirm", ""},
+	{FLY_MODAL_ACCELERATE, "ACCELERATE", 0, "Accelerate", ""},
+	{FLY_MODAL_DECELERATE, "DECELERATE", 0, "Decelerate", ""},
+
+	{FLY_MODAL_PAN_ENABLE,	"PAN_ENABLE", 0, "Pan Enable", ""},
+	{FLY_MODAL_PAN_DISABLE,	"PAN_DISABLE", 0, "Pan Disable", ""},
+
+	{FLY_MODAL_DIR_FORWARD,	"FORWARD", 0, "Fly Forward", ""},
+	{FLY_MODAL_DIR_BACKWARD,"BACKWARD", 0, "Fly Backward", ""},
+	{FLY_MODAL_DIR_LEFT,	"LEFT", 0, "Fly Left", ""},
+	{FLY_MODAL_DIR_RIGHT,	"RIGHT", 0, "Fly Right", ""},
+	{FLY_MODAL_DIR_UP,		"UP", 0, "Fly Up", ""},
+	{FLY_MODAL_DIR_DOWN,	"DOWN", 0, "Fly Down", ""},
+
+	{FLY_MODAL_AXIS_LOCK_X,	"AXIS_LOCK_X", 0, "X Axis Correction", "X axis correction (toggle)"},
+	{FLY_MODAL_AXIS_LOCK_Z,	"AXIS_LOCK_Z", 0, "X Axis Correction", "Z axis correction (toggle)"},
+
+	{FLY_MODAL_PRECISION_ENABLE,	"PRECISION_ENABLE", 0, "Precision Enable", ""},
+	{FLY_MODAL_PRECISION_DISABLE,	"PRECISION_DISABLE", 0, "Precision Disable", ""},
+
+	{0, NULL, 0, NULL, NULL}};
+
+	wmKeyMap *keymap= WM_modalkeymap_get(wm, "View3D Fly Modal");
+
+	/* this function is called for each spacetype, only needs to add map once */
+	if(keymap) return;
+
+	keymap= WM_modalkeymap_add(wm, "View3D Fly Modal", modal_items);
+
+	/* items for modal map */
+	WM_modalkeymap_add_item(keymap, ESCKEY,    KM_PRESS, KM_ANY, 0, FLY_MODAL_CANCEL);
+	WM_modalkeymap_add_item(keymap, RIGHTMOUSE, KM_ANY, KM_ANY, 0, FLY_MODAL_CANCEL);
+
+	WM_modalkeymap_add_item(keymap, LEFTMOUSE, KM_ANY, KM_ANY, 0, FLY_MODAL_CONFIRM);
+	WM_modalkeymap_add_item(keymap, RETKEY, KM_PRESS, KM_ANY, 0, FLY_MODAL_CONFIRM);
+	WM_modalkeymap_add_item(keymap, PADENTER, KM_PRESS, KM_ANY, 0, FLY_MODAL_CONFIRM);
+
+	WM_modalkeymap_add_item(keymap, PADPLUSKEY, KM_PRESS, 0, 0, FLY_MODAL_ACCELERATE);
+	WM_modalkeymap_add_item(keymap, PADMINUS, KM_PRESS, 0, 0, FLY_MODAL_DECELERATE);
+	WM_modalkeymap_add_item(keymap, WHEELUPMOUSE, KM_PRESS, 0, 0, FLY_MODAL_ACCELERATE);
+	WM_modalkeymap_add_item(keymap, WHEELDOWNMOUSE, KM_PRESS, 0, 0, FLY_MODAL_DECELERATE);
+
+	WM_modalkeymap_add_item(keymap, MIDDLEMOUSE, KM_PRESS, KM_ANY, 0, FLY_MODAL_PAN_ENABLE);
+	WM_modalkeymap_add_item(keymap, MIDDLEMOUSE, KM_RELEASE, KM_ANY, 0, FLY_MODAL_PAN_DISABLE); /* XXX - Bug in the event system, middle mouse release doesnt work */
+
+	/* WASD */
+	WM_modalkeymap_add_item(keymap, WKEY, KM_PRESS, 0, 0, FLY_MODAL_DIR_FORWARD);
+	WM_modalkeymap_add_item(keymap, SKEY, KM_PRESS, 0, 0, FLY_MODAL_DIR_BACKWARD);
+	WM_modalkeymap_add_item(keymap, AKEY, KM_PRESS, 0, 0, FLY_MODAL_DIR_LEFT);
+	WM_modalkeymap_add_item(keymap, DKEY, KM_PRESS, 0, 0, FLY_MODAL_DIR_RIGHT);
+	WM_modalkeymap_add_item(keymap, RKEY, KM_PRESS, 0, 0, FLY_MODAL_DIR_UP);
+	WM_modalkeymap_add_item(keymap, FKEY, KM_PRESS, 0, 0, FLY_MODAL_DIR_DOWN);
+
+	WM_modalkeymap_add_item(keymap, XKEY, KM_PRESS, 0, 0, FLY_MODAL_AXIS_LOCK_X);
+	WM_modalkeymap_add_item(keymap, ZKEY, KM_PRESS, 0, 0, FLY_MODAL_AXIS_LOCK_Z);
+
+	WM_modalkeymap_add_item(keymap, LEFTSHIFTKEY, KM_PRESS, KM_ANY, 0, FLY_MODAL_PRECISION_ENABLE);
+	WM_modalkeymap_add_item(keymap, LEFTSHIFTKEY, KM_RELEASE, KM_ANY, 0, FLY_MODAL_PRECISION_DISABLE);
+
+	/* assign map to operators */
+	WM_modalkeymap_assign(keymap, "VIEW3D_OT_fly");
+
+}
+
+typedef struct FlyInfo {
+	/* context stuff */
+	RegionView3D *rv3d;
+	View3D *v3d;
+	ARegion *ar;
+	Scene *scene;
+
+	wmTimer *timer; /* needed for redraws */
+
+	short state;
+	short use_precision;
+	short redraw;
+	short mval[2];
+
+	/* fly state state */

@@ Diff output truncated at 10240 characters. @@




More information about the Bf-blender-cvs mailing list