29#include "RNA_prototypes.hh"
69 walk(user_data, ob, md, &
ptr, prop);
75 bool need_transform_relation =
false;
79 need_transform_relation =
true;
88 need_transform_relation =
true;
91 need_transform_relation =
true;
95 if (need_transform_relation) {
119 float (*vertexCos)[3],
127 float lifefac = wmd->
height;
128 float(*tex_co)[3] =
nullptr;
130 const float falloff = wmd->
falloff;
131 float falloff_fac = 1.0f;
136 vert_normals = mesh->vert_normals();
152 if (wmd->
damp == 0.0f) {
162 if (lifefac > wmd->
damp) {
172 if (mesh !=
nullptr && tex_target !=
nullptr) {
173 tex_co =
static_cast<float(*)[3]
>(
MEM_malloc_arrayN(verts_num,
sizeof(*tex_co), __func__));
179 if (lifefac != 0.0f) {
181 float falloff_inv = falloff != 0.0f ? 1.0f / falloff : 1.0f;
184 for (i = 0; i < verts_num; i++) {
185 float *co = vertexCos[i];
186 float x = co[0] - wmd->
startx;
187 float y = co[1] - wmd->
starty;
189 float def_weight = 1.0f;
197 if (def_weight == 0.0f) {
204 amplit =
sqrtf(x * x + y * y);
221 if (falloff != 0.0f) {
226 dist =
sqrtf(x * x + y * y);
236 falloff_fac = (1.0f - (dist * falloff_inv));
237 CLAMP(falloff_fac, 0.0f, 1.0f);
241 if ((falloff_fac != 0.0f) && (amplit > -wmd->
width) && (amplit < wmd->width)) {
242 amplit = amplit * wmd->
narrow;
243 amplit =
float(1.0f /
expf(amplit * amplit) - minfac);
249 amplit *= texres.
tin;
253 amplit *= def_weight * falloff_fac;
258 co[0] += (lifefac * amplit) * vert_normals[i][0];
261 co[1] += (lifefac * amplit) * vert_normals[i][1];
264 co[2] += (lifefac * amplit) * vert_normals[i][2];
269 co[2] += lifefac * amplit;
288 reinterpret_cast<float(*)[3]
>(positions.data()),
371 uiTemplateID(layout, C,
ptr,
"texture",
"texture.new",
nullptr,
nullptr);
386 "texture_coords_bone",
387 &texture_coords_obj_data_ptr,
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
@ eModifierTypeFlag_AcceptsCVs
@ eModifierTypeFlag_SupportsEditmode
@ eModifierTypeFlag_AcceptsVertexCosOnly
void(*)(void *user_data, Object *ob, ID **idpoin, int cb_flag) IDWalkFunc
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)
struct WaveModifierData WaveModifierData
Object is a sort of wrapper for general info.
Read Guarded memory(de)allocation.
PanelType * modifier_subpanel_register(ARegionType *region_type, const char *name, const char *label, PanelDrawFn draw_header, PanelDrawFn draw, PanelType *parent)
void modifier_panel_end(uiLayout *layout, PointerRNA *ptr)
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_vgroup_ui(uiLayout *layout, PointerRNA *ptr, PointerRNA *ob_ptr, const char *vgroup_prop, const char *invert_vgroup_prop, const char *text)
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 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 panel_draw(const bContext *, Panel *panel)
static void foreach_tex_link(ModifierData *md, Object *ob, TexWalkFunc walk, void *user_data)
static void waveModifier_do(WaveModifierData *md, const ModifierEvalContext *ctx, Object *ob, Mesh *mesh, float(*vertexCos)[3], int verts_num)
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 uiLayoutSetActive(uiLayout *layout, bool active)
uiLayout * uiLayoutRow(uiLayout *layout, bool align)
void uiLayoutSetPropSep(uiLayout *layout, bool is_sep)
uiLayout * uiLayoutRowWithHeading(uiLayout *layout, bool align, const char *heading)
void uiItemPointerR(uiLayout *layout, PointerRNA *ptr, const char *propname, PointerRNA *searchptr, const char *searchpropname, const char *name, int icon)
void uiTemplateID(uiLayout *layout, const bContext *C, PointerRNA *ptr, const char *propname, const char *newop, const char *openop, const char *unlinkop, int filter=UI_TEMPLATE_ID_FILTER_ALL, bool live_icon=false, const char *text=nullptr)
uiLayout * uiLayoutColumn(uiLayout *layout, bool align)
void uiItemR(uiLayout *layout, PointerRNA *ptr, const char *propname, eUI_Item_Flag flag, const char *name, int icon)
@ UI_ITEM_R_FORCE_BLANK_DECORATE
constexpr bool is_empty() const
draw_view in_light_buf[] float
void *(* MEM_malloc_arrayN)(size_t len, size_t size, const char *str)
ccl_device_inline float3 exp(float3 v)
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(ID *id, StructRNA *type, void *data)
int RNA_enum_get(PointerRNA *ptr, const char *name)
ObjectRuntimeHandle * runtime
struct Object * objectcenter
struct Object * map_object