Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPhilipp Oeser <info@graphics-engineer.com>2020-05-07 13:34:13 +0300
committerPhilipp Oeser <info@graphics-engineer.com>2020-05-07 13:48:58 +0300
commit2a2aa6abd0ae45133b083368be4bee77a1a420c4 (patch)
tree006cd68130ccfc4e54322c548c28fe705964c70e /source/blender/bmesh
parent3fed85f9d2cfcd120c58599e55b4518e62281ee1 (diff)
Fix T75793: Mirror modifier UV flip only works on first UDIM Tile
Was flipping around the 0-1 range, now (optionally) flip around each tile. Also added this option for BMesh bmo_mirror. Reviewed By: campbellbarton Maniphest Tasks: T75793 Differential Revision: https://developer.blender.org/D7460
Diffstat (limited to 'source/blender/bmesh')
-rw-r--r--source/blender/bmesh/intern/bmesh_opdefines.c1
-rw-r--r--source/blender/bmesh/operators/bmo_mirror.c17
2 files changed, 16 insertions, 2 deletions
diff --git a/source/blender/bmesh/intern/bmesh_opdefines.c b/source/blender/bmesh/intern/bmesh_opdefines.c
index 4fa7bf64834..14e3c57f038 100644
--- a/source/blender/bmesh/intern/bmesh_opdefines.c
+++ b/source/blender/bmesh/intern/bmesh_opdefines.c
@@ -320,6 +320,7 @@ static BMOpDefine bmo_mirror_def = {
{"axis", BMO_OP_SLOT_INT, {(int)BMO_OP_SLOT_SUBTYPE_INT_ENUM}, bmo_enum_axis_xyz}, /* the axis to use. */
{"mirror_u", BMO_OP_SLOT_BOOL}, /* mirror UVs across the u axis */
{"mirror_v", BMO_OP_SLOT_BOOL}, /* mirror UVs across the v axis */
+ {"mirror_udim", BMO_OP_SLOT_BOOL}, /* mirror UVs in each tile */
{{'\0'}},
},
/* slots_out */
diff --git a/source/blender/bmesh/operators/bmo_mirror.c b/source/blender/bmesh/operators/bmo_mirror.c
index 36297b3f816..b5b56f4432d 100644
--- a/source/blender/bmesh/operators/bmo_mirror.c
+++ b/source/blender/bmesh/operators/bmo_mirror.c
@@ -48,6 +48,7 @@ void bmo_mirror_exec(BMesh *bm, BMOperator *op)
int axis = BMO_slot_int_get(op->slots_in, "axis");
bool mirror_u = BMO_slot_bool_get(op->slots_in, "mirror_u");
bool mirror_v = BMO_slot_bool_get(op->slots_in, "mirror_v");
+ bool mirror_udim = BMO_slot_bool_get(op->slots_in, "mirror_udim");
BMOpSlot *slot_targetmap;
ototvert = bm->totvert;
@@ -94,10 +95,22 @@ void bmo_mirror_exec(BMesh *bm, BMOperator *op)
for (i = 0; i < totlayer; i++) {
luv = CustomData_bmesh_get_n(&bm->ldata, l->head.data, CD_MLOOPUV, i);
if (mirror_u) {
- luv->uv[0] = 1.0f - luv->uv[0];
+ float uv_u = luv->uv[0];
+ if (mirror_udim) {
+ luv->uv[0] = ceilf(uv_u) - fmodf(uv_u, 1.0f);
+ }
+ else {
+ luv->uv[0] = 1.0f - uv_u;
+ }
}
if (mirror_v) {
- luv->uv[1] = 1.0f - luv->uv[1];
+ float uv_v = luv->uv[1];
+ if (mirror_udim) {
+ luv->uv[1] = ceilf(uv_v) - fmodf(uv_v, 1.0f);
+ }
+ else {
+ luv->uv[1] = 1.0f - uv_v;
+ }
}
}
}