Blender V4.3
modifier.cc File Reference
#include <cfloat>
#include <chrono>
#include <cmath>
#include <cstdarg>
#include <cstddef>
#include <cstdlib>
#include <cstring>
#include "MEM_guardedalloc.h"
#include "DNA_armature_types.h"
#include "DNA_cloth_types.h"
#include "DNA_dynamicpaint_types.h"
#include "DNA_fluid_types.h"
#include "DNA_gpencil_modifier_types.h"
#include "DNA_mesh_types.h"
#include "DNA_object_fluidsim_types.h"
#include "DNA_object_force_types.h"
#include "DNA_object_types.h"
#include "DNA_particle_types.h"
#include "DNA_scene_types.h"
#include "DNA_screen_types.h"
#include "BLI_linklist.h"
#include "BLI_listbase.h"
#include "BLI_path_utils.hh"
#include "BLI_rand.hh"
#include "BLI_session_uid.h"
#include "BLI_string.h"
#include "BLI_string_utf8.h"
#include "BLI_string_utils.hh"
#include "BLI_utildefines.h"
#include "BLT_translation.hh"
#include "BKE_appdir.hh"
#include "BKE_editmesh.hh"
#include "BKE_editmesh_cache.hh"
#include "BKE_effect.h"
#include "BKE_fluid.h"
#include "BKE_global.hh"
#include "BKE_idtype.hh"
#include "BKE_key.hh"
#include "BKE_lib_id.hh"
#include "BKE_lib_query.hh"
#include "BKE_mesh.hh"
#include "BKE_mesh_wrapper.hh"
#include "BKE_multires.hh"
#include "BKE_object.hh"
#include "BKE_pointcache.h"
#include "BKE_screen.hh"
#include "BKE_main.hh"
#include "DEG_depsgraph.hh"
#include "DEG_depsgraph_query.hh"
#include "MOD_modifiertypes.hh"
#include "BLO_read_write.hh"
#include "CLG_log.h"

Go to the source code of this file.

Namespaces

namespace  blender
 
namespace  blender::bke
 

Macros

#define DNA_DEPRECATED_ALLOW
 

Typedefs

using blender::bke::Clock = std::chrono::high_resolution_clock
 

Functions

void BKE_modifier_init ()
 
const ModifierTypeInfoBKE_modifier_get_info (ModifierType type)
 
void BKE_modifier_type_panel_id (ModifierType type, char *r_idname)
 
void BKE_modifier_panel_expand (ModifierData *md)
 
static ModifierDatamodifier_allocate_and_init (ModifierType type)
 
ModifierDataBKE_modifier_new (int type)
 
static void modifier_free_data_id_us_cb (void *, Object *, ID **idpoin, int cb_flag)
 
void BKE_modifier_free_ex (ModifierData *md, const int flag)
 
void BKE_modifier_free (ModifierData *md)
 
void BKE_modifier_remove_from_list (Object *ob, ModifierData *md)
 
void BKE_modifier_unique_name (ListBase *modifiers, ModifierData *md)
 
bool BKE_modifier_depends_ontime (Scene *scene, ModifierData *md)
 
bool BKE_modifier_supports_mapping (ModifierData *md)
 
ModifierDataBKE_modifiers_findby_type (const Object *ob, ModifierType type)
 
ModifierDataBKE_modifiers_findby_name (const Object *ob, const char *name)
 
ModifierDataBKE_modifiers_findby_persistent_uid (const Object *ob, const int persistent_uid)
 
void BKE_modifiers_clear_errors (Object *ob)
 
void BKE_modifiers_foreach_ID_link (Object *ob, IDWalkFunc walk, void *user_data)
 
void BKE_modifiers_foreach_tex_link (Object *ob, TexWalkFunc walk, void *user_data)
 
ModifierDataBKE_modifier_copy_ex (const ModifierData *md, int flag)
 
void BKE_modifier_copydata_generic (const ModifierData *md_src, ModifierData *md_dst, const int)
 
static void modifier_copy_data_id_us_cb (void *, Object *, ID **idpoin, int cb_flag)
 
