[Bf-blender-cvs] [711b65407fc] master: Transform: Refactor texture space 'transform_convert' data

Germano Cavalcante noreply at git.blender.org
Mon Feb 8 14:01:17 CET 2021


Commit: 711b65407fc37bf07d929d80824c00777ad7b3d2
Author: Germano Cavalcante
Date:   Sat Feb 6 16:37:16 2021 -0300
Branches: master
https://developer.blender.org/rB711b65407fc37bf07d929d80824c00777ad7b3d2

Transform: Refactor texture space 'transform_convert' data

The changes are:
- Split conversion of the texture space data to its own file.
- Skip adding keyframes with AutoKeyframes.
- Skip recalculation of the trasform dependencies between objects.
- Skip `special_aftertrans_update_...`.

No real user functional changes

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

M	source/blender/editors/transform/CMakeLists.txt
M	source/blender/editors/transform/transform_convert.c
M	source/blender/editors/transform/transform_convert.h
M	source/blender/editors/transform/transform_convert_object.c
A	source/blender/editors/transform/transform_convert_object_texspace.c

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

diff --git a/source/blender/editors/transform/CMakeLists.txt b/source/blender/editors/transform/CMakeLists.txt
index faed8abb202..b0bc5c6abda 100644
--- a/source/blender/editors/transform/CMakeLists.txt
+++ b/source/blender/editors/transform/CMakeLists.txt
@@ -55,6 +55,7 @@ set(SRC
   transform_convert_nla.c
   transform_convert_node.c
   transform_convert_object.c
+  transform_convert_object_texspace.c
   transform_convert_paintcurve.c
   transform_convert_particle.c
   transform_convert_sculpt.c
diff --git a/source/blender/editors/transform/transform_convert.c b/source/blender/editors/transform/transform_convert.c
index d18ffc0cd28..4f581ad962d 100644
--- a/source/blender/editors/transform/transform_convert.c
+++ b/source/blender/editors/transform/transform_convert.c
@@ -892,7 +892,6 @@ void special_aftertrans_update(bContext *C, TransInfo *t)
       special_aftertrans_update__node(C, t);
       break;
     case TC_OBJECT:
-    case TC_OBJECT_TEXSPACE:
       special_aftertrans_update__object(C, t);
       break;
     case TC_SCULPT:
@@ -912,6 +911,7 @@ void special_aftertrans_update(bContext *C, TransInfo *t)
     case TC_LATTICE_VERTS:
     case TC_MBALL_VERTS:
     case TC_MESH_UV:
+    case TC_OBJECT_TEXSPACE:
     case TC_PAINT_CURVE_VERTS:
     case TC_PARTICLE_VERTS:
     case TC_NONE:
@@ -1552,9 +1552,11 @@ void recalcData(TransInfo *t)
       flushTransNodes(t);
       break;
     case TC_OBJECT:
-    case TC_OBJECT_TEXSPACE:
       recalcData_objects(t);
       break;
+    case TC_OBJECT_TEXSPACE:
+      recalcData_texspace(t);
+      break;
     case TC_PAINT_CURVE_VERTS:
       flushTransPaintCurve(t);
       break;
diff --git a/source/blender/editors/transform/transform_convert.h b/source/blender/editors/transform/transform_convert.h
index 4695d02b25a..00aa72d97f2 100644
--- a/source/blender/editors/transform/transform_convert.h
+++ b/source/blender/editors/transform/transform_convert.h
@@ -187,10 +187,13 @@ void special_aftertrans_update__node(bContext *C, TransInfo *t);
 
 /* transform_convert_object.c */
 void createTransObject(bContext *C, TransInfo *t);
-void createTransTexspace(TransInfo *t);
 void recalcData_objects(TransInfo *t);
 void special_aftertrans_update__object(bContext *C, TransInfo *t);
 
+/* transform_convert_object_texspace.c */
+void createTransTexspace(TransInfo *t);
+void recalcData_texspace(TransInfo *t);
+
 /* transform_convert_paintcurve.c */
 void createTransPaintCurveVerts(bContext *C, TransInfo *t);
 void flushTransPaintCurve(TransInfo *t);
diff --git a/source/blender/editors/transform/transform_convert_object.c b/source/blender/editors/transform/transform_convert_object.c
index 1b1573ecd73..5f6f00716f9 100644
--- a/source/blender/editors/transform/transform_convert_object.c
+++ b/source/blender/editors/transform/transform_convert_object.c
@@ -21,12 +21,8 @@
  * \ingroup edtransform
  */
 
-#include "DNA_mesh_types.h"
-
 #include "MEM_guardedalloc.h"
 
-#include "BLI_compiler_compat.h"
-#include "BLI_ghash.h"
 #include "BLI_listbase.h"
 #include "BLI_math.h"
 
@@ -46,11 +42,11 @@
 #include "DEG_depsgraph_query.h"
 
 #include "transform.h"
+#include "transform_orientations.h"
 #include "transform_snap.h"
 
 /* Own include. */
 #include "transform_convert.h"
-#include "transform_orientations.h"
 
 /* -------------------------------------------------------------------- */
 /** \name Object Mode Custom Data
@@ -712,66 +708,6 @@ void createTransObject(bContext *C, TransInfo *t)
 
 /** \} */
 
-/* -------------------------------------------------------------------- */
-/** \name Texture Space Transform Creation
- *
- * Instead of transforming the selection, move the 2D/3D cursor.
- *
- * \{ */
-
-void createTransTexspace(TransInfo *t)
-{
-  ViewLayer *view_layer = t->view_layer;
-  TransData *td;
-  Object *ob;
-  ID *id;
-  short *texflag;
-
-  ob = OBACT(view_layer);
-
-  if (ob == NULL) { /* Shouldn't logically happen, but still. */
-    return;
-  }
-
-  id = ob->data;
-  if (id == NULL || !ELEM(GS(id->name), ID_ME, ID_CU, ID_MB)) {
-    BKE_report(t->reports, RPT_ERROR, "Unsupported object type for text-space transform");
-    return;
-  }
-
-  if (BKE_object_obdata_is_libdata(ob)) {
-    BKE_report(t->reports, RPT_ERROR, "Linked data can't text-space transform");
-    return;
-  }
-
-  {
-    BLI_assert(t->data_container_len == 1);
-    TransDataContainer *tc = t->data_container;
-    tc->data_len = 1;
-    td = tc->data = MEM_callocN(sizeof(TransData), "TransTexspace");
-    td->ext = tc->data_ext = MEM_callocN(sizeof(TransDataExtension), "TransTexspace");
-  }
-
-  td->flag = TD_SELECTED;
-  copy_v3_v3(td->center, ob->obmat[3]);
-  td->ob = ob;
-
-  copy_m3_m4(td->mtx, ob->obmat);
-  copy_m3_m4(td->axismtx, ob->obmat);
-  normalize_m3(td->axismtx);
-  pseudoinverse_m3_m3(td->smtx, td->mtx, PSEUDOINVERSE_EPSILON);
-
-  if (BKE_object_obdata_texspace_get(ob, &texflag, &td->loc, &td->ext->size)) {
-    ob->dtx |= OB_TEXSPACE;
-    *texflag &= ~ME_AUTOSPACE;
-  }
-
-  copy_v3_v3(td->iloc, td->loc);
-  copy_v3_v3(td->ext->isize, td->ext->size);
-}
-
-/** \} */
-
 /* -------------------------------------------------------------------- */
 /** \name Transform (Auto-Keyframing)
  * \{ */
@@ -962,10 +898,6 @@ void recalcData_objects(TransInfo *t)
        * otherwise proxies don't function correctly
        */
       DEG_id_tag_update(&ob->id, ID_RECALC_TRANSFORM);
-
-      if (t->options & CTX_TEXTURE_SPACE) {
-        DEG_id_tag_update(&ob->id, ID_RECALC_GEOMETRY);
-      }
     }
   }
 
