Cleanup: remove redundant doxygen \file argument
[blender.git] / source / blender / editors / include / ED_object.h
1 /*
2  * This program is free software; you can redistribute it and/or
3  * modify it under the terms of the GNU General Public License
4  * as published by the Free Software Foundation; either version 2
5  * of the License, or (at your option) any later version.
6  *
7  * This program is distributed in the hope that it will be useful,
8  * but WITHOUT ANY WARRANTY; without even the implied warranty of
9  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
10  * GNU General Public License for more details.
11  *
12  * You should have received a copy of the GNU General Public License
13  * along with this program; if not, write to the Free Software Foundation,
14  * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
15  *
16  * The Original Code is Copyright (C) 2008 Blender Foundation.
17  * All rights reserved.
18  */
19
20 /** \file \ingroup editors
21  */
22
23 #ifndef __ED_OBJECT_H__
24 #define __ED_OBJECT_H__
25
26 #ifdef __cplusplus
27 extern "C" {
28 #endif
29
30 struct Base;
31 struct Depsgraph;
32 struct EnumPropertyItem;
33 struct EnumPropertyItem;
34 struct ID;
35 struct Main;
36 struct Menu;
37 struct ModifierData;
38 struct Object;
39 struct PointerRNA;
40 struct PropertyRNA;
41 struct ReportList;
42 struct Scene;
43 struct ShaderFxData;
44 struct View3D;
45 struct ViewLayer;
46 struct bConstraint;
47 struct bContext;
48 struct bFaceMap;
49 struct bPoseChannel;
50 struct uiLayout;
51 struct wmKeyConfig;
52 struct wmKeyMap;
53 struct wmOperator;
54 struct wmOperatorType;
55 struct wmWindow;
56 struct wmWindowManager;
57
58 #include "DNA_object_enums.h"
59 #include "BLI_compiler_attrs.h"
60
61 /* object_edit.c */
62 /* context.object */
63 struct Object *ED_object_context(struct bContext *C);
64 /* context.object or context.active_object */
65 struct Object *ED_object_active_context(struct bContext *C);
66 void ED_collection_hide_menu_draw(const struct bContext *C, struct uiLayout *layout);
67
68 /* object_utils.c */
69 bool ED_object_calc_active_center_for_editmode(
70         struct Object *obedit, const bool select_only, float r_center[3]);
71 bool ED_object_calc_active_center_for_posemode(
72         struct Object *ob, const bool select_only, float r_center[3]);
73 bool ED_object_calc_active_center(
74         struct Object *ob, const bool select_only, float r_center[3]);
75
76 /* object_ops.c */
77 void ED_operatortypes_object(void);
78 void ED_operatormacros_object(void);
79 void ED_keymap_object(struct wmKeyConfig *keyconf);
80
81 /* object_relations.c */
82 typedef enum eParentType {
83         PAR_OBJECT,
84         PAR_ARMATURE,
85         PAR_ARMATURE_NAME,
86         PAR_ARMATURE_ENVELOPE,
87         PAR_ARMATURE_AUTO,
88         PAR_BONE,
89         PAR_BONE_RELATIVE,
90         PAR_CURVE,
91         PAR_FOLLOW,
92         PAR_PATH_CONST,
93         PAR_LATTICE,
94         PAR_VERTEX,
95         PAR_VERTEX_TRI,
96 } eParentType;
97
98 typedef enum eObjectSelect_Mode {
99         BA_DESELECT = 0,
100         BA_SELECT = 1,
101         BA_INVERT = 2,
102 } eObjectSelect_Mode;
103
104 #ifdef __RNA_TYPES_H__
105 extern struct EnumPropertyItem prop_clear_parent_types[];
106 extern struct EnumPropertyItem prop_make_parent_types[];
107 #endif
108
109 bool ED_object_parent_set(struct ReportList *reports, const struct bContext *C, struct Scene *scene, struct Object *ob,
110                           struct Object *par, int partype, const bool xmirror, const bool keep_transform,
111                           const int vert_par[3]);
112 void ED_object_parent_clear(struct Object *ob, const int type);
113
114 void ED_object_base_select(struct Base *base, eObjectSelect_Mode mode);
115 void ED_object_base_activate(struct bContext *C, struct Base *base);
116 void ED_object_base_free_and_unlink(struct Main *bmain, struct Scene *scene, struct Object *ob);
117 bool ED_object_base_deselect_all_ex(struct ViewLayer *view_layer, struct View3D *v3d, int action, bool *r_any_visible);
118 bool ED_object_base_deselect_all(struct ViewLayer *view_layer, struct View3D *v3d, int action);
119
120 /* single object duplicate, if (dupflag == 0), fully linked, else it uses the flags given */
121 struct Base *ED_object_add_duplicate(struct Main *bmain, struct Scene *scene, struct ViewLayer *view_layer, struct Base *base, int dupflag);
122
123 void ED_object_parent(struct Object *ob, struct Object *parent, const int type, const char *substr);
124
125 /* bitflags for enter/exit editmode */
126 enum {
127         EM_FREEDATA         = (1 << 0),
128         EM_NO_CONTEXT       = (1 << 1),
129 };
130 bool ED_object_editmode_exit_ex(
131         struct Main *bmain, struct Scene *scene, struct Object *obedit, int flag);
132 bool ED_object_editmode_exit(struct bContext *C, int flag);
133
134 bool ED_object_editmode_enter_ex(struct Main *bmain, struct Scene *scene, struct Object *ob, int flag);
135 bool ED_object_editmode_enter(struct bContext *C, int flag);
136 bool ED_object_editmode_load(struct Main *bmain, struct Object *obedit);
137
138 void ED_object_vpaintmode_enter_ex(
139         struct Main *bmain, struct Depsgraph *depsgraph, struct wmWindowManager *wm,
140         struct Scene *scene, struct Object *ob);
141 void ED_object_vpaintmode_enter(struct bContext *C);
142 void ED_object_wpaintmode_enter_ex(
143         struct Main *bmain, struct Depsgraph *depsgraph, struct wmWindowManager *wm,
144         struct Scene *scene, struct Object *ob);
145 void ED_object_wpaintmode_enter(struct bContext *C);
146
147 void ED_object_vpaintmode_exit_ex(struct Object *ob);
148 void ED_object_vpaintmode_exit(struct bContext *C);
149 void ED_object_wpaintmode_exit_ex(struct Object *ob);
150 void ED_object_wpaintmode_exit(struct bContext *C);
151
152 void ED_object_sculptmode_enter_ex(
153         struct Main *bmain, struct Depsgraph *depsgraph,
154         struct Scene *scene, struct Object *ob,
155         struct ReportList *reports);
156 void ED_object_sculptmode_enter(struct bContext *C, struct ReportList *reports);
157 void ED_object_sculptmode_exit_ex(
158         struct Depsgraph *depsgraph,
159         struct Scene *scene, struct Object *ob);
160 void ED_object_sculptmode_exit(struct bContext *C);
161
162 void ED_object_location_from_view(struct bContext *C, float loc[3]);
163 void ED_object_rotation_from_quat(float rot[3], const float quat[4], const char align_axis);
164 void ED_object_rotation_from_view(struct bContext *C, float rot[3], const char align_axis);
165 void ED_object_base_init_transform(struct bContext *C, struct Base *base, const float loc[3], const float rot[3]);
166 float ED_object_new_primitive_matrix(
167         struct bContext *C, struct Object *editob,
168         const float loc[3], const float rot[3], float primmat[4][4]);
169
170
171 /* Avoid allowing too much insane values even by typing
172  * (typos can hang/crash Blender otherwise). */
173 #define OBJECT_ADD_SIZE_MAXF 1.0e12f
174
175 void ED_object_add_unit_props_size(struct wmOperatorType *ot);
176 void ED_object_add_unit_props_radius(struct wmOperatorType *ot);
177 void ED_object_add_generic_props(struct wmOperatorType *ot, bool do_editmode);
178 void ED_object_add_mesh_props(struct wmOperatorType *ot);
179 bool ED_object_add_generic_get_opts(
180         struct bContext *C, struct wmOperator *op, const char view_align_axis,
181         float loc[3], float rot[3],
182         bool *enter_editmode, unsigned short *local_view_bits, bool *is_view_aligned);
183
184 struct Object *ED_object_add_type(
185         struct bContext *C,
186         int type, const char *name, const float loc[3], const float rot[3],
187         bool enter_editmode, unsigned short local_view_bits)
188         ATTR_NONNULL(1) ATTR_RETURNS_NONNULL;
189
190 void ED_object_single_users(struct Main *bmain, struct Scene *scene, const bool full, const bool copy_groups);
191 void ED_object_single_user(struct Main *bmain, struct Scene *scene, struct Object *ob);
192
193 /* object motion paths */
194 void ED_objects_clear_paths(struct bContext *C, bool only_selected);
195 void ED_objects_recalculate_paths(struct bContext *C, struct Scene *scene, bool current_frame_only);
196
197 /* constraints */
198 struct ListBase *get_active_constraints(struct Object *ob);
199 struct ListBase *get_constraint_lb(struct Object *ob, struct bConstraint *con, struct bPoseChannel **r_pchan);
200 struct bConstraint *get_active_constraint(struct Object *ob);
201
202 void object_test_constraints(struct Main *bmain, struct Object *ob);
203
204 void ED_object_constraint_set_active(struct Object *ob, struct bConstraint *con);
205 void ED_object_constraint_update(struct Main *bmain, struct Object *ob);
206 void ED_object_constraint_dependency_update(struct Main *bmain, struct Object *ob);
207
208 void ED_object_constraint_tag_update(struct Main *bmain, struct Object *ob, struct bConstraint *con);
209 void ED_object_constraint_dependency_tag_update(struct Main *bmain, struct Object *ob, struct bConstraint *con);
210
211 /* object_modes.c */
212 bool ED_object_mode_compat_test(const struct Object *ob, eObjectMode mode);
213 bool ED_object_mode_compat_set(struct bContext *C, struct Object *ob, eObjectMode mode, struct ReportList *reports);
214 void ED_object_mode_toggle(struct bContext *C, eObjectMode mode);
215 void ED_object_mode_set(struct bContext *C, eObjectMode mode);
216 void ED_object_mode_exit(struct bContext *C);
217
218 bool ED_object_mode_generic_enter(
219         struct bContext *C,
220         eObjectMode object_mode);
221 void ED_object_mode_generic_exit(
222         struct Main *bmain,
223         struct Depsgraph *depsgraph,
224         struct Scene *scene, struct Object *ob);
225 bool ED_object_mode_generic_has_data(
226         struct Depsgraph *depsgraph,
227         struct Object *ob);
228
229 /* object_modifier.c */
230 enum {
231         MODIFIER_APPLY_DATA = 1,
232         MODIFIER_APPLY_SHAPE,
233 };
234
235 struct ModifierData *ED_object_modifier_add(
236         struct ReportList *reports, struct Main *bmain, struct Scene *scene,
237         struct Object *ob, const char *name, int type);
238 bool ED_object_modifier_remove(struct ReportList *reports, struct Main *bmain,
239                                struct Object *ob, struct ModifierData *md);
240 void ED_object_modifier_clear(struct Main *bmain, struct Object *ob);
241 int ED_object_modifier_move_down(struct ReportList *reports, struct Object *ob, struct ModifierData *md);
242 int ED_object_modifier_move_up(struct ReportList *reports, struct Object *ob, struct ModifierData *md);
243 int ED_object_modifier_convert(
244         struct ReportList *reports, struct Main *bmain, struct Depsgraph *depsgraph, struct Scene *scene,
245         struct ViewLayer *view_layer, struct Object *ob, struct ModifierData *md);
246 int ED_object_modifier_apply(
247         struct Main *bmain, struct ReportList *reports, struct Depsgraph *depsgraph, struct Scene *scene,
248         struct Object *ob, struct ModifierData *md, int mode);
249 int ED_object_modifier_copy(struct ReportList *reports, struct Object *ob, struct ModifierData *md);
250
251 bool ED_object_iter_other(
252         struct Main *bmain, struct Object *orig_ob, const bool include_orig,
253         bool (*callback)(struct Object *ob, void *callback_data),
254         void *callback_data);
255
256 bool ED_object_multires_update_totlevels_cb(struct Object *ob, void *totlevel_v);
257
258
259 /* object_greasepencil_modifier.c */
260 struct GpencilModifierData *ED_object_gpencil_modifier_add(
261         struct ReportList *reports, struct Main *bmain, struct Scene *scene,
262         struct Object *ob, const char *name, int type);
263 bool ED_object_gpencil_modifier_remove(
264         struct ReportList *reports, struct Main *bmain,
265         struct Object *ob, struct GpencilModifierData *md);
266 void ED_object_gpencil_modifier_clear(
267         struct Main *bmain, struct Object *ob);
268 int ED_object_gpencil_modifier_move_down(
269         struct ReportList *reports, struct Object *ob, struct GpencilModifierData *md);
270 int ED_object_gpencil_modifier_move_up(
271         struct ReportList *reports, struct Object *ob, struct GpencilModifierData *md);
272 int ED_object_gpencil_modifier_apply(
273         struct Main *bmain, struct ReportList *reports, struct Depsgraph *depsgraph,
274         struct Object *ob, struct GpencilModifierData *md, int mode);
275 int ED_object_gpencil_modifier_copy(
276         struct ReportList *reports, struct Object *ob, struct GpencilModifierData *md);
277
278 /* object_shader_fx.c */
279 struct ShaderFxData *ED_object_shaderfx_add(
280         struct ReportList *reports, struct Main *bmain, struct Scene *scene,
281         struct Object *ob, const char *name, int type);
282 bool ED_object_shaderfx_remove(
283         struct ReportList *reports, struct Main *bmain,
284         struct Object *ob, struct ShaderFxData *fx);
285 void ED_object_shaderfx_clear(
286         struct Main *bmain, struct Object *ob);
287 int ED_object_shaderfx_move_down(
288         struct ReportList *reports, struct Object *ob, struct ShaderFxData *fx);
289 int ED_object_shaderfx_move_up(
290         struct ReportList *reports, struct Object *ob, struct ShaderFxData *fx);
291
292 /* object_select.c */
293 void ED_object_select_linked_by_id(struct bContext *C, struct ID *id);
294
295 const struct EnumPropertyItem *ED_object_vgroup_selection_itemf_helper(
296         const struct bContext *C,
297         struct PointerRNA *ptr,
298         struct PropertyRNA *prop,
299         bool *r_free,
300         const unsigned int selection_mask);
301
302 void ED_object_check_force_modifiers(
303         struct Main *bmain, struct Scene *scene, struct Object *object);
304
305 struct Base *ED_object_find_first_by_data_id(struct ViewLayer *view_layer, struct ID *id);
306
307 bool ED_object_jump_to_object(
308         struct bContext *C, struct Object *ob,
309         const bool reveal_hidden);
310 bool ED_object_jump_to_bone(
311         struct bContext *C, struct Object *ob, const char *bone_name,
312         const bool reveal_hidden);
313
314 /* object_facemap_ops.c */
315 void ED_object_facemap_face_add(struct Object *ob, struct bFaceMap *fmap, int facenum);
316 void ED_object_facemap_face_remove(struct Object *ob, struct bFaceMap *fmap, int facenum);
317
318 #ifdef __cplusplus
319 }
320 #endif
321
322 #endif /* __ED_OBJECT_H__ */