void BKE_modifier_copydata_ex (const ModifierData *md, ModifierData *target, const int flag)
 
void BKE_modifier_copydata (const ModifierData *md, ModifierData *target)
 
bool BKE_modifier_supports_cage (Scene *scene, ModifierData *md)
 
bool BKE_modifier_couldbe_cage (Scene *scene, ModifierData *md)
 
bool BKE_modifier_is_same_topology (ModifierData *md)
 
bool BKE_modifier_is_non_geometrical (ModifierData *md)
 
void BKE_modifier_set_error (const Object *ob, ModifierData *md, const char *_format,...)
 
void BKE_modifier_set_warning (const Object *ob, ModifierData *md, const char *_format,...)
 
int BKE_modifiers_get_cage_index (const Scene *scene, Object *ob, int *r_lastPossibleCageIndex, bool is_virtual)
 
bool BKE_modifier_is_enabled (const Scene *scene, ModifierData *md, int required_mode)
 
bool BKE_modifier_is_nonlocal_in_liboverride (const Object *ob, const ModifierData *md)
 
CDMaskLinkBKE_modifier_calc_data_masks (const Scene *scene, ModifierData *md, CustomData_MeshMasks *final_datamask, int required_mode)
 
ModifierDataBKE_modifiers_get_virtual_modifierlist (const Object *ob, VirtualModifierData *virtual_modifier_data)
 
ObjectBKE_modifiers_is_deformed_by_armature (Object *ob)
 
ObjectBKE_modifiers_is_deformed_by_meshdeform (Object *ob)
 
ObjectBKE_modifiers_is_deformed_by_lattice (Object *ob)
 
ObjectBKE_modifiers_is_deformed_by_curve (Object *ob)
 
bool BKE_modifiers_uses_multires (Object *ob)
 
bool BKE_modifiers_uses_armature (Object *ob, bArmature *arm)
 
bool BKE_modifier_is_correctable_deformed (ModifierData *md)
 
bool BKE_modifiers_is_correctable_deformed (const Scene *scene, Object *ob)
 
void BKE_modifier_free_temporary_data (ModifierData *md)
 
void BKE_modifiers_test_object (Object *ob)
 
const char * BKE_modifier_path_relbase (Main *bmain, Object *ob)
 
const char * BKE_modifier_path_relbase_from_global (Object *ob)
 
void BKE_modifier_path_init (char *path, int path_maxncpy, const char *name)
 
static void ensure_non_lazy_normals (Mesh *mesh)
 
MeshBKE_modifier_modify_mesh (ModifierData *md, const ModifierEvalContext *ctx, Mesh *mesh)
 
void 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)
 
MeshBKE_modifier_get_evaluated_mesh_from_evaluated_object (Object *ob_eval)
 
ModifierDataBKE_modifier_get_original (const Object *object, ModifierData *md)
 
ModifierDataBKE_modifier_get_evaluated (Depsgraph *depsgraph, Object *object, ModifierData *md)
 
void BKE_modifiers_persistent_uid_init (const Object &object, ModifierData &md)
 
bool BKE_modifiers_persistent_uids_are_valid (const Object &object)
 
void BKE_modifier_blend_write (BlendWriter *writer, const ID *id_owner, ListBase *modbase)
 
static void modifier_ensure_type (FluidModifierData *fluid_modifier_data, int type)
 
static ModifierDatamodifier_replace_with_fluid (BlendDataReader *reader, Object *object, ListBase *modifiers, ModifierData *old_modifier_data)
 
void BKE_modifier_blend_read_data (BlendDataReader *reader, ListBase *lb, Object *ob)
 
static double blender::bke::get_current_time_in_seconds ()
 

Variables

static CLG_LogRef LOG = {"bke.modifier"}
 
static ModifierTypeInfomodifier_types [NUM_MODIFIER_TYPES] = {nullptr}
 
static VirtualModifierData virtualModifierCommonData
 

Detailed Description

Modifier stack implementation. BKE_modifier.hh contains the function prototypes for this file.

