Blender  V3.3
Classes
uvedit_islands.c File Reference
#include "MEM_guardedalloc.h"
#include "DNA_meshdata_types.h"
#include "DNA_scene_types.h"
#include "DNA_space_types.h"
#include "BLI_boxpack_2d.h"
#include "BLI_convexhull_2d.h"
#include "BLI_listbase.h"
#include "BLI_math.h"
#include "BLI_rect.h"
#include "BKE_customdata.h"
#include "BKE_editmesh.h"
#include "BKE_image.h"
#include "DEG_depsgraph.h"
#include "ED_uvedit.h"
#include "WM_api.h"
#include "WM_types.h"
#include "bmesh.h"

Go to the source code of this file.

Classes

struct  FaceIsland
 
struct  SharedUVLoopData
 

Functions

UV Face Utilities
static void bm_face_uv_scale_y (BMFace *f, const float scale_y, const int cd_loop_uv_offset)
 
static void bm_face_uv_translate_and_scale_around_pivot (BMFace *f, const float offset[2], const float scale[2], const float pivot[2], const int cd_loop_uv_offset)
 
UV Face Array Utilities
static void bm_face_array_calc_bounds (BMFace **faces, int faces_len, const uint cd_loop_uv_offset, rctf *r_bounds_rect)
 
static float(* bm_face_array_calc_unique_uv_coords (BMFace **faces, int faces_len, const uint cd_loop_uv_offset, int *r_coords_len))[2]
 
static void bm_face_array_uv_rotate_fit_aabb (BMFace **faces, int faces_len, int align_to_axis, const uint cd_loop_uv_offset)
 
static void bm_face_array_uv_scale_y (BMFace **faces, int faces_len, const float scale_y, const uint cd_loop_uv_offset)
 
UDIM packing helper functions
bool uv_coords_isect_udim (const Image *image, const int udim_grid[2], const float coords[2])
 
static float uv_nearest_image_tile_distance (const Image *image, const float coords[2], float nearest_tile_co[2])
 
static float uv_nearest_grid_tile_distance (const int udim_grid[2], float coords[2], float nearest_tile_co[2])
 
Calculate UV Islands
Note
Currently this is a private API/type, it could be made public.
static bool bm_loop_uv_shared_edge_check (const BMLoop *l_a, const BMLoop *l_b, void *user_data)
 
static int bm_mesh_calc_uv_islands (const Scene *scene, BMesh *bm, ListBase *island_list, const bool only_selected_faces, const bool only_selected_uvs, const bool use_seams, const float aspect_y, const uint cd_loop_uv_offset)
 
Public UV Island Packing
Note
This behavior follows #param_pack.
void ED_uvedit_pack_islands_multi (const Scene *scene, Object **objects, const uint objects_len, const struct UVMapUDIM_Params *udim_params, const struct UVPackIsland_Params *params)
 

Detailed Description

Utilities for manipulating UV islands.

Note
This is similar to GEO_uv_parametrizer.h, however the data structures there don't support arbitrary topology such as an edge with 3 or more faces using it. This API uses BMesh data structures and doesn't have limitations for manifold meshes.

Definition in file uvedit_islands.c.

Function Documentation

◆ bm_face_array_calc_bounds()

static void bm_face_array_calc_bounds ( BMFace **  faces,
int  faces_len,
const uint  cd_loop_uv_offset,
rctf r_bounds_rect 
)
static

◆ bm_face_array_calc_unique_uv_coords()

static float(* bm_face_array_calc_unique_uv_coords ( BMFace **  faces,
int  faces_len,
const uint  cd_loop_uv_offset,
int *  r_coords_len 
) )[2]
static

Return an array of un-ordered UV coordinates, without duplicating coordinates for loops that share a vertex.

Definition at line 98 of file uvedit_islands.c.

