Cleanup: remove edit-mode check in vertex coordinate access
authorCampbell Barton <ideasman42@gmail.com>
Thu, 22 Aug 2019 03:20:05 +0000 (13:20 +1000)
committerCampbell Barton <ideasman42@gmail.com>
Thu, 22 Aug 2019 03:23:27 +0000 (13:23 +1000)
This makes the function more predictable since other object
types don't access edit-mode data.

source/blender/blenkernel/BKE_lattice.h
source/blender/blenkernel/intern/lattice.c

index fbb98b290f0a7c771aa2653586b237e4bb16cedd..8395b182171c9f43aad800701c11ecd9cc7a25ec 100644 (file)
@@ -89,6 +89,7 @@ void armature_deform_verts(struct Object *armOb,
                            struct bGPDstroke *gps);
 
 float (*BKE_lattice_vert_coords_alloc(const struct Lattice *lt, int *r_vert_len))[3];
+void BKE_lattice_vert_coords_get(const struct Lattice *lt, float (*vert_coords)[3]);
 void BKE_lattice_vert_coords_apply(struct Lattice *lt, const float (*vert_coords)[3]);
 void BKE_lattice_modifiers_calc(struct Depsgraph *depsgraph,
                                 struct Scene *scene,
index 64ba02db30d152791069e3f0efe9e8cf30304c44..0ceca1206f69ae2d39de5eb22094331f1dd93923 100644 (file)
@@ -1057,22 +1057,19 @@ void outside_lattice(Lattice *lt)
   }
 }
 
-float (*BKE_lattice_vert_coords_alloc(const Lattice *lt, int *r_vert_len))[3]
+void BKE_lattice_vert_coords_get(const Lattice *lt, float (*vert_coords)[3])
 {
-  int vert_len;
-  float(*vert_coords)[3];
-
-  if (lt->editlatt) {
-    lt = lt->editlatt->latt;
-  }
-  vert_len = *r_vert_len = lt->pntsu * lt->pntsv * lt->pntsw;
-
-  vert_coords = MEM_mallocN(sizeof(*vert_coords) * vert_len, __func__);
-
+  const int vert_len = lt->pntsu * lt->pntsv * lt->pntsw;
   for (int i = 0; i < vert_len; i++) {
     copy_v3_v3(vert_coords[i], lt->def[i].vec);
   }
+}
 
+float (*BKE_lattice_vert_coords_alloc(const Lattice *lt, int *r_vert_len))[3]
+{
+  const int vert_len = *r_vert_len = lt->pntsu * lt->pntsv * lt->pntsw;
+  float(*vert_coords)[3] = MEM_mallocN(sizeof(*vert_coords) * vert_len, __func__);
+  BKE_lattice_vert_coords_get(lt, vert_coords);
   return vert_coords;
 }
 
@@ -1123,7 +1120,11 @@ void BKE_lattice_modifiers_calc(struct Depsgraph *depsgraph, Scene *scene, Objec
     }
 
     if (!vert_coords) {
-      vert_coords = BKE_lattice_vert_coords_alloc(ob_orig->data, &numVerts);
+      Lattice *lt_orig = ob_orig->data;
+      if (lt_orig->editlatt) {
+        lt_orig = lt_orig->editlatt->latt;
+      }
+      vert_coords = BKE_lattice_vert_coords_alloc(lt_orig, &numVerts);
     }
     mti->deformVerts(md, &mectx, NULL, vert_coords, numVerts);
   }
@@ -1137,7 +1138,11 @@ void BKE_lattice_modifiers_calc(struct Depsgraph *depsgraph, Scene *scene, Objec
   else {
     /* Displist won't do anything; this is just for posterity's sake until we remove it. */
     if (!vert_coords) {
-      vert_coords = BKE_lattice_vert_coords_alloc(ob_orig->data, &numVerts);
+      Lattice *lt_orig = ob_orig->data;
+      if (lt_orig->editlatt) {
+        lt_orig = lt_orig->editlatt->latt;
+      }
+      vert_coords = BKE_lattice_vert_coords_alloc(lt_orig, &numVerts);
     }
 
     DispList *dl = MEM_callocN(sizeof(*dl), "lt_dl");