Definition in file blenkernel/intern/modifier.cc.

Macro Definition Documentation

◆ DNA_DEPRECATED_ALLOW

#define DNA_DEPRECATED_ALLOW

Definition at line 12 of file blenkernel/intern/modifier.cc.

Function Documentation

◆ BKE_modifier_blend_read_data()

void BKE_modifier_blend_read_data ( BlendDataReader * reader,
ListBase * lb,
Object * ob )

Definition at line 1242 of file blenkernel/intern/modifier.cc.

References BKE_effector_add_weights(), BKE_modifier_get_info(), BKE_ptcache_blend_read_data(), ModifierTypeInfo::blend_read, BLI_listbase_clear(), BLI_rw_mutex_alloc(), BLO_read_data_reports(), BLO_read_get_new_data_address_no_us(), BLO_read_struct, BLO_read_struct_list, BLO_reportf_wrap(), DynamicPaintModifierData::brush, DynamicPaintModifierData::canvas, ClothModifierData::clothObject, FluidDomainSettings::coba, ClothModifierData::coll_parms, FluidModifierData::domain, FluidModifierData::effector, ClothSimSettings::effector_weights, FluidDomainSettings::effector_weights, eModifierType_Cloth, eModifierType_DynamicPaint, eModifierType_Fluid, eModifierType_Fluidsim, eModifierType_None, ListBase::first, PointCache::flag, DynamicPaintCanvasSettings::flags, FluidDomainSettings::flags, FluidEffectorSettings::flags, FluidFlowSettings::flags, FluidModifierData::flow, FluidDomainSettings::fluid, FLUID_DOMAIN_FILE_LOAD, FluidDomainSettings::fluid_mutex, FluidDomainSettings::fmd, FluidEffectorSettings::fmd, FluidFlowSettings::fmd, ClothModifierData::hairdata, Object::id, ID_IS_LINKED, LISTBASE_FOREACH, FluidEffectorSettings::mesh, FluidFlowSettings::mesh, MOD_FLUID_TYPE_DOMAIN, MOD_FLUID_TYPE_EFFEC, MOD_FLUID_TYPE_FLOW, modifier_replace_with_fluid(), ID::name, FluidEffectorSettings::numverts, FluidFlowSettings::numverts, DynamicPaintBrushSettings::paint_ramp, DynamicPaintBrushSettings::pmd, DynamicPaintCanvasSettings::pmd, ClothModifierData::point_cache, FluidDomainSettings::point_cache, ClothSimSettings::presets, printf, DynamicPaintBrushSettings::psys, FluidFlowSettings::psys, PTCACHE_FAKE_SMOKE, ClothModifierData::ptcaches, FluidDomainSettings::ptcaches, ClothSimSettings::reset, RPT_, RPT_WARNING, ClothModifierData::sim_parms, ClothModifierData::solver_result, DynamicPaintCanvasSettings::surfaces, FluidDomainSettings::tex_coba, FluidDomainSettings::tex_color, FluidDomainSettings::tex_density, FluidDomainSettings::tex_field, FluidDomainSettings::tex_flame, FluidDomainSettings::tex_flame_coba, FluidDomainSettings::tex_shadow, FluidDomainSettings::tex_velocity_x, FluidDomainSettings::tex_velocity_y, FluidDomainSettings::tex_velocity_z, FluidDomainSettings::tex_wt, FluidModifierData::type, DynamicPaintBrushSettings::vel_ramp, FluidEffectorSettings::verts_old, and FluidFlowSettings::verts_old.

Referenced by object_blend_read_data().

◆ BKE_modifier_blend_write()

◆ BKE_modifier_calc_data_masks()

CDMaskLink * BKE_modifier_calc_data_masks ( const Scene * scene,
ModifierData * md,
CustomData_MeshMasks * final_datamask,
int required_mode )

Calculates and returns a linked list of CustomData_MeshMasks and modified final datamask, indicating the data required by each modifier in the stack pointed to by md for correct evaluation, assuming the data indicated by final_datamask is required at the end of the stack.

Definition at line 543 of file blenkernel/intern/modifier.cc.

