diff options
Diffstat (limited to 'source/blender/editors/include/ED_object.h')
-rw-r--r-- | source/blender/editors/include/ED_object.h | 83 |
1 files changed, 62 insertions, 21 deletions
diff --git a/source/blender/editors/include/ED_object.h b/source/blender/editors/include/ED_object.h index d27eeb270ac..32e62a6436c 100644 --- a/source/blender/editors/include/ED_object.h +++ b/source/blender/editors/include/ED_object.h @@ -24,6 +24,9 @@ #ifndef __ED_OBJECT_H__ #define __ED_OBJECT_H__ +#include "BLI_compiler_attrs.h" +#include "DNA_object_enums.h" + #ifdef __cplusplus extern "C" { #endif @@ -54,9 +57,6 @@ struct wmOperator; struct wmOperatorType; struct wmWindowManager; -#include "DNA_object_enums.h" -#include "BLI_compiler_attrs.h" - /* object_edit.c */ /* context.object */ struct Object *ED_object_context(struct bContext *C); @@ -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); @@ -101,6 +146,12 @@ typedef enum eObjectSelect_Mode { BA_INVERT = 2, } eObjectSelect_Mode; +typedef enum eObClearParentTypes { + CLEAR_PARENT_ALL = 0, + CLEAR_PARENT_KEEP_TRANSFORM, + CLEAR_PARENT_INVERSE, +} eObClearParentTypes; + #ifdef __RNA_TYPES_H__ extern struct EnumPropertyItem prop_clear_parent_types[]; extern struct EnumPropertyItem prop_make_parent_types[]; @@ -195,7 +246,7 @@ void ED_object_sculptmode_exit(struct bContext *C, struct Depsgraph *depsgraph); void ED_object_location_from_view(struct bContext *C, float loc[3]); void ED_object_rotation_from_quat(float rot[3], const float quat[4], const char align_axis); void ED_object_rotation_from_view(struct bContext *C, float rot[3], const char align_axis); -void ED_object_base_init_transform_on_add(struct Object *obejct, +void ED_object_base_init_transform_on_add(struct Object *object, const float loc[3], const float rot[3]); float ED_object_new_primitive_matrix(struct bContext *C, @@ -317,13 +368,13 @@ int ED_object_modifier_convert(struct ReportList *reports, struct ViewLayer *view_layer, struct Object *ob, struct ModifierData *md); -int ED_object_modifier_apply(struct Main *bmain, - struct ReportList *reports, - struct Depsgraph *depsgraph, - struct Scene *scene, - struct Object *ob, - struct ModifierData *md, - int mode); +bool ED_object_modifier_apply(struct Main *bmain, + struct ReportList *reports, + struct Depsgraph *depsgraph, + struct Scene *scene, + struct Object *ob, + struct ModifierData *md, + int mode); int ED_object_modifier_copy(struct ReportList *reports, struct Object *ob, struct ModifierData *md); @@ -421,16 +472,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 |