[Bf-blender-cvs] [6694d7ac5f6] blender-v2.91-release: BMesh: add UV face transform and minmax utility functions

Campbell Barton noreply at git.blender.org
Tue Nov 17 14:27:03 CET 2020


Commit: 6694d7ac5f651ea03ea61a465330652cc26ecb38
Author: Campbell Barton
Date:   Tue Nov 17 23:49:18 2020 +1100
Branches: blender-v2.91-release
https://developer.blender.org/rB6694d7ac5f651ea03ea61a465330652cc26ecb38

BMesh: add UV face transform and minmax utility functions

===================================================================

M	source/blender/bmesh/intern/bmesh_query_uv.c
M	source/blender/bmesh/intern/bmesh_query_uv.h

===================================================================

diff --git a/source/blender/bmesh/intern/bmesh_query_uv.c b/source/blender/bmesh/intern/bmesh_query_uv.c
index 1aa75bfb037..d3067109d4e 100644
--- a/source/blender/bmesh/intern/bmesh_query_uv.c
+++ b/source/blender/bmesh/intern/bmesh_query_uv.c
@@ -126,6 +126,28 @@ float BM_face_uv_calc_cross(const BMFace *f, const int cd_loop_uv_offset)
   return cross_poly_v2(uvs, f->len);
 }
 
+void BM_face_uv_minmax(const BMFace *f, float min[2], float max[2], const int cd_loop_uv_offset)
+{
+  const BMLoop *l_iter;
+  const BMLoop *l_first;
+  l_iter = l_first = BM_FACE_FIRST_LOOP(f);
+  do {
+    const MLoopUV *luv = BM_ELEM_CD_GET_VOID_P(l_iter, cd_loop_uv_offset);
+    minmax_v2v2_v2(min, max, luv->uv);
+  } while ((l_iter = l_iter->next) != l_first);
+}
+
+void BM_face_uv_transform(BMFace *f, const float matrix[2][2], const int cd_loop_uv_offset)
+{
+  BMLoop *l_iter;
+  BMLoop *l_first;
+  l_iter = l_first = BM_FACE_FIRST_LOOP(f);
+  do {
+    MLoopUV *luv = BM_ELEM_CD_GET_VOID_P(l_iter, cd_loop_uv_offset);
+    mul_m2_v2(matrix, luv->uv);
+  } while ((l_iter = l_iter->next) != l_first);
+}
+
 /**
  * Check if two loops that share an edge also have the same UV coordinates.
  */
diff --git a/source/blender/bmesh/intern/bmesh_query_uv.h b/source/blender/bmesh/intern/bmesh_query_uv.h
index 0a86c0cbeae..9aad8e17ca0 100644
--- a/source/blender/bmesh/intern/bmesh_query_uv.h
+++ b/source/blender/bmesh/intern/bmesh_query_uv.h
@@ -37,6 +37,9 @@ void BM_face_uv_calc_center_median(const BMFace *f, const int cd_loop_uv_offset,
 float BM_face_uv_calc_cross(const BMFace *f, const int cd_loop_uv_offset) ATTR_WARN_UNUSED_RESULT
     ATTR_NONNULL();
 
+void BM_face_uv_minmax(const BMFace *f, float min[2], float max[2], const int cd_loop_uv_offset);
+void BM_face_uv_transform(BMFace *f, const float matix[2][2], const int cd_loop_uv_offset);
+
 bool BM_loop_uv_share_edge_check_with_limit(BMLoop *l_a,
                                             BMLoop *l_b,
                                             const float limit[2],



More information about the Bf-blender-cvs mailing list