Blender V4.3
view3d_navigate_fly.cc File Reference
#include "DNA_object_types.h"
#include "MEM_guardedalloc.h"
#include "BLI_math_matrix.h"
#include "BLI_math_rotation.h"
#include "BLI_rect.h"
#include "BLI_time.h"
#include "BKE_context.hh"
#include "BKE_lib_id.hh"
#include "BKE_report.hh"
#include "WM_api.hh"
#include "WM_types.hh"
#include "ED_screen.hh"
#include "ED_space_api.hh"
#include "ED_undo.hh"
#include "UI_resources.hh"
#include "GPU_immediate.hh"
#include "view3d_intern.hh"
#include "view3d_navigate.hh"
#include "BLI_strict_flags.h"

Go to the source code of this file.

Classes

struct  FlyInfo
 

Macros

#define FLY_ROTATE_FAC   10.0f /* More is faster. */
 
#define FLY_ZUP_CORRECT_FAC   0.1f /* Amount to correct per step. */
 
#define FLY_ZUP_CORRECT_ACCEL   0.05f /* Increase upright momentum each step. */
 
#define FLY_SMOOTH_FAC   20.0f /* Higher value less lag. */
 

Functions

Internal Fly Drawing
static int flyApply (bContext *C, FlyInfo *fly, bool is_confirm)
 
static void drawFlyPixel (const bContext *, ARegion *, void *arg)
 
Fly Operator
static int fly_invoke (bContext *C, wmOperator *op, const wmEvent *event)
 
static void fly_cancel (bContext *C, wmOperator *op)
 
static int fly_modal (bContext *C, wmOperator *op, const wmEvent *event)
 
void VIEW3D_OT_fly (wmOperatorType *ot)
 

Modal Key-map

enum  {
  FLY_MODAL_CANCEL = 1 , FLY_MODAL_CONFIRM , FLY_MODAL_ACCELERATE , FLY_MODAL_DECELERATE ,
  FLY_MODAL_PAN_ENABLE , FLY_MODAL_PAN_DISABLE , FLY_MODAL_DIR_FORWARD , FLY_MODAL_DIR_BACKWARD ,
  FLY_MODAL_DIR_LEFT , FLY_MODAL_DIR_RIGHT , FLY_MODAL_DIR_UP , FLY_MODAL_DIR_DOWN ,
  FLY_MODAL_AXIS_LOCK_X , FLY_MODAL_AXIS_LOCK_Z , FLY_MODAL_PRECISION_ENABLE , FLY_MODAL_PRECISION_DISABLE ,
  FLY_MODAL_FREELOOK_ENABLE , FLY_MODAL_FREELOOK_DISABLE , FLY_MODAL_SPEED
}
 
enum  eFlyPanState { FLY_AXISLOCK_STATE_OFF = 0 , FLY_AXISLOCK_STATE_IDLE = 1 , FLY_AXISLOCK_STATE_ACTIVE = 2 }
 
void fly_modal_keymap (wmKeyConfig *keyconf)
 

Internal Fly Logic

enum  { FLY_RUNNING = 0 , FLY_CANCEL = 1 , FLY_CONFIRM = 2 }
 
static bool initFlyInfo (bContext *C, FlyInfo *fly, wmOperator *op, const wmEvent *event)
 
static int flyEnd (bContext *C, FlyInfo *fly)
 
static void flyEvent (FlyInfo *fly, const wmEvent *event)
 
static void flyMoveCamera (bContext *C, FlyInfo *fly, const bool do_rotate, const bool do_translate, const bool is_confirm)
 

Detailed Description

Interactive fly navigation modal operator (flying around in space).

Defines VIEW3D_OT_fly modal operator.

Note
Similar logic to view3d_navigate_walk.cc changes here may apply there too.

Definition in file view3d_navigate_fly.cc.

Macro Definition Documentation

◆ FLY_ROTATE_FAC

#define FLY_ROTATE_FAC   10.0f /* More is faster. */

Referenced by flyApply().

◆ FLY_SMOOTH_FAC

#define FLY_SMOOTH_FAC   20.0f /* Higher value less lag. */

Referenced by flyApply().

◆ FLY_ZUP_CORRECT_ACCEL

#define FLY_ZUP_CORRECT_ACCEL   0.05f /* Increase upright momentum each step. */

Referenced by flyApply().

◆ FLY_ZUP_CORRECT_FAC

#define FLY_ZUP_CORRECT_FAC   0.1f /* Amount to correct per step. */

Referenced by flyApply().

Enumeration Type Documentation

◆ anonymous enum

