[Bf-blender-cvs] [98bf714b37c] master: Refactor: arrange transform convert functions in 'TransConvertTypeInfo'

Germano Cavalcante noreply at git.blender.org
Fri Jul 22 15:01:43 CEST 2022


Commit: 98bf714b37c1f1b05a162b6ffdaca367b312de1f
Author: Germano Cavalcante
Date:   Thu Jul 21 23:44:39 2022 -0300
Branches: master
https://developer.blender.org/rB98bf714b37c1f1b05a162b6ffdaca367b312de1f

Refactor: arrange transform convert functions in 'TransConvertTypeInfo'

Simplify the transform code by bundling the TransData creation, Data
recalculation, and special updates into a single struct.

So similar functions and parameters can be accessed without special
type checks.

Differential Revision: https://developer.blender.org/D15494

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

M	source/blender/editors/transform/transform.c
M	source/blender/editors/transform/transform.h
M	source/blender/editors/transform/transform_convert.c
M	source/blender/editors/transform/transform_convert.h
M	source/blender/editors/transform/transform_convert_action.c
M	source/blender/editors/transform/transform_convert_armature.c
M	source/blender/editors/transform/transform_convert_cursor.c
M	source/blender/editors/transform/transform_convert_curve.c
M	source/blender/editors/transform/transform_convert_gpencil.c
M	source/blender/editors/transform/transform_convert_graph.c
M	source/blender/editors/transform/transform_convert_lattice.c
M	source/blender/editors/transform/transform_convert_mask.c
M	source/blender/editors/transform/transform_convert_mball.c
M	source/blender/editors/transform/transform_convert_mesh.c
M	source/blender/editors/transform/transform_convert_mesh_edge.c
M	source/blender/editors/transform/transform_convert_mesh_skin.c
M	source/blender/editors/transform/transform_convert_mesh_uv.c
M	source/blender/editors/transform/transform_convert_mesh_vert_cdata.c
M	source/blender/editors/transform/transform_convert_nla.c
M	source/blender/editors/transform/transform_convert_node.c
M	source/blender/editors/transform/transform_convert_object.c
M	source/blender/editors/transform/transform_convert_object_texspace.c
M	source/blender/editors/transform/transform_convert_paintcurve.c
M	source/blender/editors/transform/transform_convert_particle.c
M	source/blender/editors/transform/transform_convert_sculpt.c
M	source/blender/editors/transform/transform_convert_sequencer.c
M	source/blender/editors/transform/transform_convert_sequencer_image.c
M	source/blender/editors/transform/transform_convert_tracking.c
M	source/blender/editors/transform/transform_mode.c
M	source/blender/editors/transform/transform_snap.c
M	source/blender/editors/transform/transform_snap_sequencer.c

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

diff --git a/source/blender/editors/transform/transform.c b/source/blender/editors/transform/transform.c
index 6e47b30ae9d..8dcbf07b776 100644
--- a/source/blender/editors/transform/transform.c
+++ b/source/blender/editors/transform/transform.c
@@ -525,7 +525,8 @@ static void viewRedrawPost(bContext *C, TransInfo *t)
                                          UVCALC_TRANSFORM_CORRECT_SLIDE :
                                          UVCALC_TRANSFORM_CORRECT;
 
-    if ((t->data_type == TC_MESH_VERTS) && (t->settings->uvcalc_flag & uvcalc_correct_flag)) {
+    if ((t->data_type == &TransConvertType_Mesh) &&
+        (t->settings->uvcalc_flag & uvcalc_correct_flag)) {
       WM_event_add_notifier(C, NC_GEOM | ND_DATA, NULL);
     }
 
@@ -847,7 +848,7 @@ static bool transform_event_modal_constraint(TransInfo *t, short modal_type)
       return false;
     }
 