References BKE_modifier_get_info(), BKE_modifier_is_enabled(), BLI_linklist_reverse(), CustomData_MeshMasks_update(), CDMaskLink::mask, CDMaskLink::next, ModifierData::next, OnlyDeform, ModifierTypeInfo::required_data_mask, ModifierData::type, ModifierTypeInfo::type, and CustomData_MeshMasks::vmask.

Referenced by BKE_crazyspace_get_first_deform_matrices_editbmesh(), blender::bke::editbmesh_calc_modifiers(), and blender::bke::mesh_calc_modifiers().

◆ BKE_modifier_copy_ex()

◆ BKE_modifier_copydata()

void BKE_modifier_copydata ( const ModifierData * md,
ModifierData * target )

◆ BKE_modifier_copydata_ex()

◆ BKE_modifier_copydata_generic()

◆ BKE_modifier_couldbe_cage()

◆ BKE_modifier_deform_verts()

◆ BKE_modifier_deform_vertsEM()

◆ BKE_modifier_depends_ontime()

◆ BKE_modifier_free()

◆ BKE_modifier_free_ex()

◆ BKE_modifier_free_temporary_data()

void BKE_modifier_free_temporary_data ( ModifierData * md)

◆ BKE_modifier_get_evaluated()

◆ BKE_modifier_get_evaluated_mesh_from_evaluated_object()

◆ BKE_modifier_get_info()

const ModifierTypeInfo * BKE_modifier_get_info ( ModifierType type)

Definition at line 113 of file blenkernel/intern/modifier.cc.

References modifier_types, and NUM_MODIFIER_TYPES.

Referenced by blender::ed::object::add_hook_object(), blender::ed::object::apply_grease_pencil_for_modifier(), blender::ed::object::apply_grease_pencil_for_modifier_all_keyframes(), BKE_crazyspace_build_sculpt(), BKE_crazyspace_get_first_deform_matrices_editbmesh(), BKE_curve_calc_modifiers_pre(), BKE_lattice_modifiers_calc(), BKE_modifier_blend_read_data(), BKE_modifier_blend_write(), BKE_modifier_calc_data_masks(), BKE_modifier_copydata_ex(), BKE_modifier_copydata_generic(), BKE_modifier_couldbe_cage(), BKE_modifier_deform_verts(), BKE_modifier_deform_vertsEM(), BKE_modifier_depends_ontime(), BKE_modifier_free_ex(), BKE_modifier_is_correctable_deformed(), BKE_modifier_is_enabled(), BKE_modifier_is_non_geometrical(), BKE_modifier_is_same_topology(), BKE_modifier_modify_mesh(), BKE_modifier_supports_cage(), BKE_modifier_supports_mapping(), BKE_modifier_type_panel_id(), BKE_modifier_unique_name(), BKE_modifiers_foreach_ID_link(), BKE_modifiers_foreach_tex_link(), BKE_modifiers_get_cage_index(), BKE_multires_create_deformed_base_mesh_vert_coords(), BKE_multires_create_mesh(), BKE_object_copy_modifier(), BKE_object_is_deform_modified(), BKE_object_support_modifier_type_check(), BKE_particlesystem_id_loop(), BKE_sculpt_get_first_deform_matrices(), blo_do_versions_pre250(), blender::deg::DepsgraphRelationBuilder::build_object_modifiers(), buttons_texture_modifier_foreach(), blender::ed::sculpt_paint::dyntopo::check_attribute_warning(), crazyspace_modifier_supports_deform(), crazyspace_modifier_supports_deform_matrices(), blender::ed::object::create_applied_mesh_for_modifier(), curve_calc_modifiers_post(), curve_get_tessellate_point(), curves_evaluate_modifiers(), ED_spacetype_buttons(), blender::bke::editbmesh_calc_modifiers(), blender::bke::editbmesh_modifier_is_enabled(), grease_pencil_evaluate_modifiers(), blender::bke::greasepencil::convert::legacy_object_modifier_common(), blender::bke::mesh_calc_modifiers(), blender::ed::object::modifier_add(), blender::ed::object::modifier_add_itemf(), modifier_allocate_and_init(), blender::ed::object::modifier_apply_exec_ex(), blender::ed::object::modifier_apply_obdata(), blender::ed::object::modifier_apply_shape(), blender::ed::object::modifier_copy_to_object(), blender::bke::modifier_modify_mesh_and_geometry_set(), modifier_panel_header(), object_foreach_cache(), blender::ed::object::object_modifier_check_move_after(), blender::ed::object::object_modifier_check_move_before(), pointcloud_evaluate_modifiers(), blender::deg::ObjectRuntimeBackup::restore_modifier_runtime_data(), sculpt_modifiers_active(), blender::ed::outliner::tree_element_get_icon(), uiTemplateModifiers(), and volume_evaluate_modifiers().

