40 {0,
nullptr, 0,
nullptr,
nullptr},
69 const float zoomfac_new =
clamp_f(
73 if (zoom_xy !=
nullptr) {
75 rctf camera_frame_old;
76 rctf camera_frame_new;
78 const float pt_src[2] = {
float(zoom_xy[0]),
float(zoom_xy[1])};
98 rv3d->
camdx += delta_px[0] / (region->winx * zoomfac_px);
99 rv3d->
camdy += delta_px[1] / (region->winy * zoomfac_px);
116 const float dist_new = rv3d->
dist * dfac;
118 if (zoom_xy !=
nullptr) {
128 xy_delta[0] =
float(((zoom_xy[0] - region->winrct.xmin) * 2) - region->winx) / 2.0f;
129 xy_delta[1] =
float(((zoom_xy[1] - region->winrct.ymin) * 2) - region->winy) / 2.0f;
141 rv3d->
dist = dist_new;
147 rv3d->
dist = dist_new;
153 const bool zoom_invert,
154 const bool zoom_invert_force,
155 const int xy_curr[2],
156 const int xy_init[2],
158 const float val_orig,
159 double *r_timer_lastdraw)
165 float time_step =
float(time - *r_timer_lastdraw);
169 fac =
float(xy_init[0] - xy_curr[0]);
172 fac =
float(xy_init[1] - xy_curr[1]);
177 if (zoom_invert != zoom_invert_force) {
181 zfac = 1.0f + ((fac / 20.0f) * time_step);
182 *r_timer_lastdraw =
time;
195 if (zoom_invert_force) {
196 std::swap(len_new, len_old);
199 zfac = val_orig * (len_old /
max_ff(len_new, 1.0f)) / val;
214 if (zoom_invert != zoom_invert_force) {
215 std::swap(len_new, len_old);
218 zfac = val_orig * (2.0f * ((len_new /
max_ff(len_old, 1.0f)) - 1.0f) + 1.0f) / val;
226 const bool zoom_invert,
227 const bool zoom_invert_force,
228 const int xy_curr[2],
229 const int xy_init[2],
230 const int xy_offset[2],
232 const float val_orig,
233 double *r_timer_lastdraw)
235 const int xy_curr_offset[2] = {
236 xy_curr[0] + xy_offset[0],
237 xy_curr[1] + xy_offset[1],
239 const int xy_init_offset[2] = {
240 xy_init[0] + xy_offset[0],
241 xy_init[1] + xy_offset[1],
257 const bool zoom_invert,
258 const bool zoom_to_pos)
275 if (!
ELEM(zfac, 1.0f, 0.0f)) {
292 const bool zoom_invert,
293 const bool zoom_to_pos)
312 const float zfac_min = dist_range[0] / vod->
rv3d->
dist;
313 const float zfac_max = dist_range[1] / vod->
rv3d->
dist;
314 CLAMP(zfac, zfac_min, zfac_max);
334 const bool zoom_invert)
353 bool use_autokey =
false;
356 switch (event_code) {
391 const int zoom_xy[2])
393 View3D *v3d =
static_cast<View3D *
>(area->spacedata.first);
404 const float step = 1.2f;
409 if (rv3d->
dist < dist_range[1]) {
415 const float step = 1.0f / 1.2f;
420 if (rv3d->
dist > dist_range[0]) {
444 View3D *v3d =
static_cast<View3D *
>(area->spacedata.first);
451 const int *zoom_xy =
nullptr;
453 if (do_zoom_to_mouse_pos) {
458 zoom_xy = zoom_xy_buf;
492 do_zoom_to_mouse_pos ?
xy :
nullptr);
Depsgraph * CTX_data_ensure_evaluated_depsgraph(const bContext *C)
ScrArea * CTX_wm_area(const bContext *C)
wmWindow * CTX_wm_window(const bContext *C)
Scene * CTX_data_scene(const bContext *C)
ARegion * CTX_wm_region(const bContext *C)
wmWindowManager * CTX_wm_manager(const bContext *C)
float BKE_screen_view3d_zoom_from_fac(float zoomfac)
float BKE_screen_view3d_zoom_to_fac(float camzoom)
MINLINE float max_ff(float a, float b)
MINLINE float clamp_f(float value, float min, float max)
MINLINE float len_v2v2_int(const int v1[2], const int v2[2])
MINLINE void copy_v3_v3(float r[3], const float a[3])
MINLINE void negate_v3_v3(float r[3], const float a[3])
MINLINE void add_v3_v3v3(float r[3], const float a[3], const float b[3])
MINLINE void negate_v3(float r[3])
MINLINE void sub_v2_v2v2(float r[2], const float a[2], const float b[2])
MINLINE void madd_v3_v3v3fl(float r[3], const float a[3], const float b[3], float f)
void BLI_rctf_translate(struct rctf *rect, float x, float y)
void BLI_rctf_transform_pt_v(const rctf *dst, const rctf *src, float xy_dst[2], const float xy_src[2])
BLI_INLINE int BLI_rcti_cent_y(const struct rcti *rct)
BLI_INLINE int BLI_rcti_cent_x(const struct rcti *rct)
Platform independent time functions.
double BLI_time_now_seconds(void)
#define RV3D_CAMZOOM_MIN_FACTOR
#define RV3D_LOCK_FLAGS(rv3d)
#define RV3D_CAMZOOM_MAX_FACTOR
bScreen * ED_screen_animation_playing(const wmWindowManager *wm)
void ED_region_tag_redraw(ARegion *region)
bool ED_view3d_camera_lock_sync(const Depsgraph *depsgraph, View3D *v3d, RegionView3D *rv3d)
void ED_view3d_dist_range_get(const View3D *v3d, float r_dist_range[2])
void ED_view3d_win_to_delta(const ARegion *region, const float xy_delta[2], float zfac, float r_out[3])
float ED_view3d_calc_zfac(const RegionView3D *rv3d, const float co[3])
bool ED_view3d_camera_lock_check(const View3D *v3d, const RegionView3D *rv3d)
void ED_view3d_calc_camera_border(const Scene *scene, const Depsgraph *depsgraph, const ARegion *region, const View3D *v3d, const RegionView3D *rv3d, bool no_shift, rctf *r_viewborder)
bool ED_view3d_camera_lock_autokey(View3D *v3d, RegionView3D *rv3d, bContext *C, bool do_rotate, bool do_translate)
bool ED_view3d_camera_lock_undo_grouped_push(const char *str, const View3D *v3d, const RegionView3D *rv3d, bContext *C)
const Depsgraph * depsgraph
draw_view in_light_buf[] float
PropertyRNA * RNA_struct_find_property(PointerRNA *ptr, const char *identifier)
bool RNA_property_is_set(PointerRNA *ptr, PropertyRNA *prop)
int RNA_property_int_get(PointerRNA *ptr, PropertyRNA *prop)
int RNA_int_get(PointerRNA *ptr, const char *name)
bool RNA_struct_property_is_set(PointerRNA *ptr, const char *identifier)
bool RNA_boolean_get(PointerRNA *ptr, const char *name)
struct ViewOpsData::@543 init
eViewOpsFlag viewops_flag
struct ViewOpsData::@544 prev
bool(* poll)(bContext *C) ATTR_WARN_UNUSED_RESULT
int(* modal)(bContext *C, wmOperator *op, const wmEvent *event) ATTR_WARN_UNUSED_RESULT
int(* invoke)(bContext *C, wmOperator *op, const wmEvent *event) ATTR_WARN_UNUSED_RESULT
int(* exec)(bContext *C, wmOperator *op) ATTR_WARN_UNUSED_RESULT
void(* cancel)(bContext *C, wmOperator *op)
struct wmOperatorType * type
void view3d_boxview_sync(ScrArea *area, ARegion *region)
void view3d_navigate_cancel_fn(bContext *C, wmOperator *op)
void view3d_operator_properties_common(wmOperatorType *ot, const enum eV3D_OpPropFlag flag)
int view3d_navigate_modal_fn(bContext *C, wmOperator *op, const wmEvent *event)
int view3d_navigate_invoke_impl(bContext *C, wmOperator *op, const wmEvent *event, const ViewOpsType *nav_type)
bool view3d_zoom_or_dolly_poll(bContext *C)
@ VIEWOPS_FLAG_DEPTH_NAVIGATE
@ VIEWOPS_FLAG_ZOOM_TO_MOUSE
@ VIEWROT_MODAL_SWITCH_ROTATE
@ VIEWROT_MODAL_SWITCH_MOVE
@ V3D_OP_PROP_USE_MOUSE_INIT
static int viewzoom_invoke_impl(bContext *C, ViewOpsData *vod, const wmEvent *event, PointerRNA *ptr)
const ViewOpsType ViewOpsType_zoom
static int viewzoom_modal_impl(bContext *C, ViewOpsData *vod, const eV3D_OpEvent event_code, const int xy[2])
static void viewzoom_apply(ViewOpsData *vod, const int xy[2], const eViewZoom_Style viewzoom, const bool zoom_invert)
static void view_zoom_apply_step(bContext *C, const Depsgraph *depsgraph, Scene *scene, ScrArea *area, ARegion *region, const int delta, const int zoom_xy[2])
static void viewzoom_apply_3d(ViewOpsData *vod, const int xy[2], const eViewZoom_Style viewzoom, const bool zoom_invert, const bool zoom_to_pos)
static void view_zoom_to_window_xy_camera(Scene *scene, const Depsgraph *depsgraph, View3D *v3d, ARegion *region, float dfac, const int zoom_xy[2])
static float viewzoom_scale_value(const rcti *winrct, const eViewZoom_Style viewzoom, const bool zoom_invert, const bool zoom_invert_force, const int xy_curr[2], const int xy_init[2], const float val, const float val_orig, double *r_timer_lastdraw)
static int viewzoom_exec(bContext *C, wmOperator *op)
void viewzoom_modal_keymap(wmKeyConfig *keyconf)
static void viewzoom_apply_camera(ViewOpsData *vod, const int xy[2], const eViewZoom_Style viewzoom, const bool zoom_invert, const bool zoom_to_pos)
static float viewzoom_scale_value_offset(const rcti *winrct, const eViewZoom_Style viewzoom, const bool zoom_invert, const bool zoom_invert_force, const int xy_curr[2], const int xy_init[2], const int xy_offset[2], const float val, const float val_orig, double *r_timer_lastdraw)
void VIEW3D_OT_zoom(wmOperatorType *ot)
static void view_zoom_to_window_xy_3d(ARegion *region, float dfac, const int zoom_xy[2])
static int viewzoom_invoke(bContext *C, wmOperator *op, const wmEvent *event)
wmKeyMap * WM_modalkeymap_ensure(wmKeyConfig *keyconf, const char *idname, const EnumPropertyItem *items)
void WM_modalkeymap_assign(wmKeyMap *km, const char *opname)
wmKeyMap * WM_modalkeymap_find(wmKeyConfig *keyconf, const char *idname)
wmTimer * WM_event_timer_add(wmWindowManager *wm, wmWindow *win, const int event_type, const double time_step)