[Bf-blender-cvs] [f8d5d03ebc9] master: Cleanup/Refactor: Move FOREACH_TRANS_DATA_CONTAINER to outside of some functions

Germano Cavalcante noreply at git.blender.org
Sat Apr 24 16:47:27 CEST 2021


Commit: f8d5d03ebc96605e74373e103e5ed8dbca8aa1b7
Author: Germano Cavalcante
Date:   Sat Apr 24 11:15:55 2021 -0300
Branches: master
https://developer.blender.org/rBf8d5d03ebc96605e74373e103e5ed8dbca8aa1b7

Cleanup/Refactor: Move FOREACH_TRANS_DATA_CONTAINER to outside of some functions

So we can reuse the same loop for different corrections.

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

M	source/blender/editors/transform/transform_convert.c
M	source/blender/editors/transform/transform_convert.h
M	source/blender/editors/transform/transform_convert_curve.c
M	source/blender/editors/transform/transform_convert_mesh.c

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

diff --git a/source/blender/editors/transform/transform_convert.c b/source/blender/editors/transform/transform_convert.c
index a3e84f24de7..7095e52452c 100644
--- a/source/blender/editors/transform/transform_convert.c
+++ b/source/blender/editors/transform/transform_convert.c
@@ -1472,91 +1472,89 @@ void createTransData(bContext *C, TransInfo *t)
 /** \name Transform Data Recalc/Flush
  * \{ */
 
