35#include "RNA_prototypes.hh"
96 walk(user_data, ob, md, &
ptr, prop);
108 bool need_transform_relation =
false;
113 need_transform_relation =
true;
122 need_transform_relation =
true;
125 need_transform_relation =
true;
129 if (need_transform_relation) {
158 float weight =
data->weight;
159 int defgrp_index =
data->defgrp_index;
160 int direction =
data->direction;
161 bool use_global_direction =
data->use_global_direction;
162 float(*tex_co)[3] =
data->tex_co;
166 const float delta_fixed = 1.0f - dmd->
midlevel;
176 if (weight == 0.0f) {
181 if (
data->tex_target) {
194 CLAMP(delta, -10000, 10000);
198 if (use_global_direction) {
199 positions[iter][0] += delta *
data->local_mat[0][0];
200 positions[iter][1] += delta *
data->local_mat[1][0];
201 positions[iter][2] += delta *
data->local_mat[2][0];
204 positions[iter][0] += delta;
208 if (use_global_direction) {
209 positions[iter][0] += delta *
data->local_mat[0][1];
210 positions[iter][1] += delta *
data->local_mat[1][1];
211 positions[iter][2] += delta *
data->local_mat[2][1];
214 positions[iter][1] += delta;
218 if (use_global_direction) {
219 positions[iter][0] += delta *
data->local_mat[0][2];
220 positions[iter][1] += delta *
data->local_mat[1][2];
221 positions[iter][2] += delta *
data->local_mat[2][2];
224 positions[iter][2] += delta;
231 if (use_global_direction) {
266 if (defgrp_index >= 0 && dvert ==
nullptr) {
272 if (tex_target !=
nullptr) {
278 reinterpret_cast<float(*)[3]
>(positions.
data()),
291 data.weight = weight;
292 data.defgrp_index = defgrp_index;
293 data.direction = direction;
294 data.use_global_direction = use_global_direction;
295 data.tex_target = tex_target;
296 data.tex_co = tex_co;
297 data.positions = positions;
299 data.vert_normals = mesh->vert_normals_true();
302 data.vert_normals = mesh->vert_normals();
305 use_global_direction)
309 if (tex_target !=
nullptr) {
318 if (
data.pool !=
nullptr) {
365 "texture_coords_bone",
366 &texture_coords_obj_data_ptr,
408 "DisplaceModifierData",
410 &RNA_DisplaceModifier,
void BKE_image_pool_free(ImagePool *pool)
ImagePool * BKE_image_pool_new()
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)
void(*)(void *user_data, Object *ob, ModifierData *md, const PointerRNA *ptr, PropertyRNA *texture_prop) TexWalkFunc
@ eModifierTypeFlag_SupportsEditmode
@ eModifierTypeFlag_AcceptsMesh
bool BKE_texture_dependsOnTime(const struct Tex *texture)
void BKE_texture_fetch_images_for_pool(struct Tex *texture, struct ImagePool *pool)
void BKE_texture_get_value_ex(struct Tex *texture, const float *tex_co, struct TexResult *texres, struct ImagePool *pool, bool use_color_management)
void copy_m4_m4(float m1[4][4], const float m2[4][4])
void mul_transposed_mat3_m4_v3(const float M[4][4], float r[3])
MINLINE void madd_v3_v3fl(float r[3], const float a[3], float f)
MINLINE void mul_v3_fl(float r[3], float f)
MINLINE void add_v3_v3(float r[3], const float a[3])
void BLI_task_parallel_range(int start, int stop, void *userdata, TaskParallelRangeFunc func, const TaskParallelSettings *settings)
BLI_INLINE void BLI_parallel_range_settings_defaults(TaskParallelSettings *settings)
#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)
Scene * DEG_get_evaluated_scene(const Depsgraph *graph)
#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 init_data(ModifierData *md)
static void displaceModifier_do(DisplaceModifierData *dmd, const ModifierEvalContext *ctx, Mesh *mesh, blender::MutableSpan< blender::float3 > positions)
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 displaceModifier_do_task(void *__restrict userdata, const int iter, const TaskParallelTLS *__restrict)
static bool depends_on_time(Scene *, ModifierData *md)
static void foreach_tex_link(ModifierData *md, Object *ob, TexWalkFunc walk, void *user_data)
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)
ModifierTypeInfo modifierType_Displace
static void panel_draw(const bContext *C, 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_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])
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)
void uiLayoutSetActive(uiLayout *layout, bool active)
void uiItemPointerR(uiLayout *layout, PointerRNA *ptr, blender::StringRefNull propname, PointerRNA *searchptr, blender::StringRefNull searchpropname, std::optional< blender::StringRefNull > name, int icon)
void uiLayoutSetPropSep(uiLayout *layout, bool is_sep)
BMesh const char void * data
constexpr int64_t size() const
constexpr T * data() const
#define CD_MASK_MDEFORMVERT
static void update_depsgraph(tGraphSliderOp *gso)
void * MEM_calloc_arrayN(size_t len, size_t size, const char *str)
void MEM_freeN(void *vmemh)
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)
PointerRNA RNA_pointer_create_discrete(ID *id, StructRNA *type, void *data)
int RNA_enum_get(PointerRNA *ptr, const char *name)
struct Object * map_object
const MDeformVert * dvert
bool use_global_direction
blender::MutableSpan< blender::float3 > positions
DisplaceModifierData * dmd
blender::Span< blender::float3 > vert_normals
uiLayout & column(bool align)
void separator(float factor=1.0f, LayoutSeparatorType type=LayoutSeparatorType::Auto)