[Bf-blender-cvs] [6aa82d16868] master: Object: 'Affect Only Origins' support for 'Clear Transform'

Campbell Barton noreply at git.blender.org
Sun Dec 22 13:37:48 CET 2019


Commit: 6aa82d16868c4b790a22cc1c67eecd94ff54ae11
Author: Campbell Barton
Date:   Sat Dec 21 13:12:30 2019 +1100
Branches: master
https://developer.blender.org/rB6aa82d16868c4b790a22cc1c67eecd94ff54ae11

Object: 'Affect Only Origins' support for 'Clear Transform'

Resolves T70410

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

M	source/blender/editors/object/object_transform.c

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

diff --git a/source/blender/editors/object/object_transform.c b/source/blender/editors/object/object_transform.c
index 826d1db2538..45b9c6306ac 100644
--- a/source/blender/editors/object/object_transform.c
+++ b/source/blender/editors/object/object_transform.c
@@ -72,6 +72,7 @@
 #include "ED_screen.h"
 #include "ED_view3d.h"
 #include "ED_gpencil.h"
+#include "ED_object.h"
 
 #include "MEM_guardedalloc.h"
 
@@ -292,6 +293,8 @@ static int object_clear_transform_generic_exec(bContext *C,
                                                void (*clear_func)(Object *, const bool),
                                                const char default_ksName[])
 {
+  Depsgraph *depsgraph = CTX_data_depsgraph_pointer(C);
+  Main *bmain = CTX_data_main(C);
   Scene *scene = CTX_data_scene(C);
   KeyingSet *ks;
   const bool clear_delta = RNA_boolean_get(op->ptr, "clear_delta");
@@ -304,6 +307,16 @@ static int object_clear_transform_generic_exec(bContext *C,
     return OPERATOR_CANCELLED;
   }
 
+  /* Support transforming the object data. */
+  const bool use_transform_data_origin = (scene->toolsettings->transform_flag &
+                                          SCE_XFORM_DATA_ORIGIN);
+  struct XFormObjectData_Container *xds = NULL;
+
+  if (use_transform_data_origin) {
+    BKE_scene_graph_evaluated_ensure(depsgraph, bmain);
+    xds = ED_object_data_xform_container_create();
+  }
+
   /* get KeyingSet to use */
   ks = ANIM_get_keyingset_for_autokeying(scene, default_ksName);
 
@@ -311,18 +324,29 @@ static int object_clear_transform_generic_exec(bContext *C,
    * (so that object-transform clearing won't be applied at same time as bone-clearing)
    */
   CTX_DATA_BEGIN (C, Object *, ob, selected_editable_objects) {
-    if (!(ob->mode & OB_MODE_WEIGHT_PAINT)) {
-      /* run provided clearing function */
-      clear_func(ob, clear_delta);
-
-      ED_autokeyframe_object(C, scene, ob, ks);
+    if (ob->mode & OB_MODE_WEIGHT_PAINT) {
+      continue;
+    }
 
-      /* tag for updates */
-      DEG_id_tag_update(&ob->id, ID_RECALC_TRANSFORM);
+    if (use_transform_data_origin) {
+      ED_object_data_xform_container_item_ensure(xds, ob);
     }
+
+    /* run provided clearing function */
+    clear_func(ob, clear_delta);
+
+    ED_autokeyframe_object(C, scene, ob, ks);
+
+    /* tag for updates */
+    DEG_id_tag_update(&ob->id, ID_RECALC_TRANSFORM);
   }
   CTX_DATA_END;
 
+  if (use_transform_data_origin) {
+    ED_object_data_xform_container_update_all(xds, bmain, depsgraph);
+    ED_object_data_xform_container_destroy(xds);
+  }
+
   /* this is needed so children are also updated */
   WM_event_add_notifier(C, NC_OBJECT | ND_TRANSFORM, NULL);



More information about the Bf-blender-cvs mailing list