anonymous enum
Enumerator
FLY_MODAL_CANCEL 
FLY_MODAL_CONFIRM 
FLY_MODAL_ACCELERATE 
FLY_MODAL_DECELERATE 
FLY_MODAL_PAN_ENABLE 
FLY_MODAL_PAN_DISABLE 
FLY_MODAL_DIR_FORWARD 
FLY_MODAL_DIR_BACKWARD 
FLY_MODAL_DIR_LEFT 
FLY_MODAL_DIR_RIGHT 
FLY_MODAL_DIR_UP 
FLY_MODAL_DIR_DOWN 
FLY_MODAL_AXIS_LOCK_X 
FLY_MODAL_AXIS_LOCK_Z 
FLY_MODAL_PRECISION_ENABLE 
FLY_MODAL_PRECISION_DISABLE 
FLY_MODAL_FREELOOK_ENABLE 
FLY_MODAL_FREELOOK_DISABLE 
FLY_MODAL_SPEED 

Definition at line 56 of file view3d_navigate_fly.cc.

◆ anonymous enum

anonymous enum

FlyInfo::state

Enumerator
FLY_RUNNING 
FLY_CANCEL 
FLY_CONFIRM 

Definition at line 294 of file view3d_navigate_fly.cc.

◆ eFlyPanState

Relative view axis locking - xlock, zlock.

Enumerator
FLY_AXISLOCK_STATE_OFF 

Disabled.

FLY_AXISLOCK_STATE_IDLE 

Enabled but not checking because mouse hasn't moved outside the margin since locking was checked an not needed when the mouse moves, locking is set to 2 so checks are done.

FLY_AXISLOCK_STATE_ACTIVE 

Mouse moved and checking needed, if no view altering is done its changed back to FLY_AXISLOCK_STATE_IDLE.

Definition at line 79 of file view3d_navigate_fly.cc.

Function Documentation

◆ drawFlyPixel()

◆ fly_cancel()

static void fly_cancel ( bContext * C,
wmOperator * op )
static

Definition at line 1084 of file view3d_navigate_fly.cc.

References wmOperator::customdata, FLY_CANCEL, flyEnd(), and FlyInfo::state.

Referenced by VIEW3D_OT_fly().

◆ fly_invoke()

◆ fly_modal()

◆ fly_modal_keymap()

◆ flyApply()

◆ flyEnd()

◆ flyEvent()

◆ flyMoveCamera()

static void flyMoveCamera ( bContext * C,
FlyInfo * fly,
const bool do_rotate,
const bool do_translate,
const bool is_confirm )
static

◆ initFlyInfo()

static bool initFlyInfo ( bContext * C,
FlyInfo * fly,
wmOperator * op,
const wmEvent * event )
static

Definition at line 300 of file view3d_navigate_fly.cc.

References FlyInfo::anim_playing, FlyInfo::axis, BKE_id_is_editable(), BKE_report(), BLI_rctf_size_x(), BLI_rctf_size_y(), BLI_time_now_seconds(), View3D::camera, FlyInfo::center_mval, Object::constraints, copy_m3_m4(), copy_v2_v2_int(), copy_v3_fl3(), CTX_data_expect_evaluated_depsgraph(), CTX_data_main(), CTX_data_scene(), CTX_wm_manager(), CTX_wm_region(), CTX_wm_region_view3d(), CTX_wm_view3d(), CTX_wm_window(), FlyInfo::depsgraph, FlyInfo::draw_handle_pixel, drawFlyPixel(), FlyInfo::dvec_prev, ED_region_draw_cb_activate(), ED_screen_animation_playing(), ED_view3d_calc_camera_border(), ED_view3d_cameracontrol_acquire(), ED_view3d_cameracontrol_object_get(), ED_view3d_offset_lock_check(), fabsf, ListBase::first, FLY_AXISLOCK_STATE_IDLE, FLY_AXISLOCK_STATE_OFF, FLY_RUNNING, FlyInfo::grid, Object::id, int, mul_m3_v3(), FlyInfo::mval, wmEvent::mval, FlyInfo::pan_view, RegionView3D::persp, FlyInfo::redraw, FlyInfo::region, REGION_DRAW_POST_PIXEL, wmOperator::reports, RegionView3D::rflag, RPT_ERROR, FlyInfo::rv3d, RV3D_CAMOB, RV3D_NAVIGATING, RV3D_PERSP, FlyInfo::scene, FlyInfo::speed, FlyInfo::state, FlyInfo::time_lastdraw, FlyInfo::time_lastwheel, TIMER, FlyInfo::timer, ARegion::type, FlyInfo::use_freelook, FlyInfo::use_precision, FlyInfo::v3d, FlyInfo::v3d_camera_control, RegionView3D::viewinv, FlyInfo::viewport_size, ARegion::winrct, ARegion::winx, ARegion::winy, WM_cursor_warp(), WM_event_timer_add(), FlyInfo::xlock, FlyInfo::xlock_momentum, rctf::xmin, rcti::xmin, rctf::ymin, rcti::ymin, zero_v3(), FlyInfo::zlock, and FlyInfo::zlock_momentum.

Referenced by fly_invoke().

◆ VIEW3D_OT_fly()