diff options
author | Joseph Eagar <joeedh@gmail.com> | 2020-10-25 02:01:08 +0300 |
---|---|---|
committer | Joseph Eagar <joeedh@gmail.com> | 2020-10-25 02:01:08 +0300 |
commit | 3ae8229843d5e192238bb1073f73df7d9a337c42 (patch) | |
tree | 23d347e81d90c76e933b53044d4600c165f9c782 /source/blender/modifiers/intern/MOD_uvwarp.c | |
parent | f61d4b2e3aaed64c0fa2bdd7740e2173d785f8e5 (diff) |
commit before merge
Diffstat (limited to 'source/blender/modifiers/intern/MOD_uvwarp.c')
-rw-r--r-- | source/blender/modifiers/intern/MOD_uvwarp.c | 16 |
1 files changed, 16 insertions, 0 deletions
diff --git a/source/blender/modifiers/intern/MOD_uvwarp.c b/source/blender/modifiers/intern/MOD_uvwarp.c index b326494815e..10b011360b6 100644 --- a/source/blender/modifiers/intern/MOD_uvwarp.c +++ b/source/blender/modifiers/intern/MOD_uvwarp.c @@ -100,6 +100,7 @@ typedef struct UVWarpData { MDeformVert *dvert; int defgrp_index; + bool restrict_island; float (*warp_mat)[4]; bool invert_vgroup; @@ -123,6 +124,19 @@ static void uv_warp_compute(void *__restrict userdata, int l; if (dvert) { + if (data->restrict_island) { + for (l = 0; l < mp->totloop; l++, ml++) { + const float weight = data->invert_vgroup ? + 1.0f - BKE_defvert_find_weight(&dvert[ml->v], defgrp_index) : + BKE_defvert_find_weight(&dvert[ml->v], defgrp_index); + if (weight == 0.0f) { + return; + } + } + + ml = &data->mloop[mp->loopstart]; + } + for (l = 0; l < mp->totloop; l++, ml++, mluv++) { float uv[2]; const float weight = data->invert_vgroup ? @@ -221,6 +235,7 @@ static Mesh *modifyMesh(ModifierData *md, const ModifierEvalContext *ctx, Mesh * UVWarpData data = { .mpoly = mpoly, + .restrict_island = umd->flag & MOD_UVWARP_RESTRICT_ISLANDS, .mloop = mloop, .mloopuv = mloopuv, .dvert = dvert, @@ -299,6 +314,7 @@ static void panel_draw(const bContext *UNUSED(C), Panel *panel) } modifier_vgroup_ui(layout, ptr, &ob_ptr, "vertex_group", "invert_vertex_group", NULL); + uiItemR(layout, ptr, "restrict_to_islands", 0, NULL, ICON_NONE); modifier_panel_end(layout, ptr); } |