◆ BKE_modifier_get_original()

◆ BKE_modifier_init()

◆ BKE_modifier_is_correctable_deformed()

◆ BKE_modifier_is_enabled()

bool BKE_modifier_is_enabled ( const Scene * scene,
ModifierData * md,
int required_mode )

Check whether is enabled.

Parameters
sceneCurrent scene, may be NULL, in which case is_disabled callback of the modifier is never called.

Definition at line 513 of file blenkernel/intern/modifier.cc.

References BKE_modifier_get_info(), eModifierMode_DisableTemporary, eModifierMode_Editmode, eModifierMode_Render, eModifierTypeFlag_SupportsEditmode, ModifierTypeInfo::flags, ModifierTypeInfo::is_disabled, ModifierData::mode, and ModifierData::type.

Referenced by blender::ed::object::bake_simulation::bake_single_node_gather_bake_request(), BKE_crazyspace_build_sculpt(), BKE_curve_calc_modifiers_pre(), BKE_modifier_calc_data_masks(), BKE_modifiers_is_correctable_deformed(), BKE_multires_create_deformed_base_mesh_vert_coords(), BKE_object_is_deform_modified(), BKE_object_is_modified(), BKE_sculpt_get_first_deform_matrices(), blender::ed::sculpt_paint::dyntopo::check_attribute_warning(), blender::ed::object::bake_simulation::collect_simulations_to_bake(), blender::ed::object::correctivesmooth_bind_exec(), blender::ed::object::create_applied_mesh_for_modifier(), curve_calc_modifiers_post(), curve_get_tessellate_point(), curves_evaluate_modifiers(), do_curve_implicit_mesh_conversion(), blender::draw::drw_volume_object_mesh_init(), drw_volume_object_mesh_init(), blender::bke::editbmesh_modifier_is_enabled(), find_multires_modifier_before(), blender::io::usd::get_enabled_modifier(), get_multires_modifier(), blender::io::SubdivModifierDisabler::get_subdiv_modifier(), grease_pencil_evaluate_modifiers(), is_disabled(), lineart_mod_is_disabled(), blender::bke::mesh_calc_modifiers(), modifier_get_last_enabled_for_mode(), multires_flush_sculpt_updates(), blender::ed::object::multiresbake_check(), blender::workbench::Instance::object_sync(), OVERLAY_extra_cache_populate(), pointcloud_evaluate_modifiers(), sculpt_modifiers_active(), sculpt_multires_modifier_get(), and volume_evaluate_modifiers().

◆ BKE_modifier_is_non_geometrical()

bool BKE_modifier_is_non_geometrical ( ModifierData * md)

◆ BKE_modifier_is_nonlocal_in_liboverride()

bool BKE_modifier_is_nonlocal_in_liboverride ( const Object * ob,
const ModifierData * md )

Check whether given modifier is not local (i.e. from linked data) when the object is a library override.

Parameters
mdMay be NULL, in which case we consider it as a non-local modifier case.

Definition at line 537 of file blenkernel/intern/modifier.cc.

References eModifierFlag_OverrideLibrary_Local, ModifierData::flag, and ID_IS_OVERRIDE_LIBRARY.

Referenced by blender::ed::object::edit_modifier_poll_generic().

