[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