-void transform_convert_clip_mirror_modifier_apply(TransInfo *t)
+void transform_convert_clip_mirror_modifier_apply(TransDataContainer *tc)
 {
-  FOREACH_TRANS_DATA_CONTAINER (t, tc) {
-    Object *ob = tc->obedit;
-    ModifierData *md = ob->modifiers.first;
-    float tolerance[3] = {0.0f, 0.0f, 0.0f};
-    int axis = 0;
-
-    for (; md; md = md->next) {
-      if ((md->type == eModifierType_Mirror) && (md->mode & eModifierMode_Realtime)) {
-        MirrorModifierData *mmd = (MirrorModifierData *)md;
-
-        if (mmd->flag & MOD_MIR_CLIPPING) {
-          axis = 0;
-          if (mmd->flag & MOD_MIR_AXIS_X) {
-            axis |= 1;
-            tolerance[0] = mmd->tolerance;
-          }
-          if (mmd->flag & MOD_MIR_AXIS_Y) {
-            axis |= 2;
-            tolerance[1] = mmd->tolerance;
-          }
-          if (mmd->flag & MOD_MIR_AXIS_Z) {
-            axis |= 4;
-            tolerance[2] = mmd->tolerance;
-          }
-          if (axis) {
-            float mtx[4][4], imtx[4][4];
-            int i;
+  Object *ob = tc->obedit;
+  ModifierData *md = ob->modifiers.first;
+  float tolerance[3] = {0.0f, 0.0f, 0.0f};
+  int axis = 0;
+
+  for (; md; md = md->next) {
+    if ((md->type == eModifierType_Mirror) && (md->mode & eModifierMode_Realtime)) {
+      MirrorModifierData *mmd = (MirrorModifierData *)md;
+
+      if (mmd->flag & MOD_MIR_CLIPPING) {
+        axis = 0;
+        if (mmd->flag & MOD_MIR_AXIS_X) {
+          axis |= 1;
+          tolerance[0] = mmd->tolerance;
+        }
+        if (mmd->flag & MOD_MIR_AXIS_Y) {
+          axis |= 2;
+          tolerance[1] = mmd->tolerance;
+        }
+        if (mmd->flag & MOD_MIR_AXIS_Z) {
+          axis |= 4;
+          tolerance[2] = mmd->tolerance;
+        }
+        if (axis) {
+          float mtx[4][4], imtx[4][4];
+          int i;
 
-            if (mmd->mirror_ob) {
-              float obinv[4][4];
+          if (mmd->mirror_ob) {
+            float obinv[4][4];
 
-              invert_m4_m4(obinv, mmd->mirror_ob->obmat);
-              mul_m4_m4m4(mtx, obinv, ob->obmat);
-              invert_m4_m4(imtx, mtx);
-            }
+            invert_m4_m4(obinv, mmd->mirror_ob->obmat);
+            mul_m4_m4m4(mtx, obinv, ob->obmat);
+            invert_m4_m4(imtx, mtx);
+          }
 
-            TransData *td = tc->data;
-            for (i = 0; i < tc->data_len; i++, td++) {
-              int clip;
-              float loc[3], iloc[3];
+          TransData *td = tc->data;
+          for (i = 0; i < tc->data_len; i++, td++) {
+            int clip;
+            float loc[3], iloc[3];
 
-              if (td->loc == NULL) {
-                break;
-              }
+            if (td->loc == NULL) {
+              break;
+            }
 
-              if (td->flag & TD_SKIP) {
-                continue;
-              }
+            if (td->flag & TD_SKIP) {
+              continue;
+            }
 
-              copy_v3_v3(loc, td->loc);
-              copy_v3_v3(iloc, td->iloc);
+            copy_v3_v3(loc, td->loc);
+            copy_v3_v3(iloc, td->iloc);
 
-              if (mmd->mirror_ob) {
-                mul_m4_v3(mtx, loc);
-                mul_m4_v3(mtx, iloc);
-              }
+            if (mmd->mirror_ob) {
+              mul_m4_v3(mtx, loc);
+              mul_m4_v3(mtx, iloc);
+            }
 
-              clip = 0;
-              if (axis & 1) {
-                if (fabsf(iloc[0]) <= tolerance[0] || loc[0] * iloc[0] < 0.0f) {
-                  loc[0] = 0.0f;
-                  clip = 1;
-                }
+            clip = 0;
+            if (axis & 1) {
+              if (fabsf(iloc[0]) <= tolerance[0] || loc[0] * iloc[0] < 0.0f) {
+                loc[0] = 0.0f;
+                clip = 1;
               }
+            }
 
-              if (axis & 2) {
-                if (fabsf(iloc[1]) <= tolerance[1] || loc[1] * iloc[1] < 0.0f) {
-                  loc[1] = 0.0f;
-                  clip = 1;
-                }
+            if (axis & 2) {
+              if (fabsf(iloc[1]) <= tolerance[1] || loc[1] * iloc[1] < 0.0f) {
+                loc[1] = 0.0f;
+                clip = 1;
               }
-              if (axis & 4) {
-                if (fabsf(iloc[2]) <= tolerance[2] || loc[2] * iloc[2] < 0.0f) {
-                  loc[2] = 0.0f;
-                  clip = 1;
-                }
+            }
+            if (axis & 4) {
+              if (fabsf(iloc[2]) <= tolerance[2] || loc[2] * iloc[2] < 0.0f) {
+                loc[2] = 0.0f;
+                clip = 1;
               }
-              if (clip) {
-                if (mmd->mirror_ob) {
-                  mul_m4_v3(imtx, loc);
-                }
-                copy_v3_v3(td->loc, loc);
+            }
+            if (clip) {
+              if (mmd->mirror_ob) {
+                mul_m4_v3(imtx, loc);
               }
+              copy_v3_v3(td->loc, loc);
             }
           }
         }
diff --git a/source/blender/editors/transform/transform_convert.h b/source/blender/editors/transform/transform_convert.h
index 6f8279ca8cd..11550ec8803 100644
--- a/source/blender/editors/transform/transform_convert.h
+++ b/source/blender/editors/transform/transform_convert.h
@@ -62,7 +62,7 @@ void calc_distanceCurveVerts(TransData *head, TransData *tail, bool cyclic);
 struct TransDataCurveHandleFlags *initTransDataCurveHandles(TransData *td, struct BezTriple *bezt);
 char transform_convert_frame_side_dir_get(TransInfo *t, float cframe);
 bool FrameOnMouseSide(char side, float frame, float cframe);
-void transform_convert_clip_mirror_modifier_apply(TransInfo *t);
+void transform_convert_clip_mirror_modifier_apply(TransDataContainer *tc);
 void animrecord_check_state(TransInfo *t, struct Object *ob);
 
 /* transform_convert_action.c */
diff --git a/source/blender/editors/transform/transform_convert_curve.c b/source/blender/editors/transform/transform_convert_curve.c
index 00525c33dd9..f294bbbf0aa 100644
--- a/source/blender/editors/transform/transform_convert_curve.c
+++ b/source/blender/editors/transform/transform_convert_curve.c
@@ -441,7 +441,6 @@ void createTransCurveVerts(TransInfo *t)
 void recalcData_curve(TransInfo *t)
 {
   if (t->state != TRANS_CANCEL) {
-    transform_convert_clip_mirror_modifier_apply(t);
     applyProject(t);
   }
 
@@ -460,7 +459,10 @@ void recalcData_curve(TransInfo *t)
       }
     }
     else {
-      /* Normal updating */
+      /* Apply clipping after so we never project past the clip plane T25423. */
+      transform_convert_clip_mirror_modifier_apply(tc);
+
+      /* Normal updating. */
       BKE_curve_dimension_update(cu);
     }
   }
diff --git a/source/blender/editors/transform/transform_convert_mesh.c b/source/blender/editors/transform/transform_convert_mesh.c
index 0cbbb6ab428..74be1ffb04f 100644
--- a/source/blender/editors/transform/transform_convert_mesh.c
+++ b/source/blender/editors/transform/transform_convert_mesh.c
@@ -1519,33 +1519,30 @@ static void tc_mesh_customdatacorrect_apply_vert(struct TransCustomDataLayer *tc
   }
 }
 
-static void tc_mesh_customdatacorrect_apply(TransInfo *t, bool is_final)
+static void tc_mesh_customdatacorrect_apply(TransDataContainer *tc, bool is_final)
 {
-  FOREACH_TRANS_DATA_CONTAINER (t, tc) {
-    if (!tc->custom.type.data) {
-      continue;
-    }
-    struct TransCustomDataLayer *tcld = tc->custom.type.data;
-    const bool use_merge_group = tcld->use_merge_group;
+  if (!tc->custom.type.data) {
+    return;
+  }
+  struct TransCustomDataLayer *tcld = tc->custom.type.data;
+  const bool use_merge_group = tcld->use_merge_group;
 
-    struct TransCustomDataMergeGroup *merge_data = tcld->merge_group.data;
-    TransData *tob = tc->data;
-    for (int i = tc->data_len; i--; tob++) {
-      tc_mesh_customdatacorrect_apply_vert(tcld, (TransDataBasic *)tob, merge_data, is_final);
+  struct TransCustomDataMergeGroup *merge_data = tcld->merge_group.data;
+  TransData *tob = tc->data;
+  for (int i = tc->data_len; i--; tob++) {
+    tc_mesh_customdatacorrect_apply_vert(tcld, (TransDataBasic *)tob, merge_data, is_final);
 
-      if (use_merge_group) {
-        merge_data++;
-      }
+    if (use_merge_group) {
+      merge_data++;
     }
+  }
 
-    TransDataMirror *td_mirror = tc->data_mirror;
-    for (int i = tc->data_mirror_len; i--; td_mirror++) {
-      tc_mesh_customdatacorrect_apply_vert(
-          tcld, (TransDataBasic *)td_mirror, merge_data, is_final);
+  TransDataMirror *td_mirror = tc->data_mirror;
+  for (int i = tc->data_mirror_len; i--; td_mirror++) {
+    tc_mesh_customdatacorrect_apply_vert(tcld, (TransDataBasic *)td_mirror, merge_data, is_final);
 
-      if (use_merge_group) {
-        merge_data++;
-      }
+    if (use_merge_group) {
+      merge_data++;
     }
   }
 }
@@ -1585,57 +1582,59 @@ static void tc_mesh_customdatacorrect_restore(struct TransInfo *t)
 /** \name Recalc Mesh Data
  * \{ */
 
-static void tc_mesh_transdata_mirror_apply(TransInfo *t)
+static void tc_mesh_transdata_mirror_apply(TransDataContainer *tc)
 {
-  FOREACH_TRANS_DATA_CONTAINER (t, tc) {
-    if (tc->use_mirror_axis_any) {
-      int i;
-      TransData *td;
-      for (i = 0, td = tc->data; i < tc->data_len; i++, td++) {
-        if (td->flag & (TD_MIRROR_EDGE_X | TD_MIRROR_EDGE_Y | TD_MIRROR_EDGE_Z)) {
-          if (td->flag & TD_MIRROR_EDGE_X) {
-            td->loc[0] = 0.0f;
-          }
-          if (td->flag & TD_MIRROR_EDGE_Y) {
-            td->loc[1] = 0.0f;
-          }
-          if (td->flag & TD_MIRROR_EDGE_Z) {
-            td->loc[2] = 0.0f;
-          }
-        }
-      }
-
-      TransDataMirror *td_mirror = tc->data_mirror;
-      for (i = 0; i < tc->data_mirror_len; i++, td_mirror++) {
-        copy_v3_v3(td_mirror->loc, td_mirror->loc_src);
-        if (td_mirror->flag & TD_MIRROR_X)

@@ Diff output truncated at 10240 characters. @@



More information about the Bf-blender-cvs mailing list