◆ BKE_modifier_is_same_topology()

◆ BKE_modifier_modify_mesh()

◆ BKE_modifier_new()

◆ BKE_modifier_panel_expand()

void BKE_modifier_panel_expand ( ModifierData * md)

◆ BKE_modifier_path_init()

void BKE_modifier_path_init ( char * path,
int path_maxncpy,
const char * name )

Initializes path with either the blend file or temporary directory.

Definition at line 862 of file blenkernel/intern/modifier.cc.

References BKE_main_blendfile_path_from_global(), BKE_tempdir_session, and BLI_path_join.

Referenced by BKE_fluid_modifier_create_type_data(), dynamicPaint_createNewSurface(), fluid_validatepaths(), and init_data().

◆ BKE_modifier_path_relbase()

const char * BKE_modifier_path_relbase ( Main * bmain,
Object * ob )

◆ BKE_modifier_path_relbase_from_global()

const char * BKE_modifier_path_relbase_from_global ( Object * ob)

Definition at line 857 of file blenkernel/intern/modifier.cc.

References BKE_modifier_path_relbase(), and G_MAIN.

Referenced by fluid_bake_startjob().

◆ BKE_modifier_remove_from_list()

◆ BKE_modifier_set_error()

void BKE_modifier_set_error ( const Object * ob,
ModifierData * md,
const char * _format,
... )

◆ BKE_modifier_set_warning()

void BKE_modifier_set_warning ( const Object * ob,
ModifierData * md,
const char * _format,
... )

◆ BKE_modifier_supports_cage()

◆ BKE_modifier_supports_mapping()

◆ BKE_modifier_type_panel_id()

void BKE_modifier_type_panel_id ( ModifierType type,
char * r_idname )

Get the idname of the modifier type's panel, which was defined in the panel_register callback.

Definition at line 123 of file blenkernel/intern/modifier.cc.

References BKE_modifier_get_info(), BLI_string_join, ModifierTypeInfo::idname, PanelType::idname, and MODIFIER_TYPE_PANEL_PREFIX.

Referenced by modifier_panel_id(), and modifier_panel_register().

◆ BKE_modifier_unique_name()

◆ BKE_modifiers_clear_errors()

◆ BKE_modifiers_findby_name()

◆ BKE_modifiers_findby_persistent_uid()

ModifierData * BKE_modifiers_findby_persistent_uid ( const Object * ob,
const int persistent_uid )

◆ BKE_modifiers_findby_type()

ModifierData * BKE_modifiers_findby_type ( const Object * ob,
ModifierType type )

Definition at line 245 of file blenkernel/intern/modifier.cc.

References LISTBASE_FOREACH, and Object::modifiers.

Referenced by add_collision_object(), add_verts_to_dgroups(), blender::ed::object::bake(), BKE_collider_cache_create(), BKE_object_copy_modifier(), BKE_object_modifier_update_subframe(), blo_do_versions_250(), blo_do_versions_pre250(), boid_find_ground(), buttons_context(), ccd_mesh_make(), ccd_mesh_update(), blender::ed::object::check_force_modifiers(), blender::ed::sculpt_paint::cloth::cloth_brush_collider_cache_create(), cloth_bvh_collision(), cloth_bvh_objcollisions_resolve(), DEG_add_collision_relations(), blender::draw::drw_volume_object_mesh_init(), drw_volume_object_mesh_init(), dynamicpaint_bake_exec(), dynamicPaint_doStep(), ED_object_particle_edit_mode_supported(), fluid_free_exec(), fluid_initjob(), fluid_pause_exec(), blender::bke::get_orco_coords(), blender::io::usd::import_mesh_skel_bindings(), blender::io::hydra::VolumeModifierData::init(), blender::io::hydra::VolumeModifierData::is_volume_modifier(), blender::ed::object::modifier_add(), blender::ed::object::modifier_copy_to_object(), object_foreach_id(), object_remove_particle_system(), blender::draw::overlay::Fluids::object_sync(), blender::workbench::Instance::object_sync(), output_toggle_exec(), OVERLAY_extra_cache_populate(), particles_fluid_step(), precalculate_effector(), blender::io::usd::USDStageReader::process_armature_modifiers(), blender::io::usd::USDPointInstancerReader::set_collection(), surface_getBrushFlags(), surface_slot_add_exec(), surface_slot_remove_exec(), and type_toggle_exec().

