Blender V4.5
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;
32struct ListBase;
33struct Main;
34struct Mesh;
35struct ModifierData;
36struct Object;
37struct PointerRNA;
38struct PropertyRNA;
39struct Scene;
40struct StructRNA;
41struct IDCacheKey;
42
43enum class ModifierTypeType {
44 /* Should not be used, only for None modifier type */
46
54
57 /* Modifier can add and remove geometry. */
59
66
72};
73
132
133using IDWalkFunc = void (*)(void *user_data,
134 Object *ob,
135 ID **idpoin,
137using TexWalkFunc = void (*)(void *user_data,
138 Object *ob,
139 ModifierData *md,
140 const PointerRNA *ptr,
141 PropertyRNA *texture_prop);
142
167
173
183
189 char idname[64];
190
192 char name[64];
193
198 char struct_name[64];
199
202
205
208
210 int icon;
211
212 /********************* Non-optional functions *********************/
213
220 void (*copy_data)(const ModifierData *md, ModifierData *target, int flag);
221
222 /********************* Deform modifier functions *********************/
223
230 const ModifierEvalContext *ctx,
231 Mesh *mesh,
233
238 const ModifierEvalContext *ctx,
239 Mesh *mesh,
247 const ModifierEvalContext *ctx,
248 const BMEditMesh *em,
249 Mesh *mesh,
251
252 /* Set deform matrix per vertex for crazy-space correction */
254 const ModifierEvalContext *ctx,
255 const BMEditMesh *em,
256 Mesh *mesh,
259
260 /********************* Non-deform modifier functions *********************/
261
273 Mesh *(*modify_mesh)(ModifierData *md, const ModifierEvalContext *ctx, Mesh *mesh);
274
281 const ModifierEvalContext *ctx,
282 blender::bke::GeometrySet *geometry_set);
283
284 /********************* Optional functions *********************/
285
293
309
319
329 bool (*is_disabled)(const Scene *scene, ModifierData *md, bool use_render_params);
330
337
344 bool (*depends_on_time)(Scene *scene, ModifierData *md);
345
352
361 void (*foreach_ID_link)(ModifierData *md, Object *ob, IDWalkFunc walk, void *user_data);
362
371 void (*foreach_tex_link)(ModifierData *md, Object *ob, TexWalkFunc walk, void *user_data);
372
384 void (*free_runtime_data)(void *runtime_data);
385
387 void (*panel_register)(ARegionType *region_type);
388
396 void (*blend_write)(BlendWriter *writer, const ID *id_owner, const ModifierData *md);
397
405
410 Object *object,
411 ModifierData *md,
412 blender::FunctionRef<void(const IDCacheKey &cache_key, void **cache_p, uint flags)> fn);
413};
414
416#define MODIFIER_TYPE_PANEL_PREFIX "MOD_PT_"
417
419void BKE_modifier_init();
420
422
423/* For modifier UI panels. */
424
428void BKE_modifier_type_panel_id(ModifierType type, char *r_idname);
430
436
443
445
447
451void BKE_modifier_copydata_generic(const ModifierData *md, ModifierData *md_dst, int flag);
452void BKE_modifier_copydata(const ModifierData *md, ModifierData *target);
453void BKE_modifier_copydata_ex(const ModifierData *md, ModifierData *target, int flag);
467bool BKE_modifier_is_enabled(const Scene *scene, ModifierData *md, int required_mode);
475
480void BKE_modifier_set_error(const Object *ob, ModifierData *md, const char *format, ...)
481 ATTR_PRINTF_FORMAT(3, 4);
482
488void BKE_modifier_set_warning(const Object *ob, ModifierData *md, const char *format, ...)
489 ATTR_PRINTF_FORMAT(3, 4);
490
491void BKE_modifiers_foreach_ID_link(Object *ob, IDWalkFunc walk, void *user_data);
492void BKE_modifiers_foreach_tex_link(Object *ob, TexWalkFunc walk, void *user_data);
493
495ModifierData *BKE_modifiers_findby_name(const Object *ob, const char *name);
496ModifierData *BKE_modifiers_findby_persistent_uid(const Object *ob, int persistent_uid);
497
499
509
516int BKE_modifiers_get_cage_index(const Scene *scene,
517 Object *ob,
518 int *r_lastPossibleCageIndex,
519 bool is_virtual);
520
541
546
554 ModifierData *md,
555 CustomData_MeshMasks *final_datamask,
556 int required_mode);
557
564
570
575
580
584void BKE_modifier_path_init(char *path, int path_maxncpy, const char *name);
585const char *BKE_modifier_path_relbase(Main *bmain, Object *ob);
587
588/* Accessors of original/evaluated modifiers. */
589
596
597/* wrappers for modifier callbacks that ensure valid normals */
598
600
605 const ModifierEvalContext *ctx,
606 Mesh *mesh,
608
610 const ModifierEvalContext *ctx,
611 const BMEditMesh *em,
612 Mesh *mesh,
614
622
623void BKE_modifier_blend_write(BlendWriter *writer, const ID *id_owner, ListBase *modbase);
625
626namespace blender::bke {
627
633 private:
634 ModifierData &md_;
635 double start_time_;
636
637 public:
640};
641
642} // 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(*)(void *user_data, Object *ob, ID **idpoin, LibraryForeachIDCallbackFlag cb_flag) IDWalkFunc
void BKE_modifiers_clear_errors(Object *ob)
void BKE_modifier_blend_write(BlendWriter *writer, const ID *id_owner, ListBase *modbase)
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)
void(*)(void *user_data, Object *ob, ModifierData *md, const PointerRNA *ptr, PropertyRNA *texture_prop) TexWalkFunc
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)
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
Definition DNA_ID.h:404
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(* 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:4226
uint8_t flag
Definition wm_window.cc:139