diff options
author | Campbell Barton <ideasman42@gmail.com> | 2020-02-01 05:34:27 +0300 |
---|---|---|
committer | Campbell Barton <ideasman42@gmail.com> | 2020-02-01 05:34:27 +0300 |
commit | 3ba5461af0c8b1273d3daf87d050c24a690273be (patch) | |
tree | f444c816d456e8adcfa9c9736decaa6e0507958f /source/blender/editors/include | |
parent | 253dbdbb39147d4a74ae450964315a4cfd78a837 (diff) |
Object: support 'Affect Parents' for snap/clear transform
Resolves T69450
Diffstat (limited to 'source/blender/editors/include')
-rw-r--r-- | source/blender/editors/include/ED_object.h | 55 |
1 files changed, 45 insertions, 10 deletions
diff --git a/source/blender/editors/include/ED_object.h b/source/blender/editors/include/ED_object.h index d27eeb270ac..a3b7d6bd1c1 100644 --- a/source/blender/editors/include/ED_object.h +++ b/source/blender/editors/include/ED_object.h @@ -73,6 +73,51 @@ bool ED_object_calc_active_center_for_posemode(struct Object *ob, float r_center[3]); bool ED_object_calc_active_center(struct Object *ob, const bool select_only, float r_center[3]); +/* Object Data Container helper API. */ +struct XFormObjectData_Container; +struct XFormObjectData_Container *ED_object_data_xform_container_create(void); +void ED_object_data_xform_container_destroy(struct XFormObjectData_Container *xds); +void ED_object_data_xform_container_update_all(struct XFormObjectData_Container *xds, + struct Main *bmain, + struct Depsgraph *depsgraph); +void ED_object_data_xform_container_item_ensure(struct XFormObjectData_Container *xds, + struct Object *ob); + +/* Object Skip-Child Container helper API. */ +enum { + /** + * The parent is transformed, this is held in place. + */ + XFORM_OB_SKIP_CHILD_PARENT_IS_XFORM = 1, + /** + * The same as #XFORM_OB_SKIP_CHILD_PARENT_IS_XFORM, + * however this objects parent isn't transformed directly. + */ + XFORM_OB_SKIP_CHILD_PARENT_IS_XFORM_INDIRECT = 3, + /** + * Use the parent invert matrix to apply transformation, + * this is needed, because breaks in the selection chain prevents this from being transformed. + * This is used to add the transform which would have been added + * if there weren't breaks in the parent/child chain. + */ + XFORM_OB_SKIP_CHILD_PARENT_APPLY = 2, +}; +struct XFormObjectSkipChild_Container; +struct XFormObjectSkipChild_Container *ED_object_xform_skip_child_container_create(void); +void ED_object_xform_skip_child_container_item_ensure_from_array( + struct XFormObjectSkipChild_Container *xcs, + struct ViewLayer *view_layer, + struct Object **objects, + uint objects_len); +void ED_object_xform_skip_child_container_destroy(struct XFormObjectSkipChild_Container *xcs); +void ED_object_xform_skip_child_container_update_all(struct XFormObjectSkipChild_Container *xcs, + struct Main *bmain, + struct Depsgraph *depsgraph); +void ED_object_xform_skip_child_container_item_ensure(struct XFormObjectSkipChild_Container *xcs, + struct Object *ob, + struct Object *ob_parent_recurse, + int mode); + /* object_ops.c */ void ED_operatortypes_object(void); void ED_operatormacros_object(void); @@ -421,16 +466,6 @@ void ED_object_data_xform_by_mat4(struct XFormObjectData *xod, const float mat[4 void ED_object_data_xform_restore(struct XFormObjectData *xod); void ED_object_data_xform_tag_update(struct XFormObjectData *xod); -/* Container helper API. */ -struct XFormObjectData_Container; -struct XFormObjectData_Container *ED_object_data_xform_container_create(void); -void ED_object_data_xform_container_destroy(struct XFormObjectData_Container *xds); -void ED_object_data_xform_container_update_all(struct XFormObjectData_Container *xds, - struct Main *bmain, - struct Depsgraph *depsgraph); -void ED_object_data_xform_container_item_ensure(struct XFormObjectData_Container *xds, - struct Object *ob); - #ifdef __cplusplus } #endif |