◆ BKE_modifiers_foreach_ID_link()

◆ BKE_modifiers_foreach_tex_link()

void BKE_modifiers_foreach_tex_link ( Object * ob,
TexWalkFunc walk,
void * user_data )

◆ BKE_modifiers_get_cage_index()

int BKE_modifiers_get_cage_index ( const Scene * scene,
Object * ob,
int * r_lastPossibleCageIndex,
bool is_virtual )

◆ BKE_modifiers_get_virtual_modifierlist()

ModifierData * BKE_modifiers_get_virtual_modifierlist ( const Object * ob,
VirtualModifierData * data )

This is to include things that are not modifiers in the evaluation of the modifier stack, for example parenting to an armature.

Definition at line 604 of file blenkernel/intern/modifier.cc.

References VirtualModifierData::amd, BKE_key_from_object(), VirtualModifierData::cmd, Object::data, CurveModifierData::defaxis, ArmatureModifierData::deformflag, ELEM, eModifierMode_Editmode, eModifierMode_OnCage, ListBase::first, VirtualModifierData::lmd, ModifierData::mode, ArmatureModifierData::modifier, CurveModifierData::modifier, LatticeModifierData::modifier, ShapeKeyModifierData::modifier, Object::modifiers, ModifierData::next, OB_ARMATURE, OB_CURVES_LEGACY, OB_LATTICE, OB_MESH, OB_SHAPE_EDIT_MODE, ArmatureModifierData::object, CurveModifierData::object, LatticeModifierData::object, Object::parent, PARSKEL, Object::partype, Object::shapeflag, VirtualModifierData::smd, Object::trackflag, Object::type, and virtualModifierCommonData.

Referenced by BKE_crazyspace_build_sculpt(), BKE_crazyspace_get_first_deform_matrices_editbmesh(), BKE_curve_calc_modifiers_pre(), BKE_lattice_modifiers_calc(), BKE_modifiers_get_cage_index(), BKE_modifiers_is_correctable_deformed(), BKE_modifiers_is_deformed_by_armature(), BKE_modifiers_is_deformed_by_curve(), BKE_modifiers_is_deformed_by_lattice(), BKE_modifiers_is_deformed_by_meshdeform(), BKE_modifiers_uses_armature(), BKE_modifiers_uses_multires(), BKE_multires_create_deformed_base_mesh_vert_coords(), BKE_object_defgroup_validmap_get(), BKE_object_is_deform_modified(), BKE_object_is_modified(), BKE_sculpt_get_first_deform_matrices(), blender::ed::sculpt_paint::dyntopo::check_attribute_warning(), blender::ed::object::create_applied_mesh_for_modifier(), curve_calc_modifiers_post(), curve_get_tessellate_point(), curves_evaluate_modifiers(), ED_armature_pose_select_in_wpaint_mode(), blender::bke::editbmesh_calc_modifiers(), blender::ed::greasepencil::get_bone_deformed_vertex_group_names(), grease_pencil_evaluate_modifiers(), blender::bke::mesh_calc_modifiers(), multires_flush_sculpt_updates(), pointcloud_evaluate_modifiers(), blender::ed::object::posemode_set_for_weight_paint(), sculpt_modifiers_active(), sculpt_multires_modifier_get(), view3d_opengl_select_ex(), and volume_evaluate_modifiers().

◆ BKE_modifiers_is_correctable_deformed()

◆ BKE_modifiers_is_deformed_by_armature()

◆ BKE_modifiers_is_deformed_by_curve()

Object * BKE_modifiers_is_deformed_by_curve ( Object * ob)

Takes an object and returns its first selected curve, else just its curve. This should work for multiple curves per object.

Definition at line 726 of file blenkernel/intern/modifier.cc.

