[Bf-blender-cvs] [1963ad52cea] master: Cleanup: Split View3D navigation code into specific compilation units
Germano Cavalcante
noreply at git.blender.org
Thu Feb 3 14:15:16 CET 2022
Commit: 1963ad52cea20834505bf899ebac9bee0fccd6da
Author: Germano Cavalcante
Date: Mon Jan 31 13:37:04 2022 -0300
Branches: master
https://developer.blender.org/rB1963ad52cea20834505bf899ebac9bee0fccd6da
Cleanup: Split View3D navigation code into specific compilation units
The view3d_edit.c file is already getting big (5436 lines) and mixes
operators of different uses.
Splitting the code makes it easier to read and simplifies the
implementation of new features.
Differential Revision: https://developer.blender.org/D13976
===================================================================
M source/blender/editors/space_view3d/CMakeLists.txt
M source/blender/editors/space_view3d/space_view3d.c
M source/blender/editors/space_view3d/view3d_edit.c
M source/blender/editors/space_view3d/view3d_intern.h
A source/blender/editors/space_view3d/view3d_navigate.c
A source/blender/editors/space_view3d/view3d_navigate.h
A source/blender/editors/space_view3d/view3d_navigate_dolly.c
M source/blender/editors/space_view3d/view3d_navigate_fly.c
A source/blender/editors/space_view3d/view3d_navigate_move.c
A source/blender/editors/space_view3d/view3d_navigate_ndof.c
A source/blender/editors/space_view3d/view3d_navigate_roll.c
A source/blender/editors/space_view3d/view3d_navigate_rotate.c
A source/blender/editors/space_view3d/view3d_navigate_smoothview.c
M source/blender/editors/space_view3d/view3d_navigate_walk.c
A source/blender/editors/space_view3d/view3d_navigate_zoom.c
A source/blender/editors/space_view3d/view3d_navigate_zoom_border.c
M source/blender/editors/space_view3d/view3d_ops.c
M source/blender/editors/space_view3d/view3d_view.c
===================================================================
diff --git a/source/blender/editors/space_view3d/CMakeLists.txt b/source/blender/editors/space_view3d/CMakeLists.txt
index 768c2d3e3a6..7e8b013192f 100644
--- a/source/blender/editors/space_view3d/CMakeLists.txt
+++ b/source/blender/editors/space_view3d/CMakeLists.txt
@@ -60,8 +60,17 @@ set(SRC
view3d_gizmo_tool_generic.c
view3d_header.c
view3d_iterators.c
+ view3d_navigate.c
+ view3d_navigate_dolly.c
view3d_navigate_fly.c
+ view3d_navigate_move.c
+ view3d_navigate_ndof.c
+ view3d_navigate_roll.c
+ view3d_navigate_rotate.c
+ view3d_navigate_smoothview.c
view3d_navigate_walk.c
+ view3d_navigate_zoom.c
+ view3d_navigate_zoom_border.c
view3d_ops.c
view3d_placement.c
view3d_project.c
@@ -71,6 +80,7 @@ set(SRC
view3d_view.c
view3d_intern.h
+ view3d_navigate.h
)
set(LIB
diff --git a/source/blender/editors/space_view3d/space_view3d.c b/source/blender/editors/space_view3d/space_view3d.c
index 0a5bebac8a8..6aa00da7501 100644
--- a/source/blender/editors/space_view3d/space_view3d.c
+++ b/source/blender/editors/space_view3d/space_view3d.c
@@ -89,6 +89,7 @@
#include "DEG_depsgraph_build.h"
#include "view3d_intern.h" /* own include */
+#include "view3d_navigate.h"
/* ******************** manage regions ********************* */
diff --git a/source/blender/editors/space_view3d/view3d_edit.c b/source/blender/editors/space_view3d/view3d_edit.c
index 80089815284..4c7a7cb4c61 100644
--- a/source/blender/editors/space_view3d/view3d_edit.c
+++ b/source/blender/editors/space_view3d/view3d_edit.c
@@ -23,70 +23,39 @@
* 3D view manipulation/operators.
*/
-#include <float.h>
-#include <math.h>
-#include <stdio.h>
-#include <string.h>
-
#include "DNA_armature_types.h"
#include "DNA_camera_types.h"
-#include "DNA_curve_types.h"
-#include "DNA_gpencil_types.h"
-#include "DNA_object_types.h"
-#include "DNA_scene_types.h"
#include "DNA_world_types.h"
#include "MEM_guardedalloc.h"
#include "BLI_blenlib.h"
-#include "BLI_dial_2d.h"
#include "BLI_math.h"
-#include "BLI_utildefines.h"
#include "BKE_action.h"
#include "BKE_armature.h"
#include "BKE_camera.h"
-#include "BKE_context.h"
-#include "BKE_gpencil_geom.h"
-#include "BKE_layer.h"
#include "BKE_lib_id.h"
#include "BKE_main.h"
#include "BKE_object.h"
-#include "BKE_paint.h"
#include "BKE_report.h"
#include "BKE_scene.h"
#include "BKE_screen.h"
-#include "BKE_vfont.h"
-#include "DEG_depsgraph.h"
#include "DEG_depsgraph_query.h"
#include "WM_api.h"
#include "WM_message.h"
-#include "WM_types.h"
#include "RNA_access.h"
#include "RNA_define.h"
-#include "ED_armature.h"
-#include "ED_mesh.h"
-#include "ED_particle.h"
#include "ED_screen.h"
#include "ED_transform.h"
#include "ED_transform_snap_object_context.h"
-#include "ED_view3d.h"
-
-#include "UI_resources.h"
-
-#include "PIL_time.h"
#include "view3d_intern.h" /* own include */
-enum {
- HAS_TRANSLATE = (1 << 0),
- HAS_ROTATE = (1 << 0),
-};
-
/* test for unlocked camera view in quad view */
static bool view3d_camera_user_poll(bContext *C)
{
@@ -115,4548 +84,390 @@ static bool view3d_lock_poll(bContext *C)
return false;
}
-static bool view3d_pan_poll(bContext *C)
-{
- if (ED_operator_region_view3d_active(C)) {
- const RegionView3D *rv3d = CTX_wm_region_view3d(C);
- return !(RV3D_LOCK_FLAGS(rv3d) & RV3D_LOCK_LOCATION);
- }
- return false;
-}
-
-static bool view3d_zoom_or_dolly_poll(bContext *C)
-{
- if (ED_operator_region_view3d_active(C)) {
- const RegionView3D *rv3d = CTX_wm_region_view3d(C);
- return !(RV3D_LOCK_FLAGS(rv3d) & RV3D_LOCK_ZOOM_AND_DOLLY);
- }
- return false;
-}
-
/* -------------------------------------------------------------------- */
-/** \name Generic View Operator Properties
+/** \name View Lock Clear Operator
* \{ */
-enum eV3D_OpPropFlag {
- V3D_OP_PROP_MOUSE_CO = (1 << 0),
- V3D_OP_PROP_DELTA = (1 << 1),
- V3D_OP_PROP_USE_ALL_REGIONS = (1 << 2),
- V3D_OP_PROP_USE_MOUSE_INIT = (1 << 3),
-};
-
-static void view3d_operator_properties_common(wmOperatorType *ot, const enum eV3D_OpPropFlag flag)
+static int view_lock_clear_exec(bContext *C, wmOperator *UNUSED(op))
{
- if (flag & V3D_OP_PROP_MOUSE_CO) {
- PropertyRNA *prop;
- prop = RNA_def_int(ot->srna, "mx", 0, 0, INT_MAX, "Region Position X", "", 0, INT_MAX);
- RNA_def_property_flag(prop, PROP_HIDDEN);
- prop = RNA_def_int(ot->srna, "my", 0, 0, INT_MAX, "Region Position Y", "", 0, INT_MAX);
- RNA_def_property_flag(prop, PROP_HIDDEN);
- }
- if (flag & V3D_OP_PROP_DELTA) {
- RNA_def_int(ot->srna, "delta", 0, INT_MIN, INT_MAX, "Delta", "", INT_MIN, INT_MAX);
- }
- if (flag & V3D_OP_PROP_USE_ALL_REGIONS) {
- PropertyRNA *prop;
- prop = RNA_def_boolean(
- ot->srna, "use_all_regions", 0, "All Regions", "View selected for all regions");
- RNA_def_property_flag(prop, PROP_SKIP_SAVE);
- }
- if (flag & V3D_OP_PROP_USE_MOUSE_INIT) {
- WM_operator_properties_use_cursor_init(ot);
- }
-}
-
-/** \} */
+ View3D *v3d = CTX_wm_view3d(C);
-/* -------------------------------------------------------------------- */
-/** \name Generic View Operator Custom-Data
- * \{ */
+ if (v3d) {
+ ED_view3d_lock_clear(v3d);
-typedef struct ViewOpsData {
- /** Context pointers (assigned by #viewops_data_alloc). */
- Main *bmain;
- Scene *scene;
- ScrArea *area;
- ARegion *region;
- View3D *v3d;
- RegionView3D *rv3d;
- Depsgraph *depsgraph;
-
- /** Needed for continuous zoom. */
- wmTimer *timer;
-
- /** Viewport state on initialization, don't change afterwards. */
- struct {
- float dist;
- float camzoom;
- float quat[4];
- /** #wmEvent.xy. */
- int event_xy[2];
- /** Offset to use when #VIEWOPS_FLAG_USE_MOUSE_INIT is not set.
- * so we can simulate pressing in the middle of the screen. */
- int event_xy_offset[2];
- /** #wmEvent.type that triggered the operator. */
- int event_type;
- float ofs[3];
- /** Initial distance to 'ofs'. */
- float zfac;
-
- /** Trackball rotation only. */
- float trackvec[3];
- /** Dolly only. */
- float mousevec[3];
-
- /**
- * #RegionView3D.persp set after auto-perspective is applied.
- * If we want the value before running the operator, add a separate member.
- */
- char persp;
-
- /** Used for roll */
- Dial *dial;
- } init;
-
- /** Previous state (previous modal event handled). */
- struct {
- int event_xy[2];
- /** For operators that use time-steps (continuous zoom). */
- double time;
- } prev;
-
- /** Current state. */
- struct {
- /** Working copy of #RegionView3D.viewquat, needed for rotation calculation
- * so we can apply snap to the 3D Viewport while keeping the unsnapped rotation
- * here to use when snap is disabled and for continued calculation. */
- float viewquat[4];
- } curr;
-
- float reverse;
- bool axis_snap; /* view rotate only */
-
- /** Use for orbit selection and auto-dist. */
- float dyn_ofs[3];
- bool use_dyn_ofs;
-} ViewOpsData;
-
-/**
- * Size of the sphere being dragged for trackball rotation within the view bounds.
- * also affects speed (smaller is faster).
- */
-#define TRACKBALLSIZE (1.1f)
+ WM_event_add_notifier(C, NC_SPACE | ND_SPACE_VIEW3D, v3d);
-static void calctrackballvec(const rcti *rect, const int event_xy[2], float r_dir[3])
-{
- const float radius = TRACKBALLSIZE;
- const float t = radius / (float)M_SQRT2;
- const float size[2] = {BLI_rcti_size_x(rect), BLI_rcti_size_y(rect)};
- /* Aspect correct so dragging in a non-square view doesn't squash the direction.
- * So diagonal motion rotates the same direction the cursor is moving. */
- const float size_min = min_ff(size[0], size[1]);
- const float aspect[2] = {size_min / size[0], size_min / size[1]};
-
- /* Normalize x and y. */
- r_dir[0] = (event_xy[0] - BLI_rcti_cent_x(rect)) / ((size[0] * aspect[0]) / 2.0);
- r_dir[1] = (event_xy[1] - BLI_rcti_cent_y(rect)) / ((size[1] * aspect[1]) / 2.0);
- const float d = len_v2(r_dir);
- if (d < t) {
- /* Inside sphere. */
- r_dir[2] = sqrtf(square_f(radius) - square_f(d));
- }
- else {
- /* On hyperbola. */
- r_dir[2] = square_f(t) / d;
+ return OPERATOR_FINISHED;
}
-}
-/**
- * Allocate and fill in context pointers for #ViewOpsData
- */
-static void viewops_data_alloc(bContext *C, wmOperator *op)
-{
- ViewOpsData *vod = MEM_callocN(sizeof(ViewOpsData), "viewops data");
-
- /* store data */
- op->customdata = vod;
- vod->bmain = CTX_data_main(C);
- vod->depsgraph = CTX_data_ensure_evaluated_depsgraph(C);
- vod->scene = CTX_data_scene(C);
- vod->area = CTX_wm_area(C);
- vod->region = CTX_wm_region(C);
- vod->v3d = vod->area->spacedata.first;
- vod->rv3d = vod->region->regiondata;
+ return OPERATOR_CANCELLED;
}
-void view3d_orbit_apply_dyn_ofs(float r_ofs[3],
- const float ofs_old[3],
- const float viewquat_old[4],
- const float viewquat_new[4],
- const float dyn_ofs[3])
+void VIEW3D_OT_view_lock_clear(wmOperatorType *ot)
{
- float q[4];
- invert_qt_qt_normalized(q, viewquat_old);
- mul_qt_qtqt(q, q, viewquat_new);
-
- invert_qt_normalized(q);
-
- sub_v3_v3v3(r_ofs, ofs_old, dyn_ofs);
- mul_qt_v3(q, r_ofs);
- add_v3_v3(r_ofs, dyn_ofs);
-}
-static bool view3d_orbit_calc_center(bContext *C, float r_dyn_ofs[3])
-{
- static float lastofs[3] = {0, 0, 0};
- bool is_set = false;
+ /* identifiers */
+ ot->name = "View Lock Clear";
+ ot->description = "Clear all view locking";
+ ot->idname = "VIEW3D_OT_view_lock_clear";
- const Depsgraph *depsgraph = CTX_data_ensure_evaluated_depsgraph(C);
- Scene *scene = CTX_data_scene(C);
- ViewLayer *view_layer_eval = DEG_get_evaluated_view_layer(depsgraph);
- View3D *v3d = CTX_wm_view3d(C);
- Object *ob_act_eval = OBACT(view_layer_eval);
- Object *ob_act = DEG_get_original_object(ob_act_eval);
-
- if (ob_act && (ob_act->mode & OB_MODE_ALL_PAINT) &&
- /* with weight-paint + pose-mode, fall through to using calculateTransformCenter */
- ((ob_act->mode & OB_MODE_WEIGHT_PAINT) && BKE_object_pose_armature_get(ob_act)) == 0) {
- /* in
@@ Diff output truncated at 10240 characters. @@
More information about the Bf-blender-cvs
mailing list