[Bf-blender-cvs] [ca253df6239] master: Cleanup: move transform_snap to C++

Jacques Lucke noreply at git.blender.org
Thu Nov 17 17:14:11 CET 2022


Commit: ca253df62392b4fe7ddb301711ec4a1415d33d8d
Author: Jacques Lucke
Date:   Thu Nov 17 17:13:38 2022 +0100
Branches: master
https://developer.blender.org/rBca253df62392b4fe7ddb301711ec4a1415d33d8d

Cleanup: move transform_snap to C++

===================================================================

M	source/blender/editors/include/ED_node.h
M	source/blender/editors/transform/CMakeLists.txt
M	source/blender/editors/transform/transform.h
R084	source/blender/editors/transform/transform_snap.c	source/blender/editors/transform/transform_snap.cc
M	source/blender/makesdna/DNA_scene_types.h

===================================================================

diff --git a/source/blender/editors/include/ED_node.h b/source/blender/editors/include/ED_node.h
index 24e14fdce72..805c5b0b155 100644
--- a/source/blender/editors/include/ED_node.h
+++ b/source/blender/editors/include/ED_node.h
@@ -32,6 +32,7 @@ typedef enum {
   NODE_LEFT = 4,
   NODE_RIGHT = 8,
 } NodeBorder;
+ENUM_OPERATORS(NodeBorder, NODE_RIGHT)
 
 #define NODE_GRID_STEP_SIZE U.widget_unit /* Based on the grid nodes snap to. */
 #define NODE_EDGE_PAN_INSIDE_PAD 2
@@ -191,4 +192,4 @@ void node_insert_on_link_flags_clear(bNodeTree &node_tree);
 
 }  // namespace blender::ed::space_node
 
