[Bf-committers] [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
Thu Sep 24 05:11:49 CEST 2009


In 2.4x its Shift+F, but thats only because F was face select mode
thats been removed for a number of 2.4x releases.

Shift+F is scanfill in editmode, so either fly mode has no keybinding
in editmode (like in 2.4x), or both Object mode and editmode are
Ctrl+Shift+F as you suggest.

At the moment I'm unsure what we are supposed to do with keys, is the
aim to follow 2.4x exactly?

Would be good to be more clear on this to discussions every time some
function is added back (discussion is fine but rather on a per-key
basis if it can be helped :) ).


On Wed, Sep 23, 2009 at 4:56 PM, Shaul Kedem <shaul.kedem at gmail.com> wrote:
> +1
>
> On Wed, Sep 23, 2009 at 6:56 PM, joe <joeedh at gmail.com> wrote:
>> Why not use ctrl-alt-f everywhere?
>>
>> Joe
>>
>> On Wed, Sep 23, 2009 at 5:26 AM, Campbell Barton <ideasman42 at gmail.com> wrote:
>>> 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. @@
>>>
>>> _______________________________________________
>>> Bf-blender-cvs mailing list
>>> Bf-blender-cvs at blender.org
>>> http://lists.blender.org/mailman/listinfo/bf-blender-cvs
>>>
>> _______________________________________________
>> Bf-committers mailing list
>> Bf-committers at blender.org
>> http://lists.blender.org/mailman/listinfo/bf-committers
>>
> _______________________________________________
> Bf-committers mailing list
> Bf-committers at blender.org
> http://lists.blender.org/mailman/listinfo/bf-committers
>



-- 
- Campbell


More information about the Bf-committers mailing list