@@ -991,7 +923,7 @@ void recalcData_objects(TransInfo *t)
 
 void special_aftertrans_update__object(bContext *C, TransInfo *t)
 {
-  BLI_assert(t->options & (CTX_OBJECT | CTX_TEXTURE_SPACE));
+  BLI_assert(t->options & CTX_OBJECT);
 
   Object *ob;
   const bool canceled = (t->state == TRANS_CANCEL);
diff --git a/source/blender/editors/transform/transform_convert_object_texspace.c b/source/blender/editors/transform/transform_convert_object_texspace.c
new file mode 100644
index 00000000000..195eb941b3b
--- /dev/null
+++ b/source/blender/editors/transform/transform_convert_object_texspace.c
@@ -0,0 +1,126 @@
+/*
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ * The Original Code is Copyright (C) 2001-2002 by NaN Holding BV.
+ * All rights reserved.
+ */
+
+/** \file
+ * \ingroup edtransform
+ */
+
+#include "MEM_guardedalloc.h"
+
+#include "BLI_math.h"
+
+#include "BKE_animsys.h"
+#include "BKE_context.h"
+#include "BKE_object.h"
+#include "BKE_report.h"
+
+#include "DNA_mesh_types.h"
+
+#include "transform.h"
+#include "transform_snap.h"
+
+/* Own include. */
+#include "transform_convert.h"
+
+/* -------------------------------------------------------------------- */
+/** \name Texture Space Transform Creation
+ *
+ * Instead of transforming the selection, move the 2D/3D cursor.
+ *
+ * \{ */
+
+void createTransTexspace(TransInfo *t)
+{
+  ViewLayer *view_layer = t->view_layer;
+  TransData *td;
+  Object *ob;
+  ID *id;
+  short *texflag;
+
+  ob = OBACT(view_layer);
+
+  if (ob == NULL) { /* Shouldn't logically happen, but still. */
+    return;
+  }
+
+  id = ob->data;
+  if (id == NULL || !ELEM(GS(id->name), ID_ME, ID_CU, ID_MB)) {
+    BKE_report(t->reports, RPT_ERROR, "Unsupported object type for text-space transform");
+    return;
+  }
+
+  if (BKE_object_obdata_is_libdata(ob)) {
+    BKE_report(t->reports, RPT_ERROR, "Linked data can't text-space transform");
+    return;
+  }
+
+  {
+    BLI_assert(t->data_container_len == 1);
+    TransDataContainer *tc = t->data_container;
+    tc->data_len = 1;
+    td = tc->data = MEM_callocN(sizeof(TransData), "TransTexspace");
+    td->ext = tc->data_ext = MEM_callocN(sizeof(TransDataExtension), "TransTexspace");
+  }
+
+  td->flag = TD_SELECTED;
+  copy_v3_v3(td->center, ob->obmat[3]);
+  td->ob = ob;
+
+  copy_m3_m4(td->mtx, ob->obmat);
+  copy_m3_m4(td->axismtx, ob->obmat);
+  normalize_m3(td->axismtx);
+  pseudoinverse_m3_m3(td->smtx, td->mtx, PSEUDOINVERSE_EPSILON);
+
+  if (BKE_object_obdata_texspace_get(ob, &texflag, &td->loc, &td->ext->size)) {
+    ob->dtx |= OB_TEXSPACE;
+    *texflag &= ~ME_AUTOSPACE;
+  }
+
+  copy_v3_v3(td->iloc, td->loc);
+  copy_v3_v3(td->ext->isize, td->ext->size);
+}
+
+/** \} */
+
+/* -------------------------------------------------------------------- */
+/** \name Recalc Data object
+ *
+ * \{ */
+
+/* helper for recalcData() - for object transforms, typically in the 3D view */
+void recalcData_texspace(TransInfo *t)
+{
+
+  if (t->state != TRANS_CANCEL) {
+    applyProject(t);
+  }
+
+  FOREACH_TRANS_DATA_CONTAINER (t, tc) {
+    TransData *td = tc->data;
+
+    for (int i = 0; i < tc->data_len; i++, td++) {
+      if (td->flag & TD_SKIP) {
+        continue;
+      }
+      DEG_id_tag_update(&td->ob->id, ID_RECALC_GEOMETRY);
+    }
+  }
+}
+
+/** \} */



More information about the Bf-blender-cvs mailing list