-#endif
\ No newline at end of file
+#endif
diff --git a/source/blender/editors/transform/CMakeLists.txt b/source/blender/editors/transform/CMakeLists.txt
index 3787a59c83c..6c9b834d34b 100644
--- a/source/blender/editors/transform/CMakeLists.txt
+++ b/source/blender/editors/transform/CMakeLists.txt
@@ -88,7 +88,7 @@ set(SRC
   transform_mode_vert_slide.c
   transform_ops.c
   transform_orientations.c
-  transform_snap.c
+  transform_snap.cc
   transform_snap_animation.c
   transform_snap_object.cc
   transform_snap_sequencer.c
diff --git a/source/blender/editors/transform/transform.h b/source/blender/editors/transform/transform.h
index 1e260ecd292..8e299576492 100644
--- a/source/blender/editors/transform/transform.h
+++ b/source/blender/editors/transform/transform.h
@@ -158,6 +158,7 @@ typedef enum {
   MOD_SNAP_INVERT = 1 << 3,
   MOD_CONSTRAINT_SELECT_PLANE = 1 << 4,
 } eTModifier;
+ENUM_OPERATORS(eTModifier, MOD_CONSTRAINT_SELECT_PLANE)
 
 /** #TransSnap.status */
 typedef enum eTSnap {
@@ -169,6 +170,7 @@ typedef enum eTSnap {
   POINT_INIT = 1 << 3,
   MULTI_POINTS = 1 << 4,
 } eTSnap;
+ENUM_OPERATORS(eTSnap, MULTI_POINTS)
 
 /** #TransCon.mode, #TransInfo.con.mode */
 typedef enum {
@@ -198,6 +200,7 @@ typedef enum {
   TREDRAW_SOFT = (1 << 0),
   TREDRAW_HARD = (1 << 1) | TREDRAW_SOFT,
 } eRedrawFlag;
+ENUM_OPERATORS(eRedrawFlag, TREDRAW_HARD)
 
 /** #TransInfo.helpline */
 typedef enum {
diff --git a/source/blender/editors/transform/transform_snap.c b/source/blender/editors/transform/transform_snap.cc
similarity index 84%
rename from source/blender/editors/transform/transform_snap.c
rename to source/blender/editors/transform/transform_snap.cc
index 11cb57dc911..a56ef9b1a95 100644
--- a/source/blender/editors/transform/transform_snap.c
+++ b/source/blender/editors/transform/transform_snap.cc
@@ -13,6 +13,7 @@
 
 #include "BLI_blenlib.h"
 #include "BLI_math.h"
+#include "BLI_utildefines.h"
 
 #include "GPU_immediate.h"
 #include "GPU_matrix.h"
@@ -85,7 +86,7 @@ int BIF_snappingSupported(Object *obedit)
   int status = 0;
 
   /* only support object mesh, armature, curves */
-  if (obedit == NULL || ELEM(obedit->type, OB_MESH, OB_ARMATURE, OB_CURVES_LEGACY, OB_LATTICE, OB_MBALL)) {
+  if (obedit == nullptr || ELEM(obedit->type, OB_MESH, OB_ARMATURE, OB_CURVES_LEGACY, OB_LATTICE, OB_MBALL)) {
     status = 1;
   }
 
@@ -96,7 +97,7 @@ int BIF_snappingSupported(Object *obedit)
 static bool snap_use_backface_culling(const TransInfo *t)
 {
   BLI_assert(t->spacetype == SPACE_VIEW3D);
-  View3D *v3d = t->view;
+  View3D *v3d = static_cast<View3D *>(t->view);
   if ((v3d->shading.type == OB_SOLID) && (v3d->shading.flag & V3D_SHADING_BACKFACE_CULLING)) {
     return true;
   }
@@ -215,9 +216,9 @@ void drawSnapping(const struct bContext *C, TransInfo *t)
   }
 
   if (t->spacetype == SPACE_VIEW3D) {
-    const float *loc_cur = NULL;
-    const float *loc_prev = NULL;
-    const float *normal = NULL;
+    const float *loc_cur = nullptr;
+    const float *loc_prev = nullptr;
+    const float *normal = nullptr;
 
     GPU_depth_test(GPU_DEPTH_NONE);
 
@@ -299,7 +300,7 @@ void drawSnapping(const struct bContext *C, TransInfo *t)
 
     immBindBuiltinProgram(GPU_SHADER_3D_UNIFORM_COLOR);
 
-    for (p = t->tsnap.points.first; p; p = p->next) {
+    for (p = static_cast<TransSnapPoint *>(t->tsnap.points.first); p; p = p->next) {
       if (p == t->tsnap.selectedPoint) {
         immUniformColor4ubv(selectedCol);
       }
@@ -307,13 +308,14 @@ void drawSnapping(const struct bContext *C, TransInfo *t)
         immUniformColor4ubv(col);
       }
 
-      ED_node_draw_snap(&region->v2d, p->co, size, 0, pos);
+      ED_node_draw_snap(&region->v2d, p->co, size, NodeBorder(0), pos);
     }
 
     if (t->tsnap.status & POINT_INIT) {
       immUniformColor4ubv(activeCol);
 
-      ED_node_draw_snap(&region->v2d, t->tsnap.snapPoint, size, t->tsnap.snapNodeBorder, pos);
+      ED_node_draw_snap(
+          &region->v2d, t->tsnap.snapPoint, size, NodeBorder(t->tsnap.snapNodeBorder), pos);
     }
 
     immUnbindProgram();
@@ -346,7 +348,7 @@ eRedrawFlag handleSnapping(TransInfo *t, const wmEvent *event)
       (event->modifier & KM_SHIFT)) {
     /* toggle snap and reinit */
     t->settings->snap_flag ^= SCE_SNAP;
-    initSnapping(t, NULL);
+    initSnapping(t, nullptr);
     status = TREDRAW_HARD;
   }
 #endif
@@ -380,24 +382,24 @@ static bool applyFaceProject(TransInfo *t, TransDataContainer *tc, TransData *td
     return false;
   }
 
-  eSnapMode hit = ED_transform_snap_object_project_view3d(
-      t->tsnap.object_context,
-      t->depsgraph,
-      t->region,
-      t->view,
-      SCE_SNAP_MODE_FACE_RAYCAST,
-      &(const struct SnapObjectParams){
-          .snap_target_select = t->tsnap.target_select,
-          .edit_mode_type = (t->flag & T_EDIT) != 0 ? SNAP_GEOM_EDIT : SNAP_GEOM_FINAL,
-          .use_occlusion_test = false,
-          .use_backface_culling = t->tsnap.use_backface_culling,
-      },
-      NULL,
-      mval_fl,
-      NULL,
-      0,
-      loc,
-      no);
+  SnapObjectParams snap_object_params{};
+  snap_object_params.snap_target_select = t->tsnap.target_select;
+  snap_object_params.edit_mode_type = (t->flag & T_EDIT) != 0 ? SNAP_GEOM_EDIT : SNAP_GEOM_FINAL;
+  snap_object_params.use_occlusion_test = false;
+  snap_object_params.use_backface_culling = t->tsnap.use_backface_culling;
+
+  eSnapMode hit = ED_transform_snap_object_project_view3d(t->tsnap.object_context,
+                                                          t->depsgraph,
+                                                          t->region,
+                                                          static_cast<const View3D *>(t->view),
+                                                          SCE_SNAP_MODE_FACE_RAYCAST,
+                                                          &snap_object_params,
+                                                          nullptr,
+                                                          mval_fl,
+                                                          nullptr,
+                                                          0,
+                                                          loc,
+                                                          no);
   if (hit != SCE_SNAP_MODE_FACE_RAYCAST) {
     return false;
   }
@@ -447,26 +449,26 @@ static void applyFaceNearest(TransInfo *t, TransDataContainer *tc, TransData *td
     copy_v3_v3(init_loc, td->ob->object_to_world[3]);
   }
 
-  eSnapMode hit = ED_transform_snap_object_project_view3d(
-      t->tsnap.object_context,
-      t->depsgraph,
-      t->region,
-      t->view,
-      SCE_SNAP_MODE_FACE_NEAREST,
-      &(const struct SnapObjectParams){
-          .snap_target_select = t->tsnap.target_select,
-          .edit_mode_type = (t->flag & T_EDIT) != 0 ? SNAP_GEOM_EDIT : SNAP_GEOM_FINAL,
-          .use_occlusion_test = false,
-          .use_backface_culling = false,
-          .face_nearest_steps = t->tsnap.face_nearest_steps,
-          .keep_on_same_target = t->tsnap.flag & SCE_SNAP_KEEP_ON_SAME_OBJECT,
-      },
-      init_loc,
-      NULL,
-      prev_loc,
-      0,
-      snap_loc,
-      snap_no);
+  SnapObjectParams snap_object_params{};
+  snap_object_params.snap_target_select = t->tsnap.target_select;
+  snap_object_params.edit_mode_type = (t->flag & T_EDIT) != 0 ? SNAP_GEOM_EDIT : SNAP_GEOM_FINAL;
+  snap_object_params.use_occlusion_test = false;
+  snap_object_params.use_backface_culling = false;
+  snap_object_params.face_nearest_steps = t->tsnap.face_nearest_steps;
+  snap_object_params.keep_on_same_target = t->tsnap.flag & SCE_SNAP_KEEP_ON_SAME_OBJECT;
+
+  eSnapMode hit = ED_transform_snap_object_project_view3d(t->tsnap.object_context,
+                                                          t->depsgraph,
+                                                          t->region,
+                                                          static_cast<const View3D *>(t->view),
+                                                          SCE_SNAP_MODE_FACE_NEAREST,
+                                                          &snap_object_params,
+                                                          init_loc,
+                                                          nullptr,
+                                                          prev_loc,
+                                                          0,
+                                                          snap_loc,
+                                                          snap_no);
 
   if (hit != SCE_SNAP_MODE_FACE_NEAREST) {
     return;
@@ -610,15 +612,15 @@ static eSnapFlag snap_flag_from_spacetype(TransInfo *t)
 {
   ToolSettings *ts = t->settings;
   if (t->spacetype == SPACE_NODE) {
-    return ts->snap_flag_node;
+    return eSnapFlag(ts->snap_flag_node);
   }
   if (t->spacetype == SPACE_IMAGE) {
-    return ts->snap_uv_flag;
+    return eSnapFlag(ts->snap_uv_flag);
   }
   if (t->spacetype == SPACE_SEQ) {
-    return ts->snap_flag_seq;
+    return eSnapFlag(ts->snap_flag_seq);
   }
-  return ts->snap_flag;
+  return eSnapFlag(ts->snap_flag);
 }
 
 static eSnapMode snap_mode_from_spacetype(TransInfo *t)
@@ -626,11 +628,11 @@ static eSnapMode snap_mode_from_spacetype(TransInfo *t)
   ToolSettings *ts = t->settings;
 
   if (t->spacetype == SPACE_NODE) {
-    return ts->snap_node_mode;
+    return eSnapMode(ts->snap_node_mode);
   }
 
   if (t->spacetype == SPACE_IMAGE) {
-    eSnapMode snap_mode = ts->snap_uv_mode;
+    eSnapMode snap_mode = eSnapMode(ts->snap_uv_mode);
     if ((snap_mode & SCE_SNAP_MODE_INCRE

@@ Diff output truncated at 10240 characters. @@



More information about the Bf-blender-cvs mailing list