Blender V4.3
ED_object.hh
Go to the documentation of this file.
1/* SPDX-FileCopyrightText: 2008 Blender Authors
2 *
3 * SPDX-License-Identifier: GPL-2.0-or-later */
4
9#pragma once
10
11#include <string>
12
13#include "BLI_compiler_attrs.h"
14#include "BLI_string_ref.hh"
15#include "BLI_vector.hh"
16
17#include "DNA_object_enums.h"
18#include "DNA_userdef_enums.h"
20
21struct Base;
22struct Depsgraph;
23struct EnumPropertyItem;
24struct ID;
26struct Main;
27struct ModifierData;
28struct Object;
29struct PointerRNA;
30struct ReportList;
31struct Scene;
32struct ShaderFxData;
33struct View3D;
34struct ViewLayer;
35struct bConstraint;
36struct bContext;
37struct bPoseChannel;
38struct uiLayout;
39struct wmKeyConfig;
40struct wmOperator;
41struct wmOperatorType;
42
44
45struct XFormObjectData;
46
47/* `object_edit.cc` */
48
56void collection_hide_menu_draw(const bContext *C, uiLayout *layout);
57
67 bContext *C, bool (*filter_fn)(const Object *ob, void *user_data), void *filter_user_data);
68
69/* `object_shapekey.cc` */
70
76bool shape_key_report_if_locked(const Object *obedit, ReportList *reports);
77
84
91
92/* `object_utils.cc` */
93
94bool calc_active_center_for_editmode(Object *obedit, bool select_only, float r_center[3]);
95bool calc_active_center_for_posemode(Object *ob, bool select_only, float r_center[3]);
96bool calc_active_center(Object *ob, bool select_only, float r_center[3]);
97
98/* Object Data Container helper API. */
107 Main *bmain,
108 Depsgraph *depsgraph);
110
112enum {
129};
130struct XFormObjectSkipChild_Container;
131XFormObjectSkipChild_Container *xform_skip_child_container_create();
132void xform_skip_child_container_item_ensure_from_array(XFormObjectSkipChild_Container *xcs,
133 const Scene *scene,
134 ViewLayer *view_layer,
135 Object **objects,
136 uint objects_len);
137void object_xform_skip_child_container_destroy(XFormObjectSkipChild_Container *xcs);
138void object_xform_skip_child_container_update_all(XFormObjectSkipChild_Container *xcs,
139 Main *bmain,
140 Depsgraph *depsgraph);
141void object_xform_skip_child_container_item_ensure(XFormObjectSkipChild_Container *xcs,
142 Object *ob,
143 Object *ob_parent_recurse,
144 int mode);
145
146void object_xform_array_m4(Object **objects, uint objects_len, const float matrix[4][4]);
147
148/* `object_ops.cc` */
149
152void keymap_object(wmKeyConfig *keyconf);
153
154/* `object_relations.cc` */
155
171
177
183
184#ifdef __RNA_TYPES_H__
189#endif
190
194bool parent_set(ReportList *reports,
195 const bContext *C,
196 Scene *scene,
197 Object *const ob,
198 Object *const par,
199 int partype,
200 bool xmirror,
201 bool keep_transform,
202 const int vert_par[3]);
203void parent_clear(Object *ob, int type);
204
213void base_select(Base *base, eObjectSelect_Mode mode);
217void base_activate(bContext *C, Base *base);
222void base_active_refresh(Main *bmain, Scene *scene, ViewLayer *view_layer);
227void base_free_and_unlink(Main *bmain, Scene *scene, Object *ob);
234 const Scene *scene, ViewLayer *view_layer, View3D *v3d, int action, bool *r_any_visible);
235bool base_deselect_all(const Scene *scene, ViewLayer *view_layer, View3D *v3d, int action);
236
245 Main *bmain, Scene *scene, ViewLayer *view_layer, Base *base, eDupli_ID_Flags dupflag);
246
247void parent_set(Object *ob, Object *parent, int type, const char *substr);
248std::string drop_named_material_tooltip(bContext *C, const char *name, const int mval[2]);
249std::string drop_geometry_nodes_tooltip(bContext *C, PointerRNA *properties, const int mval[2]);
250
251/* bitflags for enter/exit editmode */
252enum {
253 EM_FREEDATA = (1 << 0),
254 EM_NO_CONTEXT = (1 << 1),
255};
260bool editmode_exit_ex(Main *bmain, Scene *scene, Object *obedit, int flag);
261bool editmode_exit(bContext *C, int flag);
262
268bool editmode_free_ex(Main *bmain, Object *obedit);
269
270bool editmode_exit_multi_ex(Main *bmain, Scene *scene, ViewLayer *view_layer, int flag);
271bool editmode_exit_multi(bContext *C, int flag);
272
273bool editmode_enter_ex(Main *bmain, Scene *scene, Object *ob, int flag);
274bool editmode_enter(bContext *C, int flag);
275bool editmode_load(Main *bmain, Object *obedit);
276
277void location_from_view(bContext *C, float loc[3]);
278void rotation_from_quat(float rot[3], const float quat[4], char align_axis);
279void rotation_from_view(bContext *C, float rot[3], char align_axis);
280void init_transform_on_add(Object *object, const float loc[3], const float rot[3]);
286 Object *obedit,
287 const float loc[3],
288 const float rot[3],
289 const float scale[3],
290 float primmat[4][4]);
291
295#define OBJECT_ADD_SIZE_MAXF 1.0e12f
296
298void add_unit_props_radius_ex(wmOperatorType *ot, float default_value);
300void add_generic_props(wmOperatorType *ot, bool do_editmode);
303 wmOperator *op,
304 char view_align_axis,
305 float r_loc[3],
306 float r_rot[3],
307 float r_scale[3],
308 bool *r_enter_editmode,
309 unsigned short *r_local_view_bits,
310 bool *r_is_view_aligned);
311
319 int type,
320 const char *name,
321 const float loc[3],
322 const float rot[3],
323 bool enter_editmode,
324 ushort local_view_bits,
325 ID *obdata);
327 int type,
328 const char *name,
329 const float loc[3],
330 const float rot[3],
331 bool enter_editmode,
332 unsigned short local_view_bits) ATTR_NONNULL(1) ATTR_RETURNS_NONNULL;
333
337void object_single_user_make(Main *bmain, Scene *scene, Object *ob);
338
339void single_obdata_user_make(Main *bmain, Scene *scene, Object *ob);
340
341/* object motion paths */
342
346void motion_paths_clear(bContext *C, bool only_selected);
347
348/* Corresponds to eAnimvizCalcRange. */
354
362 Scene *scene,
364 ListBase *ld_objects);
365
367
369
370/* constraints */
390
391void object_test_constraints(Main *bmain, Object *ob);
392
394void constraint_update(Main *bmain, Object *ob);
396
397void constraint_tag_update(Main *bmain, Object *ob, bConstraint *con);
399
400bool constraint_move_to_index(Object *ob, bConstraint *con, int index);
401void constraint_link(Main *bmain, Object *ob_dst, ListBase *dst, ListBase *src);
402void constraint_copy_for_object(Main *bmain, Object *ob_dst, bConstraint *con);
403void constraint_copy_for_pose(Main *bmain, Object *ob_dst, bPoseChannel *pchan, bConstraint *con);
404
405/* `object_modes.cc` */
406
411bool mode_compat_test(const Object *ob, eObjectMode mode);
417bool mode_compat_set(bContext *C, Object *ob, eObjectMode mode, ReportList *reports);
418bool mode_set_ex(bContext *C, eObjectMode mode, bool use_undo, ReportList *reports);
419bool mode_set(bContext *C, eObjectMode mode);
420
421void mode_generic_exit(Main *bmain, Depsgraph *depsgraph, Scene *scene, Object *ob);
422bool mode_generic_has_data(Depsgraph *depsgraph, const Object *ob);
423
424void posemode_set_for_weight_paint(bContext *C, Main *bmain, Object *ob, bool is_mode_set);
425
438int object_in_mode_to_index(const Scene *scene,
439 ViewLayer *view_layer,
440 eObjectMode mode,
441 const Object *ob);
442
447 ViewLayer *view_layer,
448 eObjectMode mode,
449 int index);
450
451/* `object_modifier.cc` */
452
453enum {
456};
457
465 ReportList *reports, Main *bmain, Scene *scene, Object *ob, const char *name, int type);
466bool modifier_remove(ReportList *reports, Main *bmain, Scene *scene, Object *ob, ModifierData *md);
467void modifiers_clear(Main *bmain, Scene *scene, Object *ob);
468bool modifier_move_down(ReportList *reports, eReportType error_type, Object *ob, ModifierData *md);
469bool modifier_move_up(ReportList *reports, eReportType error_type, Object *ob, ModifierData *md);
471 eReportType error_type,
472 Object *ob,
473 ModifierData *md,
474 int index,
475 bool allow_partial);
476
477bool convert_psys_to_mesh(ReportList *reports,
478 Main *bmain,
479 Depsgraph *depsgraph,
480 Scene *scene,
481 ViewLayer *view_layer,
482 Object *ob,
483 ModifierData *md);
484bool modifier_apply(Main *bmain,
485 ReportList *reports,
486 Depsgraph *depsgraph,
487 Scene *scene,
488 Object *ob,
489 ModifierData *md,
490 int mode,
491 bool keep_modifier,
492 bool do_all_keyframes);
493bool modifier_copy(ReportList *reports, Main *bmain, Scene *scene, Object *ob, ModifierData *md);
494void modifier_link(bContext *C, Object *ob_dst, Object *ob_src);
495bool modifier_copy_to_object(Main *bmain,
496 const Scene *scene,
497 const Object *ob_src,
498 const ModifierData *md,
499 Object *ob_dst,
500 ReportList *reports);
510bool iter_other(Main *bmain,
511 Object *orig_ob,
512 bool include_orig,
513 bool (*callback)(Object *ob, void *callback_data),
514 void *callback_data);
515
520bool multires_update_totlevels(Object *ob, void *totlevel_v);
521
522/* `object_greasepencil_modifier.cc` */
523
525 ReportList *reports, Main *bmain, Scene *scene, Object *ob, const char *name, int type);
527 Main *bmain,
528 Object *ob,
534 Object *ob,
536 int index);
538 ReportList *reports,
539 Depsgraph *depsgraph,
540 Object *ob,
542 int mode);
545
546/* `object_shader_fx.cc` */
547
549 ReportList *reports, Main *bmain, Scene *scene, Object *ob, const char *name, int type);
550bool shaderfx_remove(ReportList *reports, Main *bmain, Object *ob, ShaderFxData *fx);
551void shaderfx_clear(Main *bmain, Object *ob);
552int shaderfx_move_down(ReportList *reports, Object *ob, ShaderFxData *fx);
553int shaderfx_move_up(ReportList *reports, Object *ob, ShaderFxData *fx);
554bool shaderfx_move_to_index(ReportList *reports, Object *ob, ShaderFxData *fx, int index);
555void shaderfx_link(Object *dst, Object *src);
556void shaderfx_copy(Object *dst, ShaderFxData *fx);
557
558/* `object_select.cc` */
559
560void select_linked_by_id(bContext *C, ID *id);
561
562void check_force_modifiers(Main *bmain, Scene *scene, Object *object);
563
568Base *find_first_by_data_id(const Scene *scene, ViewLayer *view_layer, ID *id);
569
576bool jump_to_object(bContext *C, Object *ob, bool reveal_hidden);
584bool jump_to_bone(bContext *C, Object *ob, const char *bone_name, bool reveal_hidden);
585
586/* `object_data_transform.cc` */
587
588XFormObjectData *data_xform_create_ex(ID *id, bool is_edit_mode);
591
592void data_xform_destroy(XFormObjectData *xod_base);
593
594void data_xform_by_mat4(XFormObjectData *xod, const float mat[4][4]);
595
598
600
601} // namespace blender::ed::object
#define ATTR_RETURNS_NONNULL
#define ATTR_NONNULL(...)
unsigned short ushort
unsigned int uint
eObjectMode
eDupli_ID_Flags
const Depsgraph * depsgraph
DEGForeachIDComponentCallback callback
#define rot(x, k)
XFormObjectData * data_xform_create(ID *id)
void gpencil_modifier_clear(Main *bmain, Object *ob)
bool calc_active_center(Object *ob, bool select_only, float r_center[3])
XFormObjectData * data_xform_create_from_edit_mode(ID *id)
void xform_skip_child_container_item_ensure_from_array(XFormObjectSkipChild_Container *xcs, const Scene *scene, ViewLayer *view_layer, Object **objects, uint objects_len)
void motion_paths_recalc(bContext *C, Scene *scene, eObjectPathCalcRange range, ListBase *ld_objects)
void object_test_constraints(Main *bmain, Object *ob)
ModifierData * modifier_add(ReportList *reports, Main *bmain, Scene *scene, Object *ob, const char *name, int type)
void single_obdata_user_make(Main *bmain, Scene *scene, Object *ob)
bool mode_generic_has_data(Depsgraph *depsgraph, const Object *ob)
bConstraint * constraint_active_get(Object *ob)
@ OBJECT_PATH_CALC_RANGE_CURRENT_FRAME
Definition ED_object.hh:350
void constraint_link(Main *bmain, Object *ob_dst, ListBase *dst, ListBase *src)
bool jump_to_object(bContext *C, Object *ob, bool reveal_hidden)
bool modifier_apply(Main *bmain, ReportList *reports, Depsgraph *depsgraph, Scene *scene, Object *ob, ModifierData *md, int mode, bool keep_modifier, bool do_all_keyframes)
void add_unit_props_radius(wmOperatorType *ot)
void constraint_copy_for_object(Main *bmain, Object *ob_dst, bConstraint *con)
bool editmode_exit_multi(bContext *C, int flag)
Object * add_type(bContext *C, int type, const char *name, const float loc[3], const float rot[3], bool enter_editmode, unsigned short local_view_bits) ATTR_NONNULL(1) ATTR_RETURNS_NONNULL
Base * find_first_by_data_id(const Scene *scene, ViewLayer *view_layer, ID *id)
void keymap_object(wmKeyConfig *keyconf)
bool editmode_enter(bContext *C, int flag)
void motion_paths_recalc_selected(bContext *C, Scene *scene, eObjectPathCalcRange range)
void constraint_active_set(Object *ob, bConstraint *con)
const EnumPropertyItem prop_clear_parent_types[]
Object * add_type_with_obdata(bContext *C, int type, const char *name, const float loc[3], const float rot[3], bool enter_editmode, ushort local_view_bits, ID *obdata)
bool modifier_copy_to_object(Main *bmain, const Scene *scene, const Object *ob_src, const ModifierData *md, Object *ob_dst, ReportList *reports)
int object_in_mode_to_index(const Scene *scene, ViewLayer *view_layer, eObjectMode mode, const Object *ob)
void shaderfx_clear(Main *bmain, Object *ob)
void constraint_copy_for_pose(Main *bmain, Object *ob_dst, bPoseChannel *pchan, bConstraint *con)
void object_xform_array_m4(Object **objects, uint objects_len, const float matrix[4][4])
void constraint_dependency_tag_update(Main *bmain, Object *ob, bConstraint *con)
void data_xform_container_destroy(XFormObjectData_Container *xds)
int shaderfx_move_up(ReportList *reports, Object *ob, ShaderFxData *fx)
void add_unit_props_size(wmOperatorType *ot)
void motion_paths_recalc_visible(bContext *C, Scene *scene, eObjectPathCalcRange range)
bool shape_key_report_if_locked(const Object *obedit, ReportList *reports)
bool gpencil_modifier_move_up(ReportList *reports, Object *ob, GpencilModifierData *md)
float new_primitive_matrix(bContext *C, Object *obedit, const float loc[3], const float rot[3], const float scale[3], float primmat[4][4])
XFormObjectData * data_xform_create_ex(ID *id, bool is_edit_mode)
bool iter_other(Main *bmain, Object *orig_ob, bool include_orig, bool(*callback)(Object *ob, void *callback_data), void *callback_data)
void motion_paths_clear(bContext *C, bool only_selected)
void rotation_from_view(bContext *C, float rot[3], char align_axis)
void constraint_update(Main *bmain, Object *ob)
void base_activate(bContext *C, Base *base)
bool shape_key_report_if_any_locked(Object *ob, ReportList *reports)
std::string drop_named_material_tooltip(bContext *C, const char *name, const int mval[2])
void data_xform_destroy(XFormObjectData *xod_base)
bool editmode_free_ex(Main *bmain, Object *obedit)
bool modifier_move_up(ReportList *reports, eReportType error_type, Object *ob, ModifierData *md)
bool mode_set_ex(bContext *C, eObjectMode mode, bool use_undo, ReportList *reports)
std::string drop_geometry_nodes_tooltip(bContext *C, PointerRNA *properties, const int mval[2])
bool multires_update_totlevels(Object *ob, void *totlevel_v)
ShaderFxData * shaderfx_add(ReportList *reports, Main *bmain, Scene *scene, Object *ob, const char *name, int type)
const EnumPropertyItem prop_make_parent_types[]
void base_select(Base *base, eObjectSelect_Mode mode)
void ui_template_modifier_asset_menu_items(uiLayout &layout, StringRef catalog_path)
XFormObjectSkipChild_Container * xform_skip_child_container_create()
void parent_clear(Object *ob, int type)
void base_free_and_unlink_no_indirect_check(Main *bmain, Scene *scene, Object *ob)
void add_unit_props_radius_ex(wmOperatorType *ot, float default_value)
ListBase * pose_constraint_list(const bContext *C)
void rotation_from_quat(float rot[3], const float quat[4], char align_axis)
Object * context_object(const bContext *C)
bool gpencil_modifier_apply(Main *bmain, ReportList *reports, Depsgraph *depsgraph, Object *ob, GpencilModifierData *md, int mode)
void operatortypes_object()
Definition object_ops.cc:30
bool gpencil_modifier_move_to_index(ReportList *reports, Object *ob, GpencilModifierData *md, int index)
void data_xform_by_mat4(XFormObjectData *xod, const float mat[4][4])
void mode_generic_exit(Main *bmain, Depsgraph *depsgraph, Scene *scene, Object *ob)
void constraint_tag_update(Main *bmain, Object *ob, bConstraint *con)
ListBase * constraint_active_list(Object *ob)
int shaderfx_move_down(ReportList *reports, Object *ob, ShaderFxData *fx)
void collection_hide_menu_draw(const bContext *C, uiLayout *layout)
bool parent_set(ReportList *reports, const bContext *C, Scene *scene, Object *const ob, Object *const par, int partype, bool xmirror, bool keep_transform, const int vert_par[3])
void data_xform_container_update_all(XFormObjectData_Container *xds, Main *bmain, Depsgraph *depsgraph)
bool mode_compat_test(const Object *ob, eObjectMode mode)
bool editmode_enter_ex(Main *bmain, Scene *scene, Object *ob, int flag)
void shaderfx_copy(Object *dst, ShaderFxData *fx)
void object_xform_skip_child_container_destroy(XFormObjectSkipChild_Container *xcs)
bool modifier_copy(ReportList *reports, Main *bmain, Scene *scene, Object *ob, ModifierData *md)
Object * context_active_object(const bContext *C)
bool modifier_move_down(ReportList *reports, eReportType error_type, Object *ob, ModifierData *md)
bool editmode_exit(bContext *C, int flag)
void object_xform_skip_child_container_item_ensure(XFormObjectSkipChild_Container *xcs, Object *ob, Object *ob_parent_recurse, int mode)
Object * object_in_mode_from_index(const Scene *scene, ViewLayer *view_layer, eObjectMode mode, int index)
bool shape_key_report_if_active_locked(Object *ob, ReportList *reports)
bool gpencil_modifier_move_down(ReportList *reports, Object *ob, GpencilModifierData *md)
void base_activate_with_mode_exit_if_needed(bContext *C, Base *base)
void posemode_set_for_weight_paint(bContext *C, Main *bmain, Object *ob, bool is_mode_set)
Base * add_duplicate(Main *bmain, Scene *scene, ViewLayer *view_layer, Base *base, eDupli_ID_Flags dupflag)
void constraint_dependency_update(Main *bmain, Object *ob)
bool constraint_move_to_index(Object *ob, bConstraint *con, int index)
bool mode_compat_set(bContext *C, Object *ob, eObjectMode mode, ReportList *reports)
bool editmode_exit_multi_ex(Main *bmain, Scene *scene, ViewLayer *view_layer, int flag)
bool jump_to_bone(bContext *C, Object *ob, const char *bone_name, bool reveal_hidden)
void base_active_refresh(Main *bmain, Scene *scene, ViewLayer *view_layer)
void select_linked_by_id(bContext *C, ID *id)
bool gpencil_modifier_copy(ReportList *reports, Object *ob, GpencilModifierData *md)
bool calc_active_center_for_editmode(Object *obedit, bool select_only, float r_center[3])
void check_force_modifiers(Main *bmain, Scene *scene, Object *object)
bool gpencil_modifier_remove(ReportList *reports, Main *bmain, Object *ob, GpencilModifierData *md)
bool convert_psys_to_mesh(ReportList *reports, Main *bmain, Depsgraph *depsgraph, Scene *scene, ViewLayer *view_layer, Object *ob, ModifierData *md)
bool modifier_move_to_index(ReportList *reports, eReportType error_type, Object *ob, ModifierData *md, int index, bool allow_partial)
void base_free_and_unlink(Main *bmain, Scene *scene, Object *ob)
bool shaderfx_remove(ReportList *reports, Main *bmain, Object *ob, ShaderFxData *fx)
bool calc_active_center_for_posemode(Object *ob, bool select_only, float r_center[3])
bool base_deselect_all(const Scene *scene, ViewLayer *view_layer, View3D *v3d, int action)
bool base_deselect_all_ex(const Scene *scene, ViewLayer *view_layer, View3D *v3d, int action, bool *r_any_visible)
void init_transform_on_add(Object *object, const float loc[3], const float rot[3])
bool shaderfx_move_to_index(ReportList *reports, Object *ob, ShaderFxData *fx, int index)
void add_generic_props(wmOperatorType *ot, bool do_editmode)
void data_xform_tag_update(XFormObjectData *xod)
void location_from_view(bContext *C, float loc[3])
void add_mesh_props(wmOperatorType *ot)
void data_xform_container_item_ensure(XFormObjectData_Container *xds, Object *ob)
void object_xform_skip_child_container_update_all(XFormObjectSkipChild_Container *xcs, Main *bmain, Depsgraph *depsgraph)
bool mode_set(bContext *C, eObjectMode mode)
@ XFORM_OB_SKIP_CHILD_PARENT_IS_XFORM
Definition ED_object.hh:116
@ XFORM_OB_SKIP_CHILD_PARENT_IS_XFORM_INDIRECT
Definition ED_object.hh:121
bool editmode_load(Main *bmain, Object *obedit)
blender::Vector< Object * > objects_in_mode_or_selected(bContext *C, bool(*filter_fn)(const Object *ob, void *user_data), void *filter_user_data)
void data_xform_restore(XFormObjectData *xod)
void add_generic_get_opts(bContext *C, wmOperator *op, char view_align_axis, float r_loc[3], float r_rot[3], float r_scale[3], bool *r_enter_editmode, unsigned short *r_local_view_bits, bool *r_is_view_aligned)
bool editmode_exit_ex(Main *bmain, Scene *scene, Object *obedit, int flag)
void modifier_link(bContext *C, Object *ob_dst, Object *ob_src)
XFormObjectData_Container * data_xform_container_create()
void object_single_user_make(Main *bmain, Scene *scene, Object *ob)
void modifiers_clear(Main *bmain, Scene *scene, Object *ob)
GpencilModifierData * gpencil_modifier_add(ReportList *reports, Main *bmain, Scene *scene, Object *ob, const char *name, int type)
void gpencil_modifier_copy_to_object(Object *ob_dst, GpencilModifierData *md)
ListBase * constraint_list_from_constraint(Object *ob, bConstraint *con, bPoseChannel **r_pchan)
void shaderfx_link(Object *dst, Object *src)
bool modifier_remove(ReportList *reports, Main *bmain, Scene *scene, Object *ob, ModifierData *md)
Definition DNA_ID.h:413
wmOperatorType * ot
Definition wm_files.cc:4125
uint8_t flag
Definition wm_window.cc:138