Blender V5.0
BKE_modifier.hh
Go to the documentation of this file.
1/* SPDX-FileCopyrightText: 2023 Blender Authors
2 *
3 * SPDX-License-Identifier: GPL-2.0-or-later */
4#pragma once
5
10#include "BLI_function_ref.hh"
12#include "BLI_span.hh"
13
14#include "BKE_lib_query.hh" /* For LibraryForeachIDCallbackFlag. */
15
16#include "DNA_modifier_types.h" /* Needed for all enum type definitions. */
17
19
20namespace blender::bke {
21struct GeometrySet;
22}
23struct ARegionType;
24struct bArmature;
25struct BMEditMesh;
26struct BlendDataReader;
27struct BlendWriter;
29struct DepsNodeHandle;
30struct Depsgraph;
31struct ID;
33struct ListBase;
34struct Main;
35struct Mesh;
36struct ModifierData;
37struct Object;
38struct PointerRNA;
39struct PropertyRNA;
40struct Scene;
41struct StructRNA;
42struct IDCacheKey;
43
74
133
134using IDWalkFunc = void (*)(void *user_data,
135 Object *ob,
136 ID **idpoin,
138using TexWalkFunc = void (*)(void *user_data,
139 Object *ob,
140 ModifierData *md,
141 const PointerRNA *ptr,
142 PropertyRNA *texture_prop);
143
168
174
184
190 char idname[64];
191
193 char name[64];
194
199 char struct_name[64];
200
203
206
209
211 int icon;
212
213 /********************* Non-optional functions *********************/
214
221 void (*copy_data)(const ModifierData *md, ModifierData *target, int flag);
222
223 /********************* Deform modifier functions *********************/
224
231 const ModifierEvalContext *ctx,
232 Mesh *mesh,
234
239 const ModifierEvalContext *ctx,
240 Mesh *mesh,
248 const ModifierEvalContext *ctx,
249 const BMEditMesh *em,
250 Mesh *mesh,
252
255 const ModifierEvalContext *ctx,
256 const BMEditMesh *em,
257 Mesh *mesh,
260
261 /********************* Non-deform modifier functions *********************/
262
274 Mesh *(*modify_mesh)(ModifierData *md, const ModifierEvalContext *ctx, Mesh *mesh);
275
282 const ModifierEvalContext *ctx,
283 blender::bke::GeometrySet *geometry_set);
284
285 /********************* Optional functions *********************/
286
294
310
320
330 bool (*is_disabled)(const Scene *scene, ModifierData *md, bool use_render_params);
331
338
345 bool (*depends_on_time)(Scene *scene, ModifierData *md);
346
353
362 void (*foreach_ID_link)(ModifierData *md, Object *ob, IDWalkFunc walk, void *user_data);
363
372 void (*foreach_tex_link)(ModifierData *md, Object *ob, TexWalkFunc walk, void *user_data);
373
385 void (*free_runtime_data)(void *runtime_data);
386
388 void (*panel_register)(ARegionType *region_type);
389
397 void (*blend_write)(BlendWriter *writer, const ID *id_owner, const ModifierData *md);
398
406
411 Object *object,
412 ModifierData *md,
413 blender::FunctionRef<void(const IDCacheKey &cache_key, void **cache_p, uint flags)> fn);
414
420};
421
423#define MODIFIER_TYPE_PANEL_PREFIX "MOD_PT_"
424
426void BKE_modifier_init();
427
429
430/* For modifier UI panels. */
431
435void BKE_modifier_type_panel_id(ModifierType type, char *r_idname);
437
443
450
452
454
458void BKE_modifier_copydata_generic(const ModifierData *md, ModifierData *md_dst, int flag);
459void BKE_modifier_copydata(const ModifierData *md, ModifierData *target);
460void BKE_modifier_copydata_ex(const ModifierData *md, ModifierData *target, int flag);
474bool BKE_modifier_is_enabled(const Scene *scene, ModifierData *md, int required_mode);
482
487void BKE_modifier_set_error(const Object *ob, ModifierData *md, const char *format, ...)
488 ATTR_PRINTF_FORMAT(3, 4);
489
495void BKE_modifier_set_warning(const Object *ob, ModifierData *md, const char *format, ...)
496 ATTR_PRINTF_FORMAT(3, 4);
497
498void BKE_modifiers_foreach_ID_link(Object *ob, IDWalkFunc walk, void *user_data);
499void BKE_modifiers_foreach_tex_link(Object *ob, TexWalkFunc walk, void *user_data);
500
502ModifierData *BKE_modifiers_findby_name(const Object *ob, const char *name);
503ModifierData *BKE_modifiers_findby_persistent_uid(const Object *ob, int persistent_uid);
504
506
516
523int BKE_modifiers_get_cage_index(const Scene *scene,
524 Object *ob,
525 int *r_lastPossibleCageIndex,
526 bool is_virtual);
527
548
553
561 ModifierData *md,
562 CustomData_MeshMasks *final_datamask,
563 int required_mode);
564
571
577
582
587
591void BKE_modifier_path_init(char *path, int path_maxncpy, const char *name);
592const char *BKE_modifier_path_relbase(Main *bmain, Object *ob);
594
595/* Accessors of original/evaluated modifiers. */
596
603
604/* wrappers for modifier callbacks that ensure valid normals */
605
607
612 const ModifierEvalContext *ctx,
613 Mesh *mesh,
615
617 const ModifierEvalContext *ctx,
618 const BMEditMesh *em,
619 Mesh *mesh,
621
629
630void BKE_modifier_blend_write(BlendWriter *writer, const ID *id_owner, ListBase *modbase);
632
633namespace blender::bke {
634
640 private:
641 ModifierData &md_;
642 double start_time_;
643
644 public:
647};
648
649} // namespace blender::bke
LibraryForeachIDCallbackFlag
bool BKE_modifier_depends_ontime(Scene *scene, ModifierData *md)
void BKE_modifier_panel_expand(ModifierData *md)
bool BKE_modifier_is_non_geometrical(ModifierData *md)
Object * BKE_modifiers_is_deformed_by_curve(Object *ob)
void BKE_modifier_path_init(char *path, int path_maxncpy, const char *name)
void BKE_modifiers_clear_errors(Object *ob)
void BKE_modifier_blend_write(BlendWriter *writer, const ID *id_owner, ListBase *modbase)
void(*)(void *user_data, Object *ob, ID **idpoin, LibraryForeachIDCallbackFlag cb_flag) IDWalkFunc
Mesh * BKE_modifier_get_evaluated_mesh_from_evaluated_object(Object *ob_eval)
bool BKE_modifier_is_enabled(const Scene *scene, ModifierData *md, int required_mode)
int BKE_modifiers_get_cage_index(const Scene *scene, Object *ob, int *r_lastPossibleCageIndex, bool is_virtual)
void BKE_modifier_copydata_ex(const ModifierData *md, ModifierData *target, int flag)
ModifierData * BKE_modifiers_findby_type(const Object *ob, ModifierType type)
bool BKE_modifiers_uses_multires(Object *ob)
const ModifierTypeInfo * BKE_modifier_get_info(ModifierType type)
CDMaskLink * BKE_modifier_calc_data_masks(const Scene *scene, ModifierData *md, CustomData_MeshMasks *final_datamask, int required_mode)
void BKE_modifiers_persistent_uid_init(const Object &object, ModifierData &md)
Object * BKE_modifiers_is_deformed_by_lattice(Object *ob)
void BKE_modifier_copydata_generic(const ModifierData *md, ModifierData *md_dst, int flag)
ModifierTypeFlag
@ eModifierTypeFlag_AcceptsBMesh
@ eModifierTypeFlag_Single
@ eModifierTypeFlag_UsesPointCache
@ eModifierTypeFlag_NoUserAdd
@ eModifierTypeFlag_AcceptsCVs
@ eModifierTypeFlag_SupportsMapping
@ eModifierTypeFlag_AcceptsGreasePencil
@ eModifierTypeFlag_EnableInEditmode
@ eModifierTypeFlag_SupportsEditmode
@ eModifierTypeFlag_AcceptsVertexCosOnly
@ eModifierTypeFlag_RequiresOriginalData
@ eModifierTypeFlag_AcceptsMesh
void BKE_modifier_blend_read_data(BlendDataReader *reader, ListBase *lb, Object *ob)
const char * BKE_modifier_path_relbase_from_global(Object *ob)
bool BKE_modifiers_uses_armature(Object *ob, bArmature *arm)
void void void BKE_modifiers_foreach_ID_link(Object *ob, IDWalkFunc walk, void *user_data)
ModifierData * BKE_modifier_get_original(const Object *object, ModifierData *md)
bool BKE_modifier_supports_mapping(ModifierData *md)
ModifierData * BKE_modifiers_findby_name(const Object *ob, const char *name)
bool BKE_modifier_supports_cage(Scene *scene, ModifierData *md)
void BKE_modifier_init()
const char * BKE_modifier_path_relbase(Main *bmain, Object *ob)
void BKE_modifier_free_temporary_data(ModifierData *md)
ModifierData * BKE_modifier_copy_ex(const ModifierData *md, int flag)
bool BKE_modifier_is_same_topology(ModifierData *md)
void BKE_modifier_unique_name(ListBase *modifiers, ModifierData *md)
Mesh * BKE_modifier_modify_mesh(ModifierData *md, const ModifierEvalContext *ctx, Mesh *mesh)
void BKE_modifier_free(ModifierData *md)
bool BKE_modifier_is_nonlocal_in_liboverride(const Object *ob, const ModifierData *md)
void BKE_modifiers_test_object(Object *ob)
void BKE_modifier_set_error(const Object *ob, ModifierData *md, const char *format,...) ATTR_PRINTF_FORMAT(3
Object * BKE_modifiers_is_deformed_by_meshdeform(Object *ob)
void BKE_modifier_remove_from_list(Object *ob, ModifierData *md)
void BKE_modifier_mdef_compact_influences(ModifierData *md)
void(*)(void *user_data, Object *ob, ModifierData *md, const PointerRNA *ptr, PropertyRNA *texture_prop) TexWalkFunc
ModifierTypeType
bool BKE_modifiers_persistent_uids_are_valid(const Object &object)
void BKE_modifier_free_ex(ModifierData *md, int flag)
bool BKE_modifier_deform_verts(ModifierData *md, const ModifierEvalContext *ctx, Mesh *mesh, blender::MutableSpan< blender::float3 > positions)
void BKE_modifier_deform_vertsEM(ModifierData *md, const ModifierEvalContext *ctx, const BMEditMesh *em, Mesh *mesh, blender::MutableSpan< blender::float3 > positions)
bool BKE_modifier_is_correctable_deformed(ModifierData *md)
ModifierData * BKE_modifier_get_evaluated(Depsgraph *depsgraph, Object *object, ModifierData *md)
ModifierData * BKE_modifiers_get_virtual_modifierlist(const Object *ob, VirtualModifierData *data)
bool BKE_modifiers_is_correctable_deformed(const Scene *scene, Object *ob)
void BKE_modifier_type_panel_id(ModifierType type, char *r_idname)
ModifierData * BKE_modifier_new(int type)
bool BKE_modifier_couldbe_cage(Scene *scene, ModifierData *md)
Object * BKE_modifiers_is_deformed_by_armature(Object *ob)
ModifierApplyFlag
@ MOD_APPLY_TO_ORIGINAL
@ MOD_APPLY_USECACHE
@ MOD_APPLY_RENDER
@ MOD_APPLY_IGNORE_SIMPLIFY
@ MOD_APPLY_ORCO
ModifierData * BKE_modifiers_findby_persistent_uid(const Object *ob, int persistent_uid)
void void BKE_modifier_set_warning(const Object *ob, ModifierData *md, const char *format,...) ATTR_PRINTF_FORMAT(3
void BKE_modifier_copydata(const ModifierData *md, ModifierData *target)
void BKE_modifiers_foreach_tex_link(Object *ob, TexWalkFunc walk, void *user_data)
#define ATTR_PRINTF_FORMAT(format_param, dots_param)
unsigned int uint
#define ENUM_OPERATORS(_type, _max)
BMesh const char void * data
BPy_StructRNA * depsgraph
format
const char * name
Definition DNA_ID.h:414
ModifierApplyFlag flag
void(* copy_data)(const ModifierData *md, ModifierData *target, int flag)
bool(* depends_on_time)(Scene *scene, ModifierData *md)
void(* modify_geometry_set)(ModifierData *md, const ModifierEvalContext *ctx, blender::bke::GeometrySet *geometry_set)
void(* blend_write)(BlendWriter *writer, const ID *id_owner, const ModifierData *md)
void(* foreach_ID_link)(ModifierData *md, Object *ob, IDWalkFunc walk, void *user_data)
void(* required_data_mask)(ModifierData *md, CustomData_MeshMasks *r_cddata_masks)
void(* deform_verts)(ModifierData *md, const ModifierEvalContext *ctx, Mesh *mesh, blender::MutableSpan< blender::float3 > positions)
void(* free_data)(ModifierData *md)
void(* deform_matrices_EM)(ModifierData *md, const ModifierEvalContext *ctx, const BMEditMesh *em, Mesh *mesh, blender::MutableSpan< blender::float3 > positions, blender::MutableSpan< blender::float3x3 > matrices)
void(* free_runtime_data)(void *runtime_data)
bool(* is_disabled)(const Scene *scene, ModifierData *md, bool use_render_params)
ModifierTypeFlag flags
ModifierTypeType type
void(* panel_register)(ARegionType *region_type)
void(* foreach_cache)(Object *object, ModifierData *md, blender::FunctionRef< void(const IDCacheKey &cache_key, void **cache_p, uint flags)> fn)
bool(* depends_on_normals)(ModifierData *md)
void(* deform_verts_EM)(ModifierData *md, const ModifierEvalContext *ctx, const BMEditMesh *em, Mesh *mesh, blender::MutableSpan< blender::float3 > positions)
void(* blend_read)(BlendDataReader *reader, ModifierData *md)
void(* init_data)(ModifierData *md)
void(* foreach_tex_link)(ModifierData *md, Object *ob, TexWalkFunc walk, void *user_data)
void(* update_depsgraph)(ModifierData *md, const ModifierUpdateDepsgraphContext *ctx)
void(* foreach_working_space_color)(ModifierData *md, const IDTypeForeachColorFunctionCallback &fn)
void(* deform_matrices)(ModifierData *md, const ModifierEvalContext *ctx, Mesh *mesh, blender::MutableSpan< blender::float3 > positions, blender::MutableSpan< blender::float3x3 > matrices)
ArmatureModifierData amd
CurveModifierData cmd
LatticeModifierData lmd
ShapeKeyModifierData smd
PointerRNA * ptr
Definition wm_files.cc:4238
uint8_t flag
Definition wm_window.cc:145