[Bf-blender-cvs] [c63442d2f20] blender-v2.92-release: Fix T84673: Skin resize operator always using object origin as pivot

Germano Cavalcante noreply at git.blender.org
Fri Jan 15 15:26:39 CET 2021


Commit: c63442d2f203a814faedad3ff708bf3cc43a6ff1
Author: Germano Cavalcante
Date:   Fri Jan 15 11:24:11 2021 -0300
Branches: blender-v2.92-release
https://developer.blender.org/rBc63442d2f203a814faedad3ff708bf3cc43a6ff1

Fix T84673: Skin resize operator always using object origin as pivot

The TransData converted to work in Skin Resize had no defined center.

Caused by rB54ee4109143b

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

M	source/blender/editors/transform/transform_convert_mesh_skin.c

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

diff --git a/source/blender/editors/transform/transform_convert_mesh_skin.c b/source/blender/editors/transform/transform_convert_mesh_skin.c
index 4c42ed6ca1e..1807e9adcd1 100644
--- a/source/blender/editors/transform/transform_convert_mesh_skin.c
+++ b/source/blender/editors/transform/transform_convert_mesh_skin.c
@@ -48,7 +48,23 @@
  *
  * \{ */
 
-static void mesh_skin_transdata_create(TransDataBasic *td, BMEditMesh *em, BMVert *eve)
+static float *mesh_skin_transdata_center(const struct TransIslandData *island_data,
+                                         const int island_index,
+                                         BMVert *eve)
+{
+  if (island_data->center && island_index != -1) {
+    return island_data->center[island_index];
+  }
+  else {
+    return eve->co;
+  }
+}
+
+static void mesh_skin_transdata_create(TransDataBasic *td,
+                                       BMEditMesh *em,
+                                       BMVert *eve,
+                                       const struct TransIslandData *island_data,
+                                       const int island_index)
 {
   BLI_assert(BM_elem_flag_test(eve, BM_ELEM_HIDDEN) == 0);
   MVertSkin *vs = CustomData_bmesh_get(&em->bm->vdata, eve->head.data, CD_MVERT_SKIN);
@@ -65,6 +81,7 @@ static void mesh_skin_transdata_create(TransDataBasic *td, BMEditMesh *em, BMVer
     td->flag |= TD_SELECTED;
   }
 
+  copy_v3_v3(td->center, mesh_skin_transdata_center(island_data, island_index, eve));
   td->extra = eve;
 }
 
@@ -188,8 +205,15 @@ void createTransMeshSkin(TransInfo *t)
         continue;
       }
 
+      int island_index = -1;
+      if (island_data.island_vert_map) {
+        const int connected_index = (dists_index && dists_index[a] != -1) ? dists_index[a] : a;
+        island_index = island_data.island_vert_map[connected_index];
+      }
+
       if (mirror_data.vert_map && mirror_data.vert_map[a].index != -1) {
-        mesh_skin_transdata_create((TransDataBasic *)td_mirror, em, eve);
+        mesh_skin_transdata_create(
+            (TransDataBasic *)td_mirror, em, eve, &island_data, island_index);
 
         int elem_index = mirror_data.vert_map[a].index;
         BMVert *v_src = BM_vert_at_index(bm, elem_index);
@@ -200,7 +224,7 @@ void createTransMeshSkin(TransInfo *t)
         td_mirror++;
       }
       else if (prop_mode || BM_elem_flag_test(eve, BM_ELEM_SELECT)) {
-        mesh_skin_transdata_create((TransDataBasic *)td, em, eve);
+        mesh_skin_transdata_create((TransDataBasic *)td, em, eve, &island_data, island_index);
 
         if (t->around == V3D_AROUND_LOCAL_ORIGINS) {
           createSpaceNormal(td->axismtx, eve->no);



More information about the Bf-blender-cvs mailing list