Blender
V3.3
|
#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 | |
| |
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 | |
| |
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) |
Utilities for manipulating UV islands.
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.
|
static |
Definition at line 77 of file uvedit_islands.c.
References BM_face_uv_minmax(), faces, INIT_MINMAX2, rctf::xmax, rctf::xmin, rctf::ymax, and rctf::ymin.
Referenced by ED_uvedit_pack_islands_multi().
|
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().
|
static |
align_to_axis |
|
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().
|
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().
|
static |
Definition at line 43 of file uvedit_islands.c.
References BM_ELEM_CD_GET_VOID_P, BM_FACE_FIRST_LOOP, BMLoop::next, and MLoopUV::uv.
Referenced by bm_face_array_uv_scale_y().
|
static |
Definition at line 54 of file uvedit_islands.c.
References BM_ELEM_CD_GET_VOID_P, BM_FACE_FIRST_LOOP, BMLoop::next, offset, and MLoopUV::uv.
Referenced by ED_uvedit_pack_islands_multi().
|
static |
Definition at line 334 of file uvedit_islands.c.
References BM_elem_flag_test, BM_ELEM_SEAM, BM_loop_uv_share_edge_check(), data, BMLoop::e, l_b, and user_data.
Referenced by bm_mesh_calc_uv_islands().
|
static |
Calculate islands and add them to island_list returning the number of items added.
Definition at line 350 of file uvedit_islands.c.
References FaceIsland::aspect_y, BLI_addtail(), bm, BM_EDGE, BM_elem_flag_set, BM_elem_flag_test, BM_ELEM_SELECT, BM_ELEM_TAG, BM_FACE, BM_face_at_index(), BM_FACES_OF_MESH, BM_ITER_MESH, bm_loop_uv_shared_edge_check(), BM_mesh_calc_face_groups(), BM_mesh_elem_table_ensure(), FaceIsland::cd_loop_uv_offset, SharedUVLoopData::cd_loop_uv_offset, faces, FaceIsland::faces, FaceIsland::faces_len, INIT_MINMAX2, MEM_callocN, MEM_freeN, MEM_mallocN, NULL, scene, BMesh::totface, SharedUVLoopData::use_seams, user_data, and uvedit_face_select_test().
Referenced by 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 | ||
) |
Definition at line 435 of file uvedit_islands.c.
References blender::compositor::area(), FaceIsland::aspect_y, BKE_editmesh_from_object(), BLI_box_pack_2d(), BLI_rctf_pad(), BLI_rctf_size_x(), BLI_rctf_size_y(), BMEditMesh::bm, bm, bm_face_array_calc_bounds(), bm_face_array_uv_rotate_fit_aabb(), bm_face_array_uv_scale_y(), BM_face_uv_minmax(), bm_face_uv_translate_and_scale_around_pivot(), bm_mesh_calc_uv_islands(), FaceIsland::bounds_rect, FaceIsland::cd_loop_uv_offset, CD_MLOOPUV, CustomData_get_offset(), Object::data, DEG_id_tag_update(), double(), ED_uvedit_get_aspect(), faces, FaceIsland::faces, FaceIsland::faces_len, float(), floorf, UVMapUDIM_Params::grid_shape, BoxPack::h, ID_RECALC_GEOMETRY, image(), UVMapUDIM_Params::image, BoxPack::index, INIT_MINMAX2, BMesh::ldata, LISTBASE_FOREACH_INDEX, MAX2, max_ff(), MEM_freeN, MEM_mallocN, MIN2, NC_GEOM, ND_DATA, NULL, offset, params, scene, sqrtf, UVMapUDIM_Params::target_udim, Scene::toolsettings, UVMapUDIM_Params::use_target_udim, uv_coords_isect_udim(), uv_nearest_grid_tile_distance(), uv_nearest_image_tile_distance(), ToolSettings::uvcalc_margin, BoxPack::w, WM_main_add_notifier(), BoxPack::x, rctf::xmin, BoxPack::y, and rctf::ymin.
Definition at line 226 of file uvedit_islands.c.
References floorf, IMA_SRC_TILED, image(), is_zero_v2(), LISTBASE_FOREACH, tile, and tile_index.
Referenced by ED_uvedit_pack_islands_multi().
|
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().
|
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().