References Object::base_flag, BASE_SELECTED, BKE_modifiers_get_virtual_modifierlist(), eModifierType_Curve, ModifierData::next, CurveModifierData::object, and ModifierData::type.

Referenced by blender::ed::object::parent_set().

◆ BKE_modifiers_is_deformed_by_lattice()

Object * BKE_modifiers_is_deformed_by_lattice ( Object * ob)

Takes an object and returns its first selected lattice, else just its lattice. This should work for multiple lattices per object.

Definition at line 703 of file blenkernel/intern/modifier.cc.

References Object::base_flag, BASE_SELECTED, BKE_modifiers_get_virtual_modifierlist(), eModifierType_Lattice, ModifierData::next, LatticeModifierData::object, and ModifierData::type.

Referenced by loopcut_init(), and blender::ed::object::parent_set().

◆ BKE_modifiers_is_deformed_by_meshdeform()

◆ BKE_modifiers_persistent_uid_init()

◆ BKE_modifiers_persistent_uids_are_valid()

bool BKE_modifiers_persistent_uids_are_valid ( const Object & object)

Returns true when all the modifier identifiers are positive and unique. This should generally be true and should only be used by asserts.

Definition at line 1004 of file blenkernel/intern/modifier.cc.

References blender::Set< Key, InlineBufferCapacity, ProbingStrategy, Hash, IsEqual, Slot, Allocator >::add(), LISTBASE_FOREACH, and blender::Set< Key, InlineBufferCapacity, ProbingStrategy, Hash, IsEqual, Slot, Allocator >::size().

Referenced by object_copy_data().

◆ BKE_modifiers_test_object()

void BKE_modifiers_test_object ( Object * ob)

◆ BKE_modifiers_uses_armature()

◆ BKE_modifiers_uses_multires()

◆ ensure_non_lazy_normals()

static void ensure_non_lazy_normals ( Mesh * mesh)
static

Call when ModifierTypeInfo.depends_on_normals callback requests normals. Necessary for BMesh normals when there is no separate #EditMeshData positions array, since they cannot be calculated lazily.

Definition at line 873 of file blenkernel/intern/modifier.cc.

References BKE_editmesh_cache_ensure_vert_normals(), BM_mesh_normals_update(), blender::Array< T, InlineBufferCapacity, Allocator >::is_empty(), ME_WRAPPER_TYPE_BMESH, ME_WRAPPER_TYPE_MDATA, ME_WRAPPER_TYPE_SUBD, and blender::bke::EditMeshData::vert_positions.

Referenced by BKE_modifier_deform_vertsEM().

◆ modifier_allocate_and_init()

◆ modifier_copy_data_id_us_cb()

static void modifier_copy_data_id_us_cb ( void * ,
Object * ,
ID ** idpoin,
int cb_flag )
static

Definition at line 335 of file blenkernel/intern/modifier.cc.

References id_us_plus(), and IDWALK_CB_USER.

Referenced by BKE_modifier_copydata_ex().

◆ modifier_ensure_type()

static void modifier_ensure_type ( FluidModifierData * fluid_modifier_data,
int type )
static

◆ modifier_free_data_id_us_cb()

static void modifier_free_data_id_us_cb ( void * ,
Object * ,
ID ** idpoin,
int cb_flag )
static

Definition at line 167 of file blenkernel/intern/modifier.cc.

References id_us_min(), and IDWALK_CB_USER.

Referenced by BKE_modifier_free_ex().

◆ modifier_replace_with_fluid()

Variable Documentation

◆ LOG

CLG_LogRef LOG = {"bke.modifier"}
static

Definition at line 79 of file blenkernel/intern/modifier.cc.

Referenced by BKE_modifier_set_error().

◆ modifier_types

ModifierTypeInfo* modifier_types[NUM_MODIFIER_TYPES] = {nullptr}
static

Definition at line 80 of file blenkernel/intern/modifier.cc.

Referenced by BKE_modifier_get_info(), and BKE_modifier_init().

◆ virtualModifierCommonData

VirtualModifierData virtualModifierCommonData
static