[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 08:44:08 CEST 2009


The key shortcut used is F+(ANY Modifiers), so I didnt add in a
special test for Ctrl+Alt+F and F, Just noticed it worked in mesh
editmode  with Ctrl+Shift+F since F and Shift+F are overridden by mesh
operations.

Will make this like 2.4 to avoid confusion.

On Wed, Sep 23, 2009 at 10:59 PM, joe <joeedh at gmail.com> wrote:
> I thought changing hotkeys in different modes is something we're
> supposed to avoid?
>
> Joe
>
> On Wed, Sep 23, 2009 at 9:11 PM, Campbell Barton <ideasman42 at gmail.com> wrote:
>> 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
>> _______________________________________________
>> 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