[Bf-blender-cvs] [f71d89bb047] master: Fix T69804: Transform tools in sculpt mode fails with transformed objects

Pablo Dobarro noreply at git.blender.org
Fri Sep 13 16:28:37 CEST 2019


Commit: f71d89bb047e33e8990e2d87d19484b09452d3ca
Author: Pablo Dobarro
Date:   Fri Sep 13 16:27:53 2019 +0200
Branches: master
https://developer.blender.org/rBf71d89bb047e33e8990e2d87d19484b09452d3ca

Fix T69804: Transform tools in sculpt mode fails with transformed objects

Reviewed By: mano-wii

Maniphest Tasks: T69804

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

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

M	source/blender/editors/sculpt_paint/sculpt.c
M	source/blender/editors/transform/transform.c
M	source/blender/editors/transform/transform_convert_sculpt.c

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

diff --git a/source/blender/editors/sculpt_paint/sculpt.c b/source/blender/editors/sculpt_paint/sculpt.c
index afbe7e14794..768a6976567 100644
--- a/source/blender/editors/sculpt_paint/sculpt.c
+++ b/source/blender/editors/sculpt_paint/sculpt.c
@@ -9110,14 +9110,6 @@ void ED_sculpt_init_transform(struct bContext *C)
   copy_v3_v3(ss->init_pivot_pos, ss->pivot_pos);
   copy_v4_v4(ss->init_pivot_rot, ss->pivot_rot);
 
-  ss->init_pivot_scale[0] = 1.0f;
-  ss->init_pivot_scale[1] = 1.0f;
-  ss->init_pivot_scale[2] = 1.0f;
-
-  ss->pivot_scale[0] = 1.0f;
-  ss->pivot_scale[1] = 1.0f;
-  ss->pivot_scale[2] = 1.0f;
-
   sculpt_undo_push_begin("Transform");
   BKE_sculpt_update_object_for_edit(depsgraph, ob, false, false);
 
diff --git a/source/blender/editors/transform/transform.c b/source/blender/editors/transform/transform.c
index 1effbcbd635..8839abe70a2 100644
--- a/source/blender/editors/transform/transform.c
+++ b/source/blender/editors/transform/transform.c
@@ -3869,7 +3869,7 @@ static void ElementResize(TransInfo *t, TransDataContainer *tc, TransData *td, f
   if (td->ext && td->ext->size) {
     float fsize[3];
 
-    if (t->flag & (T_OBJECT | T_TEXTURE | T_POSE)) {
+    if ((t->options & CTX_SCULPT) || t->flag & (T_OBJECT | T_TEXTURE | T_POSE)) {
       float obsizemat[3][3];
       /* Reorient the size mat to fit the oriented object. */
       mul_m3_m3m3(obsizemat, tmat, td->axismtx);
diff --git a/source/blender/editors/transform/transform_convert_sculpt.c b/source/blender/editors/transform/transform_convert_sculpt.c
index b02ad71da07..6b584f806b8 100644
--- a/source/blender/editors/transform/transform_convert_sculpt.c
+++ b/source/blender/editors/transform/transform_convert_sculpt.c
@@ -58,17 +58,14 @@ void createTransSculpt(TransInfo *t)
     TransDataContainer *tc = t->data_container;
     tc->data_len = 1;
     tc->is_active = 1;
-    td = tc->data = MEM_callocN(sizeof(TransData), "TransTexspace");
-    td->ext = tc->data_ext = MEM_callocN(sizeof(TransDataExtension), "TransTexspace");
+    td = tc->data = MEM_callocN(sizeof(TransData), "TransSculpt");
+    td->ext = tc->data_ext = MEM_callocN(sizeof(TransDataExtension), "TransSculpt");
   }
 
   td->flag = TD_SELECTED;
   copy_v3_v3(td->center, ss->pivot_pos);
-  td->ob = NULL;
-
-  float tquat[4];
-  normalize_qt_qt(tquat, ss->pivot_rot);
-  quat_to_mat3(td->axismtx, tquat);
+  mul_m4_v3(ob->obmat, td->center);
+  td->ob = ob;
 
   td->loc = ss->pivot_pos;
   copy_v3_v3(td->iloc, ss->pivot_pos);
@@ -77,10 +74,18 @@ void createTransSculpt(TransInfo *t)
     ss->pivot_rot[3] = 1.0f;
   }
 
+  float obmat_inv[3][3];
+  copy_m3_m4(obmat_inv, ob->obmat);
+  invert_m3(obmat_inv);
+
   td->ext->rot = NULL;
   td->ext->rotAxis = NULL;
   td->ext->rotAngle = NULL;
   td->ext->quat = ss->pivot_rot;
+  copy_m4_m4(td->ext->obmat, ob->obmat);
+  copy_m3_m3(td->ext->l_smtx, obmat_inv);
+  copy_m3_m4(td->ext->r_mtx, ob->obmat);
+  copy_m3_m3(td->ext->r_smtx, obmat_inv);
 
   copy_qt_qt(td->ext->iquat, ss->pivot_rot);
   td->ext->rotOrder = ROT_MODE_QUAT;
@@ -89,13 +94,12 @@ void createTransSculpt(TransInfo *t)
   ss->pivot_scale[1] = 1.0f;
   ss->pivot_scale[2] = 1.0f;
   td->ext->size = ss->pivot_scale;
-  copy_v3_v3(td->ext->isize, ss->pivot_scale);
+  copy_v3_v3(ss->init_pivot_scale, ss->pivot_scale);
+  copy_v3_v3(td->ext->isize, ss->init_pivot_scale);
 
-  float obmat_inv[3][3];
-  copy_m3_m4(obmat_inv, ob->obmat);
-  invert_m3(obmat_inv);
   copy_m3_m3(td->smtx, obmat_inv);
   copy_m3_m4(td->mtx, ob->obmat);
+  copy_m3_m4(td->axismtx, ob->obmat);
 }
 
 /** \} */



More information about the Bf-blender-cvs mailing list