-    if (t->data_type == TC_SEQ_IMAGE_DATA) {
+    if (t->data_type == &TransConvertType_SequencerImage) {
       /* Setup the 2d msg string so it writes out the transform space. */
       msg_2d = msg_3d;
 
diff --git a/source/blender/editors/transform/transform.h b/source/blender/editors/transform/transform.h
index b01affc7307..fc59787e1ec 100644
--- a/source/blender/editors/transform/transform.h
+++ b/source/blender/editors/transform/transform.h
@@ -38,6 +38,7 @@ struct ReportList;
 struct Scene;
 struct ScrArea;
 struct SnapObjectContext;
+struct TransConvertTypeInfo;
 struct TransDataContainer;
 struct TransInfo;
 struct TransSnap;
@@ -204,37 +205,6 @@ typedef enum {
   HLP_TRACKBALL = 6,
 } eTHelpline;
 
-typedef enum {
-  TC_NONE = 0,
-  TC_ACTION_DATA,
-  TC_POSE,
-  TC_ARMATURE_VERTS,
-  TC_CURSOR_IMAGE,
-  TC_CURSOR_SEQUENCER,
-  TC_CURSOR_VIEW3D,
-  TC_CURVE_VERTS,
-  TC_GRAPH_EDIT_DATA,
-  TC_GPENCIL,
-  TC_LATTICE_VERTS,
-  TC_MASKING_DATA,
-  TC_MBALL_VERTS,
-  TC_MESH_VERTS,
-  TC_MESH_EDGES,
-  TC_MESH_SKIN,
-  TC_MESH_UV,
-  TC_MESH_VERT_CDATA,
-  TC_NLA_DATA,
-  TC_NODE_DATA,
-  TC_OBJECT,
-  TC_OBJECT_TEXSPACE,
-  TC_PAINT_CURVE_VERTS,
-  TC_PARTICLE_VERTS,
-  TC_SCULPT,
-  TC_SEQ_DATA,
-  TC_SEQ_IMAGE_DATA,
-  TC_TRACKING_DATA,
-} eTConvertType;
-
 /** \} */
 
 /* -------------------------------------------------------------------- */
@@ -519,7 +489,7 @@ typedef struct TransInfo {
   int data_len_all;
 
   /** TODO: It should be a member of #TransDataContainer. */
-  eTConvertType data_type;
+  struct TransConvertTypeInfo *data_type;
 
   /** Current context/options for transform. */
   eTContext options;
diff --git a/source/blender/editors/transform/transform_convert.c b/source/blender/editors/transform/transform_convert.c
index b0148ce508c..e6cf2dd47d9 100644
--- a/source/blender/editors/transform/transform_convert.c
+++ b/source/blender/editors/transform/transform_convert.c
@@ -776,63 +776,12 @@ void special_aftertrans_update(bContext *C, TransInfo *t)
     return;
   }
 
-  BLI_assert(CTX_data_main(t->context) == CTX_data_main(C));
-  switch (t->data_type) {
-    case TC_ACTION_DATA:
-      special_aftertrans_update__actedit(C, t);
-      break;
-    case TC_POSE:
-      special_aftertrans_update__pose(C, t);
-      break;
-    case TC_GRAPH_EDIT_DATA:
-      special_aftertrans_update__graph(C, t);
-      break;
-    case TC_MASKING_DATA:
-      special_aftertrans_update__mask(C, t);
-      break;
-    case TC_MESH_VERTS:
-    case TC_MESH_EDGES:
-      special_aftertrans_update__mesh(C, t);
-      break;
-    case TC_NLA_DATA:
-      special_aftertrans_update__nla(C, t);
-      break;
-    case TC_NODE_DATA:
-      special_aftertrans_update__node(C, t);
-      break;
-    case TC_OBJECT:
-      special_aftertrans_update__object(C, t);
-      break;
-    case TC_SCULPT:
-      special_aftertrans_update__sculpt(C, t);
-      break;
-    case TC_SEQ_DATA:
-      special_aftertrans_update__sequencer(C, t);
-      break;
-    case TC_SEQ_IMAGE_DATA:
-      special_aftertrans_update__sequencer_image(C, t);
-      break;
-    case TC_TRACKING_DATA:
-      special_aftertrans_update__movieclip(C, t);
-      break;
-    case TC_ARMATURE_VERTS:
-    case TC_CURSOR_IMAGE:
-    case TC_CURSOR_SEQUENCER:
-    case TC_CURSOR_VIEW3D:
-    case TC_CURVE_VERTS:
-    case TC_GPENCIL:
-    case TC_LATTICE_VERTS:
-    case TC_MBALL_VERTS:
-    case TC_MESH_VERT_CDATA:
-    case TC_MESH_UV:
-    case TC_MESH_SKIN:
-    case TC_OBJECT_TEXSPACE:
-    case TC_PAINT_CURVE_VERTS:
-    case TC_PARTICLE_VERTS:
-    case TC_NONE:
-    default:
-      break;
+  if (!t->data_type || !t->data_type->special_aftertrans_update) {
+    return;
   }
+
+  BLI_assert(CTX_data_main(t->context) == CTX_data_main(C));
+  t->data_type->special_aftertrans_update(C, t);
 }
 
 int special_transform_moving(TransInfo *t)
@@ -893,55 +842,44 @@ static int countAndCleanTransDataContainer(TransInfo *t)
 
 static void init_proportional_edit(TransInfo *t)
 {
-  eTConvertType convert_type = t->data_type;
-  switch (convert_type) {
-    case TC_ACTION_DATA:
-    case TC_CURVE_VERTS:
-    case TC_GRAPH_EDIT_DATA:
-    case TC_GPENCIL:
-    case TC_LATTICE_VERTS:
-    case TC_MASKING_DATA:
-    case TC_MBALL_VERTS:
-    case TC_MESH_VERTS:
-    case TC_MESH_EDGES:
-    case TC_MESH_SKIN:
-    case TC_MESH_UV:
-    case TC_MESH_VERT_CDATA:
-    case TC_NODE_DATA:
-    case TC_OBJECT:
-    case TC_PARTICLE_VERTS:
-      break;
-    case TC_POSE: /* Disable PET, its not usable in pose mode yet T32444. */
-    case TC_ARMATURE_VERTS:
-    case TC_CURSOR_IMAGE:
-    case TC_CURSOR_SEQUENCER:
-    case TC_CURSOR_VIEW3D:
-    case TC_NLA_DATA:
-    case TC_OBJECT_TEXSPACE:
-    case TC_PAINT_CURVE_VERTS:
-    case TC_SCULPT:
-    case TC_SEQ_DATA:
-    case TC_SEQ_IMAGE_DATA:
-    case TC_TRACKING_DATA:
-    case TC_NONE:
-    default:
-      t->options |= CTX_NO_PET;
-      t->flag &= ~T_PROP_EDIT_ALL;
-      return;
+  /* NOTE: PET is not usable in pose mode yet T32444. */
+  if (!ELEM(t->data_type,
+            &TransConvertType_Action,
+            &TransConvertType_Curve,
+            &TransConvertType_Graph,
+            &TransConvertType_GPencil,
+            &TransConvertType_Lattice,
+            &TransConvertType_Mask,
+            &TransConvertType_MBall,
+            &TransConvertType_Mesh,
+            &TransConvertType_MeshEdge,
+            &TransConvertType_MeshSkin,
+            &TransConvertType_MeshUV,
+            &TransConvertType_MeshVertCData,
+            &TransConvertType_Node,
+            &TransConvertType_Object,
+            &TransConvertType_Particle)) {
+    /* Disable PET */
+    t->options |= CTX_NO_PET;
+    t->flag &= ~T_PROP_EDIT_ALL;
+    return;
   }
 
   if (t->data_len_all && (t->flag & T_PROP_EDIT)) {
-    if (convert_type == TC_OBJECT) {
+    if (t->data_type == &TransConvertType_Object) {
       /* Selected objects are already first, no need to presort. */
     }
     else {
       sort_trans_data_selected_first(t);
     }
 
-    if (ELEM(convert_type, TC_ACTION_DATA, TC_GRAPH_EDIT_DATA)) {
+    if (ELEM(t->data_type, &TransConvertType_Action, &TransConvertType_Graph)) {
       /* Distance has already been set. */
     }
-    else if (ELEM(convert_type, TC_MESH_VERTS, TC_MESH_SKIN, TC_MESH_VERT_CDATA)) {
+    else if (ELEM(t->data_type,
+                  &TransConvertType_Mesh,
+                  &TransConvertType_MeshSkin,
+                  &TransConvertType_MeshVertCData)) {
       if (t->flag & T_PROP_CONNECTED) {
         /* Already calculated by transform_convert_mesh_connectivity_distance. */
       }
@@ -949,10 +887,10 @@ static void init_proportional_edit(TransInfo *t)
         set_prop_dist(t, false);
       }
     }
-    else if (convert_type == TC_MESH_UV && t->flag & T_PROP_CONNECTED) {
+    else if (t->data_type == &TransConvertType_MeshUV && t->flag & T_PROP_CONNECTED) {
       /* Already calculated by uv_set_connectivity_distance. */
     }
-    else if (convert_type == TC_CURVE_VERTS) {
+    else if (t->data_type == &TransConvertType_Curve) {
       BLI_assert(t->obedit_type == OB_CURVES_LEGACY);
       set_prop_dist(t, false);
     }
@@ -975,45 +913,26 @@ static void init_TransDataContainers(TransInfo *t,
                                      Object **objects,
                                      uint objects_len)
 {
-  switch (t->data_type) {
-    case TC_POSE:
-    case TC_ARMATURE_VERTS:
-    case TC_CURVE_VERTS:
-    case TC_GPENCIL:
-    case TC_LATTICE_VERTS:
-    case TC_MBALL_VERTS:
-    case TC_MESH_VERTS:
-    case TC_MESH_EDGES:
-    case TC_MESH_SKIN:
-    case TC_MESH_UV:
-    case TC_MESH_VERT_CDATA:
-      break;
-    case TC_ACTION_DATA:
-    case TC_GRAPH_EDIT_DATA:
-    case TC_CURSOR_IMAGE:
-    case TC_CURSOR_SEQUENCER:
-    case TC_CURSOR_VIEW3D:
-    case TC_MASKING_DATA:
-    case TC_NLA_DATA:
-    case TC_NODE_DATA:
-    case TC_OBJECT:
-    case TC_OBJECT_TEXSPACE:
-    case TC_PAINT_CURVE_VERTS:
-    case TC_PARTICLE_VERTS:
-    case TC_SCULPT:
-    case TC_SEQ_DATA:
-    case TC_SEQ_IMAGE_DATA:
-    case TC_TRACKING_DATA:
-    case TC_NONE:
-    default:
-      /* Does not support Multi object editing. */
-      return;
+  if (!ELEM(t->data_type,
+            &TransConvertType_Pose,
+            &TransConvertType_EditArmature,
+            &TransConvertType_Curve,
+            &TransConvertType_GPencil,
+            &TransConvertType_Lattice,
+            &TransConvertType_MBall,
+            &TransConvertType_Mesh,
+            &TransConvertType_MeshEdge,
+            &TransConvertType_MeshSkin,
+            &TransConvertType_MeshUV,
+            &TransConvertType_MeshVertCData)) {
+    /* Does not support Multi object editing. */
+    return;
   }
 
   const eObjectMode object_mode = obact ? obact->mode : OB_MODE_OBJECT;
   const short object_type = obact ? obact->type : -1;
 
-  if ((object_mode & OB_MODE_EDIT) || (t->data_type == TC_GPENCIL) ||
+  if ((object_mode & OB_MODE_EDIT) || (t->data_type == &TransConvertType_GPencil) ||
       ((object_mode & OB_MODE_POSE) && (object_type == OB_ARMATURE))) {
     if (t->data_container) {
       MEM_freeN(t->data_container);
@@ -1055,7 +974,7 @@ static void init_TransDataContainers(TransInfo *t,
         tc->poseobj = objects[i];
         tc->use_local_mat = true;
       }
-      else if (t->data_type

@@ Diff output truncated at 10240 characters. @@



More information about the Bf-blender-cvs mailing list