Blender V5.0
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"
14#include "BLI_function_ref.hh"
15#include "BLI_map.hh"
17#include "BLI_string_ref.hh"
18#include "BLI_vector.hh"
19
20#include "DNA_object_enums.h"
21#include "DNA_userdef_enums.h"
22
23struct Base;
24struct Depsgraph;
25struct EnumPropertyItem;
26struct ID;
27struct KeyBlock;
29struct ListBase;
30struct Main;
31struct ModifierData;
32struct Object;
33struct PointerRNA;
34struct ReportList;
35struct Scene;
36struct ShaderFxData;
37struct View3D;
38struct ViewLayer;
39struct bConstraint;
40struct bContext;
41struct bPoseChannel;
42struct uiLayout;
43struct wmKeyConfig;
44struct wmOperator;
45struct wmOperatorType;
47
49
50struct XFormObjectData;
51
52/* `object_edit.cc` */
53
61void collection_hide_menu_draw(const bContext *C, uiLayout *layout);
62
72 bContext *C, bool (*filter_fn)(const Object *ob, void *user_data), void *filter_user_data);
73
80bool material_active_index_set(Object *ob, int index);
81
82/* `object_shapekey.cc` */
83
89bool shape_key_report_if_locked(const Object *obedit, ReportList *reports);
90
97
104
111bool shape_key_is_selected(const Object &object, const KeyBlock &kb, int keyblock_index);
112
113void shape_key_mirror(Object *ob, KeyBlock *kb, bool use_topology, int &totmirr, int &totfail);
114
115/* `object_utils.cc` */
116
117bool calc_active_center_for_editmode(Object *obedit, bool select_only, float r_center[3]);
118bool calc_active_center_for_posemode(Object *ob, bool select_only, float r_center[3]);
119bool calc_active_center(Object *ob, bool select_only, float r_center[3]);
120
121/* Object Data Container helper API. */
130 Main *bmain,
131 Depsgraph *depsgraph);
133
135enum {
152};
153struct XFormObjectSkipChild_Container;
154XFormObjectSkipChild_Container *xform_skip_child_container_create();
155void xform_skip_child_container_item_ensure_from_array(XFormObjectSkipChild_Container *xcs,
156 const Scene *scene,
157 ViewLayer *view_layer,
158 Object **objects,
159 uint objects_len);
160void object_xform_skip_child_container_destroy(XFormObjectSkipChild_Container *xcs);
161void object_xform_skip_child_container_update_all(XFormObjectSkipChild_Container *xcs,
162 Main *bmain,
163 Depsgraph *depsgraph);
164void object_xform_skip_child_container_item_ensure(XFormObjectSkipChild_Container *xcs,
165 Object *ob,
166 Object *ob_parent_recurse,
167 int mode);
168
169void object_xform_array_m4(Object **objects, uint objects_len, const float matrix[4][4]);
170
171/* `object_ops.cc` */
172
175void keymap_object(wmKeyConfig *keyconf);
176
177/* `object_relations.cc` */
178
194
200
206
207#ifdef __RNA_TYPES_H__
212#endif
213
217bool parent_set(ReportList *reports,
218 const bContext *C,
219 Scene *scene,
220 Object *const ob,
221 Object *const par,
222 int partype,
223 bool xmirror,
224 bool keep_transform,
225 const int vert_par[3]);
226void parent_clear(Object *ob, int type);
227
236void base_select(Base *base, eObjectSelect_Mode mode);
240void base_activate(bContext *C, Base *base);
245void base_active_refresh(Main *bmain, Scene *scene, ViewLayer *view_layer);
250void base_free_and_unlink(Main *bmain, Scene *scene, Object *ob);
257 const Scene *scene, ViewLayer *view_layer, View3D *v3d, int action, bool *r_any_visible);
258bool base_deselect_all(const Scene *scene, ViewLayer *view_layer, View3D *v3d, int action);
259
268 Main *bmain, Scene *scene, ViewLayer *view_layer, Base *base, eDupli_ID_Flags dupflag);
269
270void parent_set(Object *ob, Object *parent, int type, const char *substr);
271std::string drop_named_material_tooltip(bContext *C, const char *name, const int mval[2]);
272std::string drop_geometry_nodes_tooltip(bContext *C, PointerRNA *properties, const int mval[2]);
273
275enum {
276 EM_FREEDATA = (1 << 0),
277 EM_NO_CONTEXT = (1 << 1),
278};
283bool editmode_exit_ex(Main *bmain, Scene *scene, Object *obedit, int flag);
284bool editmode_exit(bContext *C, int flag);
285
291bool editmode_free_ex(Main *bmain, Object *obedit);
292
293bool editmode_exit_multi_ex(Main *bmain, Scene *scene, ViewLayer *view_layer, int flag);
295
296bool editmode_enter_ex(Main *bmain, Scene *scene, Object *ob, int flag);
297bool editmode_enter(bContext *C, int flag);
298bool editmode_load(Main *bmain, Object *obedit);
299
300void location_from_view(bContext *C, float loc[3]);
301void rotation_from_quat(float rot[3], const float quat[4], char align_axis);
302void rotation_from_view(bContext *C, float rot[3], char align_axis);
303void init_transform_on_add(Object *object, const float loc[3], const float rot[3]);
309 Object *obedit,
310 const float loc[3],
311 const float rot[3],
312 const float scale[3],
313 float primmat[4][4]);
314
318#define OBJECT_ADD_SIZE_MAXF 1.0e12f
319
321void add_unit_props_radius_ex(wmOperatorType *ot, float default_value);
323void add_generic_props(wmOperatorType *ot, bool do_editmode);
326 wmOperator *op,
327 char view_align_axis,
328 float r_loc[3],
329 float r_rot[3],
330 float r_scale[3],
331 bool *r_enter_editmode,
332 unsigned short *r_local_view_bits,
333 bool *r_is_view_aligned);
334
342 int type,
343 const char *name,
344 const float loc[3],
345 const float rot[3],
346 bool enter_editmode,
347 ushort local_view_bits,
348 ID *obdata);
350 int type,
351 const char *name,
352 const float loc[3],
353 const float rot[3],
354 bool enter_editmode,
355 unsigned short local_view_bits) ATTR_NONNULL(1) ATTR_RETURNS_NONNULL;
356
360void object_single_user_make(Main *bmain, Scene *scene, Object *ob);
361
362void single_obdata_user_make(Main *bmain, Scene *scene, Object *ob);
363
364/* object motion paths */
365
369void motion_paths_clear(bContext *C, bool only_selected);
370
371/* Corresponds to eAnimvizCalcRange. */
377
385 Scene *scene,
387 ListBase *ld_objects);
388
390
392
393/* constraints */
413
414void object_test_constraints(Main *bmain, Object *ob);
415
417void constraint_update(Main *bmain, Object *ob);
419
420void constraint_tag_update(Main *bmain, Object *ob, bConstraint *con);
422
423bool constraint_move_to_index(Object *ob, bConstraint *con, int index);
424void constraint_link(Main *bmain, Object *ob_dst, ListBase *dst, ListBase *src);
425void constraint_copy_for_object(Main *bmain, Object *ob_dst, bConstraint *con);
426void constraint_copy_for_pose(Main *bmain, Object *ob_dst, bPoseChannel *pchan, bConstraint *con);
427
428/* `object_modes.cc` */
429
434bool mode_compat_test(const Object *ob, eObjectMode mode);
444bool mode_compat_set(bContext *C, Object *ob, eObjectMode mode, ReportList *reports);
445bool mode_set_ex(bContext *C, eObjectMode mode, bool use_undo, ReportList *reports);
446bool mode_set(bContext *C, eObjectMode mode);
447
448void mode_generic_exit(Main *bmain, Depsgraph *depsgraph, Scene *scene, Object *ob);
449bool mode_generic_has_data(Depsgraph *depsgraph, const Object *ob);
450
451void posemode_set_for_weight_paint(bContext *C, Main *bmain, Object *ob, bool is_mode_set);
452
465int object_in_mode_to_index(const Scene *scene,
466 ViewLayer *view_layer,
467 eObjectMode mode,
468 const Object *ob);
469
474 ViewLayer *view_layer,
475 eObjectMode mode,
476 int index);
477
484
485/* `object_modifier.cc` */
486
487enum {
490};
491
499 ReportList *reports, Main *bmain, Scene *scene, Object *ob, const char *name, int type);
500bool modifier_remove(ReportList *reports, Main *bmain, Scene *scene, Object *ob, ModifierData *md);
501void modifiers_clear(Main *bmain, Scene *scene, Object *ob);
502bool modifier_move_down(ReportList *reports, eReportType error_type, Object *ob, ModifierData *md);
503bool modifier_move_up(ReportList *reports, eReportType error_type, Object *ob, ModifierData *md);
505 eReportType error_type,
506 Object *ob,
507 ModifierData *md,
508 int index,
509 bool allow_partial);
510
511bool convert_psys_to_mesh(ReportList *reports,
512 Main *bmain,
513 Depsgraph *depsgraph,
514 Scene *scene,
515 ViewLayer *view_layer,
516 Object *ob,
517 ModifierData *md);
518bool modifier_apply(Main *bmain,
519 ReportList *reports,
520 Depsgraph *depsgraph,
521 Scene *scene,
522 Object *ob,
523 ModifierData *md,
524 int mode,
525 bool keep_modifier,
526 bool do_all_keyframes);
527bool modifier_copy(ReportList *reports, Main *bmain, Scene *scene, Object *ob, ModifierData *md);
528void modifier_link(bContext *C, Object *ob_dst, Object *ob_src);
529bool modifier_copy_to_object(Main *bmain,
530 const Scene *scene,
531 const Object *ob_src,
532 const ModifierData *md,
533 Object *ob_dst,
534 ReportList *reports);
544bool iter_other(Main *bmain,
545 Object *orig_ob,
546 bool include_orig,
547 bool (*callback)(Object *ob, void *callback_data),
548 void *callback_data);
549
554bool multires_update_totlevels(Object *ob, void *totlevel_v);
555
556/* `object_shader_fx.cc` */
557
559 ReportList *reports, Main *bmain, Scene *scene, Object *ob, const char *name, int type);
560bool shaderfx_remove(ReportList *reports, Main *bmain, Object *ob, ShaderFxData *fx);
561void shaderfx_clear(Main *bmain, Object *ob);
562int shaderfx_move_down(ReportList *reports, Object *ob, ShaderFxData *fx);
563int shaderfx_move_up(ReportList *reports, Object *ob, ShaderFxData *fx);
564bool shaderfx_move_to_index(ReportList *reports, Object *ob, ShaderFxData *fx, int index);
565void shaderfx_link(Object *dst, Object *src);
566void shaderfx_copy(Object *dst, ShaderFxData *fx);
567
568/* `object_select.cc` */
569
570void select_linked_by_id(bContext *C, ID *id);
571
572void check_force_modifiers(Main *bmain, Scene *scene, Object *object);
573
578Base *find_first_by_data_id(const Scene *scene, ViewLayer *view_layer, ID *id);
579
586bool jump_to_object(bContext *C, Object *ob, bool reveal_hidden);
594bool jump_to_bone(bContext *C, Object *ob, const char *bone_name, bool reveal_hidden);
595
596/* `object_data_transform.cc` */
597
600 XFormObjectData() = default;
601 virtual ~XFormObjectData() = default;
602};
603
604std::unique_ptr<XFormObjectData> data_xform_create(ID *id);
605std::unique_ptr<XFormObjectData> data_xform_create_from_edit_mode(ID *id);
606
608
611
613 StringRef catalog_path,
614 bool skip_essentials);
615
616} // namespace blender::ed::object
eReportType
Definition BKE_report.hh:33
#define ATTR_RETURNS_NONNULL
#define ATTR_NONNULL(...)
unsigned int uint
unsigned short ushort
eObjectMode
eDupli_ID_Flags
#define C
Definition RandGen.cpp:29
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:373
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)
@ XFORM_OB_SKIP_CHILD_PARENT_IS_XFORM
Definition ED_object.hh:139
@ XFORM_OB_SKIP_CHILD_PARENT_IS_XFORM_INDIRECT
Definition ED_object.hh:144
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)
Map< std::string, float, 1 > mode_transfer_overlay_current_state()
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)
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 shape_key_mirror(Object *ob, KeyBlock *kb, bool use_topology, int &totmirr, int &totfail)
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])
void ui_template_modifier_asset_menu_items(uiLayout &layout, StringRef catalog_path, bool skip_essentials)
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)
bool shape_key_is_selected(const Object &object, const KeyBlock &kb, int keyblock_index)
blender::Vector< Object * > objects_in_mode_or_selected(bContext *C, bool(*filter_fn)(const Object *ob, void *user_data), void *filter_user_data)
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
const char * name
Definition DNA_ID.h:414
wmOperatorType * ot
Definition wm_files.cc:4237
uint8_t flag
Definition wm_window.cc:145