35 #include "RNA_prototypes.h"
52 bool UNUSED(useRenderParams))
59 if (smd->
fac == 0.0f || flag == 0) {
86 (
size_t)verts_num,
sizeof(*accumulated_vecs), __func__);
87 if (!accumulated_vecs) {
92 (
size_t)verts_num,
sizeof(*accumulated_vecs_count), __func__);
93 if (!accumulated_vecs_count) {
98 const float fac_new = smd->
fac;
99 const float fac_orig = 1.0f - fac_new;
109 for (
int j = 0; j < smd->
repeat; j++) {
111 memset(accumulated_vecs, 0,
sizeof(*accumulated_vecs) * (
size_t)verts_num);
112 memset(accumulated_vecs_count, 0,
sizeof(*accumulated_vecs_count) * (
size_t)verts_num);
115 for (
int i = 0; i < edges_num; i++) {
117 const uint idx1 = medges[i].
v1;
118 const uint idx2 = medges[i].
v2;
120 mid_v3_v3v3(fvec, vertexCos[idx1], vertexCos[idx2]);
122 accumulated_vecs_count[idx1]++;
125 accumulated_vecs_count[idx2]++;
129 const short flag = smd->
flag;
132 for (
int i = 0; i < verts_num; i++, dv++) {
133 float *vco_orig = vertexCos[i];
134 if (accumulated_vecs_count[i] > 0) {
135 mul_v3_fl(accumulated_vecs[i], 1.0f / (
float)accumulated_vecs_count[i]);
137 float *vco_new = accumulated_vecs[i];
141 if (f_vgroup <= 0.0f) {
144 const float f_new = f_vgroup * fac_new;
145 const float f_orig = 1.0f - f_new;
148 vco_orig[0] = f_orig * vco_orig[0] + f_new * vco_new[0];
151 vco_orig[1] = f_orig * vco_orig[1] + f_new * vco_new[1];
154 vco_orig[2] = f_orig * vco_orig[2] + f_new * vco_new[2];
159 for (
int i = 0; i < verts_num; i++) {
160 float *vco_orig = vertexCos[i];
161 if (accumulated_vecs_count[i] > 0) {
162 mul_v3_fl(accumulated_vecs[i], 1.0f / (
float)accumulated_vecs_count[i]);
164 float *vco_new = accumulated_vecs[i];
167 vco_orig[0] = fac_orig * vco_orig[0] + fac_new * vco_new[0];
170 vco_orig[1] = fac_orig * vco_orig[1] + fac_new * vco_new[1];
173 vco_orig[2] = fac_orig * vco_orig[2] + fac_new * vco_new[2];
186 float (*vertexCos)[3],
206 float (*vertexCos)[3],
257 "SmoothModifierData",
typedef float(TangentPoint)[2]
void BKE_id_free(struct Main *bmain, void *idv)
void BKE_mesh_wrapper_ensure_mdata(struct Mesh *me)
@ eModifierTypeFlag_AcceptsCVs
@ eModifierTypeFlag_SupportsEditmode
@ eModifierTypeFlag_AcceptsMesh
void BKE_modifier_copydata_generic(const struct ModifierData *md, struct ModifierData *md_dst, int flag)
@ eModifierTypeType_OnlyDeform
MINLINE void mul_v3_fl(float r[3], float f)
void mid_v3_v3v3(float r[3], const float a[3], const float b[3])
MINLINE void add_v3_v3(float r[3], const float a[3])
#define MEMCMP_STRUCT_AFTER_IS_ZERO(struct_var, member)
#define MEMCPY_STRUCT_AFTER(struct_dst, struct_src, member)
#define CD_MASK_MDEFORMVERT
#define DNA_struct_default_get(struct_name)
@ MOD_SMOOTH_INVERT_VGROUP
struct SmoothModifierData SmoothModifierData
Object is a sort of wrapper for general info.
Read Guarded memory(de)allocation.
static void deformVerts(ModifierData *md, const ModifierEvalContext *ctx, Mesh *mesh, float(*vertexCos)[3], int verts_num)
static void deformVertsEM(ModifierData *md, const ModifierEvalContext *ctx, struct BMEditMesh *editData, Mesh *mesh, float(*vertexCos)[3], int verts_num)
ModifierTypeInfo modifierType_Smooth
static bool isDisabled(const struct Scene *UNUSED(scene), ModifierData *md, bool UNUSED(useRenderParams))
static void smoothModifier_do(SmoothModifierData *smd, Object *ob, Mesh *mesh, float(*vertexCos)[3], int verts_num)
static void panel_draw(const bContext *UNUSED(C), Panel *panel)
static void initData(ModifierData *md)
static void panelRegister(ARegionType *region_type)
static void requiredDataMask(Object *UNUSED(ob), ModifierData *md, CustomData_MeshMasks *r_cddata_masks)
PointerRNA * modifier_panel_get_property_pointers(Panel *panel, PointerRNA *r_ob_ptr)
void modifier_panel_end(uiLayout *layout, PointerRNA *ptr)
PanelType * modifier_panel_register(ARegionType *region_type, ModifierType type, PanelDrawFn draw)
void modifier_vgroup_ui(uiLayout *layout, PointerRNA *ptr, PointerRNA *ob_ptr, const char *vgroup_prop, const char *invert_vgroup_prop, const char *text)
Mesh * MOD_deform_mesh_eval_get(Object *ob, struct BMEditMesh *em, Mesh *mesh, const float(*vertexCos)[3], const int verts_num, const bool use_normals, const bool use_orco)
void MOD_get_vgroup(Object *ob, struct Mesh *mesh, const char *name, MDeformVert **dvert, int *defgrp_index)
uiLayout * uiLayoutRowWithHeading(uiLayout *layout, bool align, const char *heading)
uiLayout * uiLayoutColumn(uiLayout *layout, bool align)
void uiLayoutSetPropSep(uiLayout *layout, bool is_sep)
@ UI_ITEM_R_FORCE_BLANK_DECORATE
void uiItemR(uiLayout *layout, struct PointerRNA *ptr, const char *propname, int flag, const char *name, int icon)
void(* MEM_freeN)(void *vmemh)
void *(* MEM_calloc_arrayN)(size_t len, size_t size, const char *str)