References BM_DISK_EDGE_NEXT, BM_ELEM_CD_GET_VOID_P, BM_elem_flag_disable, BM_elem_flag_enable, BM_elem_flag_test, BM_ELEM_TAG, BM_FACE_FIRST_LOOP, copy_v2_v2(), BMVert::e, e, equals_v2v2(), faces, float(), BMFace::len, MEM_mallocN, MEM_reallocN, BMLoop::next, NULL, BMLoop::radial_next, MLoopUV::uv, and BMLoop::v.

Referenced by bm_face_array_uv_rotate_fit_aabb().

◆ bm_face_array_uv_rotate_fit_aabb()

static void bm_face_array_uv_rotate_fit_aabb ( BMFace **  faces,
int  faces_len,
int  align_to_axis,
const uint  cd_loop_uv_offset 
)
static
Parameters
align_to_axis
  • -1: don't align to an axis.
  • 0: align horizontally.
  • 1: align vertically.

Definition at line 164 of file uvedit_islands.c.

References angle(), angle_to_mat2(), BLI_convexhull_aabb_fit_points_2d(), bm_face_array_calc_unique_uv_coords(), BM_face_uv_transform(), DEG2RAD, faces, float(), INIT_MINMAX2, MEM_freeN, minmax_v2v2_v2(), mul_m2_v2(), size(), and sub_v2_v2v2().

Referenced by ED_uvedit_pack_islands_multi().

◆ bm_face_array_uv_scale_y()

static void bm_face_array_uv_scale_y ( BMFace **  faces,
int  faces_len,
const float  scale_y,
const uint  cd_loop_uv_offset 
)
static

Definition at line 209 of file uvedit_islands.c.

References bm_face_uv_scale_y(), and faces.

Referenced by ED_uvedit_pack_islands_multi().

◆ bm_face_uv_scale_y()

static void bm_face_uv_scale_y ( BMFace f,
const float  scale_y,
const int  cd_loop_uv_offset 
)
static

◆ bm_face_uv_translate_and_scale_around_pivot()

static void bm_face_uv_translate_and_scale_around_pivot ( BMFace f,
const float  offset[2],
const float  scale[2],
const float  pivot[2],
const int  cd_loop_uv_offset 
)
static

◆ bm_loop_uv_shared_edge_check()

static bool bm_loop_uv_shared_edge_check ( const BMLoop l_a,
const BMLoop l_b,
void user_data 
)
static

◆ bm_mesh_calc_uv_islands()

static int bm_mesh_calc_uv_islands ( const Scene scene,
BMesh bm,
ListBase island_list,
const bool  only_selected_faces,
const bool  only_selected_uvs,
const bool  use_seams,
const float  aspect_y,
const uint  cd_loop_uv_offset 
)
static

◆ ED_uvedit_pack_islands_multi()

void ED_uvedit_pack_islands_multi ( const Scene scene,
Object **  objects,
const uint  objects_len,
const struct UVMapUDIM_Params udim_params,
const struct UVPackIsland_Params params 
)

◆ uv_coords_isect_udim()

bool uv_coords_isect_udim ( const Image image,
const int  udim_grid[2],
const float  coords[2] 
)

◆ uv_nearest_grid_tile_distance()

static float uv_nearest_grid_tile_distance ( const int  udim_grid[2],
float  coords[2],
float  nearest_tile_co[2] 
)
static

Calculates distance to nearest UDIM grid tile in UV space and its UDIM tile number.

Definition at line 275 of file uvedit_islands.c.

References add_v2_fl(), floorf, and len_squared_v2v2().

Referenced by ED_uvedit_pack_islands_multi().

◆ uv_nearest_image_tile_distance()

static float uv_nearest_image_tile_distance ( const Image image,
const float  coords[2],
float  nearest_tile_co[2] 
)
static

Calculates distance to nearest UDIM image tile in UV space and its UDIM tile number.

Definition at line 258 of file uvedit_islands.c.

References add_v2_fl(), BKE_image_find_nearest_tile_with_offset(), image(), len_squared_v2v2(), and zero_v2().

Referenced by ED_uvedit_pack_islands_multi().