Blender V4.5
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
8
9#pragma once
10
11#include <string>
12
13#include "BLI_compiler_attrs.h"
15#include "BLI_string_ref.hh"
16#include "BLI_vector.hh"
17
18#include "DNA_object_enums.h"
19#include "DNA_userdef_enums.h"
21
22struct Base;
23struct Depsgraph;
24struct EnumPropertyItem;
25struct ID;
27struct Main;
28struct ModifierData;
29struct Object;
30struct PointerRNA;
31struct ReportList;
32struct Scene;
33struct ShaderFxData;
34struct View3D;
35struct ViewLayer;
36struct bConstraint;
37struct bContext;
38struct bPoseChannel;
39struct uiLayout;
40struct wmKeyConfig;
41struct wmOperator;
42struct wmOperatorType;
43
45
46struct XFormObjectData;
47
48/* `object_edit.cc` */
49
57void collection_hide_menu_draw(const bContext *C, uiLayout *layout);
58
68 bContext *C, bool (*filter_fn)(const Object *ob, void *user_data), void *filter_user_data);
69
76bool material_active_index_set(Object *ob, int index);
77
78/* `object_shapekey.cc` */
79
86
93
100
101/* `object_utils.cc` */
102
103bool calc_active_center_for_editmode(Object *obedit, bool select_only, float r_center[3]);
104bool calc_active_center_for_posemode(Object *ob, bool select_only, float r_center[3]);
105bool calc_active_center(Object *ob, bool select_only, float r_center[3]);
106
107/* Object Data Container helper API. */
116 Main *bmain,
117 Depsgraph *depsgraph);
119
121enum {
138};
139struct XFormObjectSkipChild_Container;
140XFormObjectSkipChild_Container *xform_skip_child_container_create();
141void xform_skip_child_container_item_ensure_from_array(XFormObjectSkipChild_Container *xcs,
142 const Scene *scene,
143 ViewLayer *view_layer,
144 Object **objects,
145 uint objects_len);
146void object_xform_skip_child_container_destroy(XFormObjectSkipChild_Container *xcs);
147void object_xform_skip_child_container_update_all(XFormObjectSkipChild_Container *xcs,
148 Main *bmain,
149 Depsgraph *depsgraph);
150void object_xform_skip_child_container_item_ensure(XFormObjectSkipChild_Container *xcs,
151 Object *ob,
152 Object *ob_parent_recurse,
153 int mode);
154
155void object_xform_array_m4(Object **objects, uint objects_len, const float matrix[4][4]);
156
157/* `object_ops.cc` */
158
161void keymap_object(wmKeyConfig *keyconf);
162
163/* `object_relations.cc` */
164
180
186
192
193#ifdef __RNA_TYPES_H__
198#endif
199
204 const bContext *C,
205 Scene *scene,
206 Object *const ob,
207 Object *const par,
208 int partype,
209 bool xmirror,
210 bool keep_transform,
211 const int vert_par[3]);
212void parent_clear(Object *ob, int type);
213
222void base_select(Base *base, eObjectSelect_Mode mode);
226void base_activate(bContext *C, Base *base);
231void base_active_refresh(Main *bmain, Scene *scene, ViewLayer *view_layer);
236void base_free_and_unlink(Main *bmain, Scene *scene, Object *ob);
243 const Scene *scene, ViewLayer *view_layer, View3D *v3d, int action, bool *r_any_visible);
244bool base_deselect_all(const Scene *scene, ViewLayer *view_layer, View3D *v3d, int action);
245
254 Main *bmain, Scene *scene, ViewLayer *view_layer, Base *base, eDupli_ID_Flags dupflag);
255
256void parent_set(Object *ob, Object *parent, int type, const char *substr);
257std::string drop_named_material_tooltip(bContext *C, const char *name, const int mval[2]);
258std::string drop_geometry_nodes_tooltip(bContext *C, PointerRNA *properties, const int mval[2]);
259
261enum {
262 EM_FREEDATA = (1 << 0),
263 EM_NO_CONTEXT = (1 << 1),
264};
269bool editmode_exit_ex(Main *bmain, Scene *scene, Object *obedit, int flag);
270bool editmode_exit(bContext *C, int flag);
271
277bool editmode_free_ex(Main *bmain, Object *obedit);
278
279bool editmode_exit_multi_ex(Main *bmain, Scene *scene, ViewLayer *view_layer, int flag);
281
282bool editmode_enter_ex(Main *bmain, Scene *scene, Object *ob, int flag);
283bool editmode_enter(bContext *C, int flag);
284bool editmode_load(Main *bmain, Object *obedit);
285
286void location_from_view(bContext *C, float loc[3]);
287void rotation_from_quat(float rot[3], const float quat[4], char align_axis);
288void rotation_from_view(bContext *C, float rot[3], char align_axis);
289void init_transform_on_add(Object *object, const float loc[3], const float rot[3]);
295 Object *obedit,
296 const float loc[3],
297 const float rot[3],
298 const float scale[3],
299 float primmat[4][4]);
300
304#define OBJECT_ADD_SIZE_MAXF 1.0e12f
305
307void add_unit_props_radius_ex(wmOperatorType *ot, float default_value);
309void add_generic_props(wmOperatorType *ot, bool do_editmode);
312 wmOperator *op,
313 char view_align_axis,
314 float r_loc[3],
315 float r_rot[3],
316 float r_scale[3],
317 bool *r_enter_editmode,
318 unsigned short *r_local_view_bits,
319 bool *r_is_view_aligned);
320
328 int type,
329 const char *name,
330 const float loc[3],
331 const float rot[3],
332 bool enter_editmode,
333 ushort local_view_bits,
334 ID *obdata);
336 int type,
337 const char *name,
338 const float loc[3],
339 const float rot[3],
340 bool enter_editmode,
341 unsigned short local_view_bits) ATTR_NONNULL(1) ATTR_RETURNS_NONNULL;
342
346void object_single_user_make(Main *bmain, Scene *scene, Object *ob);
347
348void single_obdata_user_make(Main *bmain, Scene *scene, Object *ob);
349
350/* object motion paths */
351
355void motion_paths_clear(bContext *C, bool only_selected);
356
357/* Corresponds to eAnimvizCalcRange. */
363
371 Scene *scene,
373 ListBase *ld_objects);
374
376
378
379/* constraints */
399
400void object_test_constraints(Main *bmain, Object *ob);
401
403void constraint_update(Main *bmain, Object *ob);
405
406void constraint_tag_update(Main *bmain, Object *ob, bConstraint *con);
408
409bool constraint_move_to_index(Object *ob, bConstraint *con, int index);
410void constraint_link(Main *bmain, Object *ob_dst, ListBase *dst, ListBase *src);
411void constraint_copy_for_object(Main *bmain, Object *ob_dst, bConstraint *con);
412void constraint_copy_for_pose(Main *bmain, Object *ob_dst, bPoseChannel *pchan, bConstraint *con);
413
414/* `object_modes.cc` */
415
420bool mode_compat_test(const Object *ob, eObjectMode mode);
431bool mode_set_ex(bContext *C, eObjectMode mode, bool use_undo, ReportList *reports);
432bool mode_set(bContext *C, eObjectMode mode);
433
434void mode_generic_exit(Main *bmain, Depsgraph *depsgraph, Scene *scene, Object *ob);
435bool mode_generic_has_data(Depsgraph *depsgraph, const Object *ob);
436
437void posemode_set_for_weight_paint(bContext *C, Main *bmain, Object *ob, bool is_mode_set);
438
451int object_in_mode_to_index(const Scene *scene,
452 ViewLayer *view_layer,
453 eObjectMode mode,
454 const Object *ob);
455
460 ViewLayer *view_layer,
461 eObjectMode mode,
462 int index);
463
464/* `object_modifier.cc` */
465
466enum {
469};
470
478 ReportList *reports, Main *bmain, Scene *scene, Object *ob, const char *name, int type);
479bool modifier_remove(ReportList *reports, Main *bmain, Scene *scene, Object *ob, ModifierData *md);
480void modifiers_clear(Main *bmain, Scene *scene, Object *ob);
484 eReportType error_type,
485 Object *ob,
486 ModifierData *md,
487 int index,
488 bool allow_partial);
489
491 Main *bmain,
492 Depsgraph *depsgraph,
493 Scene *scene,
494 ViewLayer *view_layer,
495 Object *ob,
496 ModifierData *md);
497bool modifier_apply(Main *bmain,
499 Depsgraph *depsgraph,
500 Scene *scene,
501 Object *ob,
502 ModifierData *md,
503 int mode,
504 bool keep_modifier,
505 bool do_all_keyframes);
506bool modifier_copy(ReportList *reports, Main *bmain, Scene *scene, Object *ob, ModifierData *md);
507void modifier_link(bContext *C, Object *ob_dst, Object *ob_src);
508bool modifier_copy_to_object(Main *bmain,
509 const Scene *scene,
510 const Object *ob_src,
511 const ModifierData *md,
512 Object *ob_dst,
523bool iter_other(Main *bmain,
524 Object *orig_ob,
525 bool include_orig,
526 bool (*callback)(Object *ob, void *callback_data),
527 void *callback_data);
528
533bool multires_update_totlevels(Object *ob, void *totlevel_v);
534
535/* `object_shader_fx.cc` */
536
538 ReportList *reports, Main *bmain, Scene *scene, Object *ob, const char *name, int type);
540void shaderfx_clear(Main *bmain, Object *ob);
544void shaderfx_link(Object *dst, Object *src);
545void shaderfx_copy(Object *dst, ShaderFxData *fx);
546
547/* `object_select.cc` */
548
549void select_linked_by_id(bContext *C, ID *id);
550
551void check_force_modifiers(Main *bmain, Scene *scene, Object *object);
552
557Base *find_first_by_data_id(const Scene *scene, ViewLayer *view_layer, ID *id);
558
565bool jump_to_object(bContext *C, Object *ob, bool reveal_hidden);
573bool jump_to_bone(bContext *C, Object *ob, const char *bone_name, bool reveal_hidden);
574
575/* `object_data_transform.cc` */
576
579 XFormObjectData() = default;
580 virtual ~XFormObjectData() = default;
581};
582
583std::unique_ptr<XFormObjectData> data_xform_create(ID *id);
584std::unique_ptr<XFormObjectData> data_xform_create_from_edit_mode(ID *id);
585
587
590
592
593} // namespace blender::ed::object
#define ATTR_RETURNS_NONNULL
#define ATTR_NONNULL(...)
unsigned int uint
unsigned short ushort
eObjectMode
eDupli_ID_Flags
#define C
Definition RandGen.cpp:29
ReportList * reports
Definition WM_types.hh:1025
BPy_StructRNA * depsgraph
#define rot(x, k)
bool calc_active_center(Object *ob, bool select_only, float r_center[3])
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:359
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)
float new_primitive_matrix(bContext *C, Object *obedit, const float loc[3], const float rot[3], const float scale[3], float primmat[4][4])
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])
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)
void operatortypes_object()
Definition object_ops.cc:29
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 data_xform_by_mat4(XFormObjectData &xod, const float4x4 &transform)
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)
std::unique_ptr< XFormObjectData > data_xform_create(ID *id)
bool editmode_exit(bContext *C, int flag)
void data_xform_restore(XFormObjectData &xod)
std::unique_ptr< XFormObjectData > data_xform_create_from_edit_mode(ID *id)
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)
void data_xform_tag_update(XFormObjectData &xod)
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 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 material_active_index_set(Object *ob, int index)
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 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)
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)
@ XFORM_OB_SKIP_CHILD_PARENT_IS_XFORM
Definition ED_object.hh:125
@ XFORM_OB_SKIP_CHILD_PARENT_IS_XFORM_INDIRECT
Definition ED_object.hh:130
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)
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)
MatBase< float, 4, 4 > float4x4
Definition DNA_ID.h:404
wmOperatorType * ot
Definition wm_files.cc:4226
uint8_t flag
Definition wm_window.cc:139