31#include "RNA_prototypes.hh"
71 walk(user_data, ob, md, &
ptr, prop);
77 bool need_transform_relation =
false;
81 need_transform_relation =
true;
90 need_transform_relation =
true;
93 need_transform_relation =
true;
97 if (need_transform_relation) {
121 float (*vertexCos)[3],
128 float lifefac = wmd->
height;
129 float (*tex_co)[3] =
nullptr;
131 const float falloff = wmd->
falloff;
132 float falloff_fac = 1.0f;
137 vert_normals = mesh->vert_normals();
153 if (wmd->
damp == 0.0f) {
163 if (lifefac > wmd->
damp) {
173 if (mesh !=
nullptr && tex_target !=
nullptr) {
180 if (lifefac != 0.0f) {
182 float falloff_inv = falloff != 0.0f ? 1.0f / falloff : 1.0f;
185 for (
i = 0;
i < verts_num;
i++) {
186 float *co = vertexCos[
i];
190 float def_weight = 1.0f;
198 if (def_weight == 0.0f) {
222 if (falloff != 0.0f) {
237 falloff_fac = (1.0f - (dist * falloff_inv));
238 CLAMP(falloff_fac, 0.0f, 1.0f);
242 if ((falloff_fac != 0.0f) && (amplit > -wmd->
width) && (amplit < wmd->width)) {
243 amplit = amplit * wmd->
narrow;
244 amplit = (1.0f /
expf(amplit * amplit) - minfac);
250 amplit *= texres.
tin;
254 amplit *= def_weight * falloff_fac;
259 co[0] += (lifefac * amplit) * vert_normals[
i][0];
262 co[1] += (lifefac * amplit) * vert_normals[
i][1];
265 co[2] += (lifefac * amplit) * vert_normals[
i][2];
270 co[2] += lifefac * amplit;
289 reinterpret_cast<float (*)[3]
>(positions.
data()),
303 row = &layout->
row(
true,
IFACE_(
"Motion"));
311 row = &layout->
row(
true,
IFACE_(
"Along Normals"));
313 sub = &row->
row(
true);
386 "texture_coords_bone",
387 &texture_coords_obj_data_ptr,
395 col->prop_search(
ptr,
"uv_layer", &obj_data_ptr,
"uv_layers", std::nullopt, ICON_GROUP_UVS);
void(*)(void *user_data, Object *ob, ID **idpoin, LibraryForeachIDCallbackFlag cb_flag) IDWalkFunc
void BKE_modifier_copydata_generic(const ModifierData *md, ModifierData *md_dst, int flag)
@ eModifierTypeFlag_AcceptsCVs
@ eModifierTypeFlag_SupportsEditmode
@ eModifierTypeFlag_AcceptsVertexCosOnly
void(*)(void *user_data, Object *ob, ModifierData *md, const PointerRNA *ptr, PropertyRNA *texture_prop) TexWalkFunc
void BKE_texture_get_value(struct Tex *texture, const float *tex_co, struct TexResult *texres, bool use_color_management)
void mul_m4_m4m4(float R[4][4], const float A[4][4], const float B[4][4])
bool invert_m4_m4(float inverse[4][4], const float mat[4][4])
#define MEMCMP_STRUCT_AFTER_IS_ZERO(struct_var, member)
#define MEMCPY_STRUCT_AFTER(struct_dst, struct_src, member)
void DEG_add_generic_id_relation(DepsNodeHandle *node_handle, ID *id, const char *description)
void DEG_add_depends_on_transform_relation(DepsNodeHandle *node_handle, const char *description)
void DEG_add_object_relation(DepsNodeHandle *node_handle, Object *object, eDepsObjectComponentType component, const char *description)
float DEG_get_ctime(const Depsgraph *graph)
#define CD_MASK_MDEFORMVERT
#define DNA_struct_default_get(struct_name)
Object is a sort of wrapper for general info.
Read Guarded memory(de)allocation.
static void init_data(ModifierData *md)
static void deform_verts(ModifierData *md, const ModifierEvalContext *ctx, Mesh *mesh, blender::MutableSpan< blender::float3 > positions)
static void panel_register(ARegionType *region_type)
static void required_data_mask(ModifierData *, CustomData_MeshMasks *r_cddata_masks)
static void panel_draw(const bContext *, Panel *panel)
static void foreach_ID_link(ModifierData *md, Object *ob, IDWalkFunc walk, void *user_data)
static bool depends_on_time(Scene *, ModifierData *)
static void foreach_tex_link(ModifierData *md, Object *ob, TexWalkFunc walk, void *user_data)
static void time_panel_draw(const bContext *, Panel *panel)
void modifier_vgroup_ui(uiLayout *layout, PointerRNA *ptr, PointerRNA *ob_ptr, const StringRefNull vgroup_prop, const std::optional< StringRefNull > invert_vgroup_prop, const std::optional< StringRefNull > text)
PanelType * modifier_subpanel_register(ARegionType *region_type, const char *name, const char *label, PanelDrawFn draw_header, PanelDrawFn draw, PanelType *parent)
PanelType * modifier_panel_register(ARegionType *region_type, ModifierType type, PanelDrawFn draw)
PointerRNA * modifier_panel_get_property_pointers(Panel *panel, PointerRNA *r_ob_ptr)
void modifier_error_message_draw(uiLayout *layout, PointerRNA *ptr)
void MOD_init_texture(MappingInfoModifierData *dmd, const ModifierEvalContext *ctx)
void MOD_depsgraph_update_object_bone_relation(DepsNodeHandle *node, Object *object, const char *bonename, const char *description)
void MOD_get_vgroup(const Object *ob, const Mesh *mesh, const char *name, const MDeformVert **dvert, int *defgrp_index)
void MOD_get_texture_coords(MappingInfoModifierData *dmd, const ModifierEvalContext *, Object *ob, Mesh *mesh, float(*cos)[3], float(*r_texco)[3])
static void texture_panel_draw(const bContext *C, Panel *panel)
static void init_data(ModifierData *md)
static void deform_verts(ModifierData *md, const ModifierEvalContext *ctx, Mesh *mesh, blender::MutableSpan< blender::float3 > positions)
static void panel_register(ARegionType *region_type)
static void position_panel_draw(const bContext *, Panel *panel)
static void texture_panel_draw(const bContext *C, Panel *panel)
static void time_panel_draw(const bContext *, Panel *panel)
ModifierTypeInfo modifierType_Wave
static void waveModifier_do(WaveModifierData *wmd, const ModifierEvalContext *ctx, Object *ob, Mesh *mesh, float(*vertexCos)[3], int verts_num)
static void panel_draw(const bContext *, Panel *panel)
static void foreach_tex_link(ModifierData *md, Object *ob, TexWalkFunc walk, void *user_data)
static bool depends_on_time(Scene *, ModifierData *)
static void required_data_mask(ModifierData *md, CustomData_MeshMasks *r_cddata_masks)
static void foreach_ID_link(ModifierData *md, Object *ob, IDWalkFunc walk, void *user_data)
static void update_depsgraph(ModifierData *md, const ModifierUpdateDepsgraphContext *ctx)
void uiTemplateID(uiLayout *layout, const bContext *C, PointerRNA *ptr, blender::StringRefNull propname, const char *newop, const char *openop, const char *unlinkop, int filter=UI_TEMPLATE_ID_FILTER_ALL, bool live_icon=false, std::optional< blender::StringRef > text=std::nullopt)
@ UI_ITEM_R_FORCE_BLANK_DECORATE
constexpr int64_t size() const
constexpr T * data() const
constexpr bool is_empty() const
static void update_depsgraph(tGraphSliderOp *gso)
void * MEM_malloc_arrayN(size_t len, size_t size, const char *str)
PointerRNA RNA_pointer_get(PointerRNA *ptr, const char *name)
PropertyRNA * RNA_struct_find_property(PointerRNA *ptr, const char *identifier)
bool RNA_pointer_is_null(const PointerRNA *ptr)
bool RNA_boolean_get(PointerRNA *ptr, const char *name)
PointerRNA RNA_pointer_create_discrete(ID *id, StructRNA *type, void *data)
int RNA_enum_get(PointerRNA *ptr, const char *name)
ObjectRuntimeHandle * runtime
struct Object * objectcenter
struct Object * map_object
uiLayout & column(bool align)
void active_set(bool active)
uiLayout & row(bool align)
void use_property_split_set(bool value)
void prop(PointerRNA *ptr, PropertyRNA *prop, int index, int value, eUI_Item_Flag flag, std::optional< blender::StringRef > name_opt, int icon, std::optional< blender::StringRef > placeholder=std::nullopt)