Blender V4.5
ED_uvedit.hh
Go to the documentation of this file.
1/* SPDX-FileCopyrightText: 2008 Blender Authors
2 *
3 * SPDX-License-Identifier: GPL-2.0-or-later */
4
8
9#pragma once
10
11#include "BLI_function_ref.hh"
12
13#include "BKE_customdata.hh"
14
15struct ARegion;
16struct ARegionType;
17struct BMEditMesh;
18struct BMFace;
19struct BMLoop;
20struct BMesh;
21struct Image;
22struct ImageUser;
23struct ListBase;
24struct Main;
25struct Object;
26struct Scene;
27struct SpaceImage;
28struct ToolSettings;
29struct View2D;
30struct ViewLayer;
31struct bContext;
32struct bNode;
33struct bNodeTree;
34struct wmKeyConfig;
35struct wmTimer;
36
37/* `uvedit_ops.cc` */
38
41void ED_keymap_uvedit(wmKeyConfig *keyconf);
42
47
48void ED_uvedit_foreach_uv(const Scene *scene,
49 BMesh *bm,
50 const bool skip_invisible,
51 const bool selected,
52 blender::FunctionRef<void(float[2])> user_fn);
54 blender::Span<Object *> objects_edit,
55 const bool skip_invisible,
56 const bool skip_nonselected,
57 blender::FunctionRef<void(float[2])> user_fn);
58bool ED_uvedit_minmax_multi(const Scene *scene,
59 blender::Span<Object *> objects_edit,
60 float r_min[2],
61 float r_max[2]);
62bool ED_uvedit_center_multi(const Scene *scene,
63 blender::Span<Object *> objects_edit,
64 float r_cent[2],
65 char mode);
66
68 Scene *scene,
69 ViewLayer *view_layer,
70 float r_center[2],
71 char mode,
72 bool *r_has_select);
73
75 int mat_nr,
76 Image **r_ima,
77 ImageUser **r_iuser,
78 const bNode **r_node,
79 const bNodeTree **r_ntree);
80void ED_object_assign_active_image(Main *bmain, Object *ob, int mat_nr, Image *ima);
81
82bool ED_uvedit_test(Object *obedit);
83
84/* `uvedit_select.cc` */
85
86/* Visibility and selection tests. */
87
88bool uvedit_face_visible_test_ex(const ToolSettings *ts, const BMFace *efa);
90 const BMFace *efa,
91 const BMUVOffsets &offsets);
92
94 const BMLoop *l,
95 const BMUVOffsets &offsets);
96bool uvedit_uv_select_test_ex(const ToolSettings *ts, const BMLoop *l, const BMUVOffsets &offsets);
97
98bool uvedit_face_visible_test(const Scene *scene, const BMFace *efa);
99bool uvedit_face_select_test(const Scene *scene, const BMFace *efa, const BMUVOffsets &offsets);
100bool uvedit_edge_select_test(const Scene *scene, const BMLoop *l, const BMUVOffsets &offsets);
101bool uvedit_uv_select_test(const Scene *scene, const BMLoop *l, const BMUVOffsets &offsets);
102
103/* Individual UV element selection functions. */
104
111 const Scene *scene, BMesh *bm, BMFace *efa, bool select, const BMUVOffsets &offsets);
118 const Scene *scene, BMesh *bm, BMLoop *l, bool select, const BMUVOffsets &offsets);
125 const Scene *scene, BMesh *bm, BMLoop *l, bool select, const BMUVOffsets &offsets);
126
127/* Low level functions for (de)selecting individual UV elements. Ensure UV face visibility before
128 * use. */
129
130void uvedit_face_select_enable(const Scene *scene,
131 BMesh *bm,
132 BMFace *efa,
133 const BMUVOffsets &offsets);
134void uvedit_face_select_disable(const Scene *scene,
135 BMesh *bm,
136 BMFace *efa,
137 const BMUVOffsets &offsets);
138
139void uvedit_edge_select_enable(const Scene *scene,
140 BMesh *bm,
141 BMLoop *l,
142 const BMUVOffsets &offsets);
143void uvedit_edge_select_disable(const Scene *scene,
144 BMesh *bm,
145 BMLoop *l,
146 const BMUVOffsets &offsets);
147
148void uvedit_uv_select_enable(const Scene *scene, BMesh *bm, BMLoop *l, const BMUVOffsets &offsets);
149void uvedit_uv_select_disable(const Scene *scene,
150 BMesh *bm,
151 BMLoop *l,
152 const BMUVOffsets &offsets);
153
154/* Sticky mode UV element selection functions. */
155
157 const Scene *scene, BMesh *bm, BMFace *efa, bool select, const BMUVOffsets &offsets);
159 const Scene *scene, BMesh *bm, BMLoop *l, bool select, const BMUVOffsets &offsets);
160
162 const Scene *scene, BMesh *bm, BMLoop *l, bool select, const BMUVOffsets &offsets);
163
164/* Low level functions for sticky element selection (sticky mode independent). Type of sticky
165 * selection is specified explicitly (using sticky_flag, except for face selection). */
166
168 const Scene *scene, BMesh *bm, BMFace *efa, const bool select, const BMUVOffsets &offsets);
176void uvedit_edge_select_shared_vert(const Scene *scene,
177 BMesh *bm,
178 BMLoop *l,
179 const bool select,
180 const int sticky_flag,
181 const BMUVOffsets &offsets);
189void uvedit_uv_select_shared_vert(const Scene *scene,
190 BMesh *bm,
191 BMLoop *l,
192 const bool select,
193 const int sticky_flag,
194 const BMUVOffsets &offsets);
195
199void uvedit_edge_select_set_noflush(const Scene *scene,
200 BMLoop *l,
201 const bool select,
202 const int sticky_flag,
203 const BMUVOffsets &offsets);
204
211void ED_uvedit_selectmode_clean(const Scene *scene, Object *obedit);
214
220void ED_uvedit_selectmode_flush(const Scene *scene, BMesh *bm);
221
225void uvedit_deselect_flush(const Scene *scene, BMesh *bm);
229void uvedit_select_flush(const Scene *scene, BMesh *bm);
230
232 const Scene *scene,
234 const float mval_fl[2],
235 const bool ignore_selected,
236 float *dist_sq,
237 float r_uv[2]);
238
239BMFace **ED_uvedit_selected_faces(const Scene *scene, BMesh *bm, int len_max, int *r_faces_len);
240BMLoop **ED_uvedit_selected_edges(const Scene *scene, BMesh *bm, int len_max, int *r_edges_len);
241BMLoop **ED_uvedit_selected_verts(const Scene *scene, BMesh *bm, int len_max, int *r_verts_len);
242
245
248
253char ED_uvedit_select_mode_get(const Scene *scene);
255
256/* `uvedit_unwrap_ops.cc` */
257
258void ED_uvedit_get_aspect(Object *obedit, float *r_aspx, float *r_aspy);
259
264float ED_uvedit_get_aspect_y(Object *obedit);
265
267 const int material_index,
268 float *r_aspx,
269 float *r_aspy);
270
273
277void ED_uvedit_live_unwrap_begin(Scene *scene, Object *obedit, struct wmWindow *win_modal);
279void ED_uvedit_live_unwrap_end(bool cancel);
280
282void ED_uvedit_add_simple_uvs(Main *bmain, const Scene *scene, Object *ob);
283
284/* `uvedit_draw.cc` */
285
286void ED_image_draw_cursor(ARegion *region, const float cursor[2]);
287
288/* `uvedit_buttons.cc` */
289
291
292/* `uvedit_islands.cc` */
293
306
310int bm_mesh_calc_uv_islands(const Scene *scene,
311 BMesh *bm,
312 ListBase *island_list,
313 const bool only_selected_faces,
314 const bool only_selected_uvs,
315 const bool use_seams,
316 const float aspect_y,
317 const BMUVOffsets &offsets);
318
322bool uv_coords_isect_udim(const Image *image, const int udim_grid[2], const float coords[2]);
CustomData interface, see also DNA_customdata_types.h.
bool ED_object_get_active_image(Object *ob, int mat_nr, Image **r_ima, ImageUser **r_iuser, const bNode **r_node, const bNodeTree **r_ntree)
void ED_uvedit_foreach_uv_multi(const Scene *scene, blender::Span< Object * > objects_edit, const bool skip_invisible, const bool skip_nonselected, blender::FunctionRef< void(float[2])> user_fn)
void ED_keymap_uvedit(wmKeyConfig *keyconf)
bool uvedit_face_select_test(const Scene *scene, const BMFace *efa, const BMUVOffsets &offsets)
void ED_uvedit_selectmode_clean(const Scene *scene, Object *obedit)
UV Select Mode set.
void ED_uvedit_selectmode_clean_multi(bContext *C)
void ED_uvedit_add_simple_uvs(Main *bmain, const Scene *scene, Object *ob)
void ED_uvedit_live_unwrap_begin(Scene *scene, Object *obedit, struct wmWindow *win_modal)
bool ED_uvedit_nearest_uv_multi(const View2D *v2d, const Scene *scene, blender::Span< Object * > objects, const float mval_fl[2], const bool ignore_selected, float *dist_sq, float r_uv[2])
void ED_operatortypes_uvedit()
float ED_uvedit_get_aspect_y(Object *obedit)
void uvedit_uv_select_shared_vert(const Scene *scene, BMesh *bm, BMLoop *l, const bool select, const int sticky_flag, const BMUVOffsets &offsets)
void uvedit_face_select_disable(const Scene *scene, BMesh *bm, BMFace *efa, const BMUVOffsets &offsets)
void ED_uvedit_sticky_selectmode_update(bContext *C)
void ED_uvedit_active_edge_loop_set(BMesh *bm, BMLoop *l)
bool ED_uvedit_minmax_multi(const Scene *scene, blender::Span< Object * > objects_edit, float r_min[2], float r_max[2])
void uvedit_face_select_set_with_sticky(const Scene *scene, BMesh *bm, BMFace *efa, bool select, const BMUVOffsets &offsets)
void ED_uvedit_get_aspect_from_material(Object *ob, const int material_index, float *r_aspx, float *r_aspy)
void uvedit_edge_select_set(const Scene *scene, BMesh *bm, BMLoop *l, bool select, const BMUVOffsets &offsets)
Select UV Edge.
BMLoop ** ED_uvedit_selected_edges(const Scene *scene, BMesh *bm, int len_max, int *r_edges_len)
void ED_uvedit_foreach_uv(const Scene *scene, BMesh *bm, const bool skip_invisible, const bool selected, blender::FunctionRef< void(float[2])> user_fn)
void ED_uvedit_buttons_register(ARegionType *art)
void uvedit_uv_select_enable(const Scene *scene, BMesh *bm, BMLoop *l, const BMUVOffsets &offsets)
bool uvedit_face_select_test_ex(const ToolSettings *ts, const BMFace *efa, const BMUVOffsets &offsets)
bool ED_uvedit_live_unwrap_timer_check(const wmTimer *timer)
bool ED_uvedit_test(Object *obedit)
Definition uvedit_ops.cc:71
char ED_uvedit_select_mode_get(const Scene *scene)
void ED_uvedit_selectmode_flush(const Scene *scene, BMesh *bm)
UV Select Mode Flush.
void ED_uvedit_select_all(BMesh *bm)
void ED_uvedit_live_unwrap_re_solve()
bool uvedit_uv_select_test(const Scene *scene, const BMLoop *l, const BMUVOffsets &offsets)
void uvedit_deselect_flush(const Scene *scene, BMesh *bm)
void uvedit_edge_select_set_with_sticky(const Scene *scene, BMesh *bm, BMLoop *l, bool select, const BMUVOffsets &offsets)
void uvedit_uv_select_disable(const Scene *scene, BMesh *bm, BMLoop *l, const BMUVOffsets &offsets)
void uvedit_face_select_set(const Scene *scene, BMesh *bm, BMFace *efa, bool select, const BMUVOffsets &offsets)
Select UV Face.
bool ED_uvedit_center_from_pivot_ex(SpaceImage *sima, Scene *scene, ViewLayer *view_layer, float r_center[2], char mode, bool *r_has_select)
void ED_image_draw_cursor(ARegion *region, const float cursor[2])
void uvedit_uv_select_set_with_sticky(const Scene *scene, BMesh *bm, BMLoop *l, bool select, const BMUVOffsets &offsets)
void uvedit_edge_select_disable(const Scene *scene, BMesh *bm, BMLoop *l, const BMUVOffsets &offsets)
bool uvedit_edge_select_test(const Scene *scene, const BMLoop *l, const BMUVOffsets &offsets)
void uvedit_uv_select_set(const Scene *scene, BMesh *bm, BMLoop *l, bool select, const BMUVOffsets &offsets)
Select UV Vertex.
BMLoop * ED_uvedit_active_edge_loop_get(BMesh *bm)
void ED_uvedit_get_aspect(Object *obedit, float *r_aspx, float *r_aspy)
void ED_uvedit_select_sync_flush(const ToolSettings *ts, BMesh *bm, bool select)
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 BMUVOffsets &offsets)
void ED_uvedit_live_unwrap_end(bool cancel)
void uvedit_face_select_enable(const Scene *scene, BMesh *bm, BMFace *efa, const BMUVOffsets &offsets)
BMLoop * ED_uvedit_active_vert_loop_get(BMesh *bm)
bool uvedit_face_visible_test(const Scene *scene, const BMFace *efa)
void uvedit_edge_select_shared_vert(const Scene *scene, BMesh *bm, BMLoop *l, const bool select, const int sticky_flag, const BMUVOffsets &offsets)
void ED_object_assign_active_image(Main *bmain, Object *ob, int mat_nr, Image *ima)
void uvedit_edge_select_set_noflush(const Scene *scene, BMLoop *l, const bool select, const int sticky_flag, const BMUVOffsets &offsets)
void uvedit_edge_select_enable(const Scene *scene, BMesh *bm, BMLoop *l, const BMUVOffsets &offsets)
void uvedit_face_select_shared_vert(const Scene *scene, BMesh *bm, BMFace *efa, const bool select, const BMUVOffsets &offsets)
bool uv_coords_isect_udim(const Image *image, const int udim_grid[2], const float coords[2])
void ED_uvedit_live_unwrap(const Scene *scene, blender::Span< Object * > objects)
bool ED_uvedit_center_multi(const Scene *scene, blender::Span< Object * > objects_edit, float r_cent[2], char mode)
void ED_operatormacros_uvedit()
bool uvedit_uv_select_test_ex(const ToolSettings *ts, const BMLoop *l, const BMUVOffsets &offsets)
BMFace ** ED_uvedit_selected_faces(const Scene *scene, BMesh *bm, int len_max, int *r_faces_len)
bool uvedit_face_visible_test_ex(const ToolSettings *ts, const BMFace *efa)
void uvedit_select_flush(const Scene *scene, BMesh *bm)
bool uvedit_edge_select_test_ex(const ToolSettings *ts, const BMLoop *l, const BMUVOffsets &offsets)
BMLoop ** ED_uvedit_selected_verts(const Scene *scene, BMesh *bm, int len_max, int *r_verts_len)
void ED_uvedit_active_vert_loop_set(BMesh *bm, BMLoop *l)
#define C
Definition RandGen.cpp:29
BMesh * bm
ATTR_WARN_UNUSED_RESULT const BMLoop * l
#define select(A, B, C)
FaceIsland * prev
Definition ED_uvedit.hh:296
float aspect_y
Definition ED_uvedit.hh:304
BMFace ** faces
Definition ED_uvedit.hh:297
FaceIsland * next
Definition ED_uvedit.hh:295
BMUVOffsets offsets
Definition ED_uvedit.hh:303
wmTimer * timer