[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