Blender V4.3
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
9#pragma once
10
11#include "BKE_customdata.hh"
12
13struct ARegion;
14struct ARegionType;
15struct BMEditMesh;
16struct BMFace;
17struct BMLoop;
18struct BMesh;
19struct Image;
20struct ImageUser;
21struct Main;
22struct Object;
23struct Scene;
24struct SpaceImage;
25struct ToolSettings;
26struct View2D;
27struct ViewLayer;
28struct bContext;
29struct bNode;
30struct bNodeTree;
31struct wmKeyConfig;
32struct wmTimer;
33
34/* `uvedit_ops.cc` */
35
38void ED_keymap_uvedit(wmKeyConfig *keyconf);
39
44
45void ED_uvedit_foreach_uv(const Scene *scene,
46 BMesh *bm,
47 const bool skip_invisible,
48 const bool selected,
49 blender::FunctionRef<void(float[2])> user_fn);
51 blender::Span<Object *> objects_edit,
52 const bool skip_invisible,
53 const bool skip_nonselected,
54 blender::FunctionRef<void(float[2])> user_fn);
55bool ED_uvedit_minmax_multi(const Scene *scene,
56 blender::Span<Object *> objects_edit,
57 float r_min[2],
58 float r_max[2]);
59bool ED_uvedit_center_multi(const Scene *scene,
60 blender::Span<Object *> objects_edit,
61 float r_cent[2],
62 char mode);
63
65 Scene *scene,
66 ViewLayer *view_layer,
67 float r_center[2],
68 char mode,
69 bool *r_has_select);
70
72 int mat_nr,
73 Image **r_ima,
74 ImageUser **r_iuser,
75 const bNode **r_node,
76 const bNodeTree **r_ntree);
77void ED_object_assign_active_image(Main *bmain, Object *ob, int mat_nr, Image *ima);
78
79bool ED_uvedit_test(Object *obedit);
80
81/* Visibility and selection tests. */
82
84bool uvedit_face_select_test_ex(const ToolSettings *ts, BMFace *efa, BMUVOffsets offsets);
85
86bool uvedit_edge_select_test_ex(const ToolSettings *ts, const BMLoop *l, BMUVOffsets offsets);
87bool uvedit_uv_select_test_ex(const ToolSettings *ts, const BMLoop *l, BMUVOffsets offsets);
88
89bool uvedit_face_visible_test(const Scene *scene, BMFace *efa);
90bool uvedit_face_select_test(const Scene *scene, BMFace *efa, BMUVOffsets offsets);
91bool uvedit_edge_select_test(const Scene *scene, BMLoop *l, BMUVOffsets offsets);
92bool uvedit_uv_select_test(const Scene *scene, BMLoop *l, BMUVOffsets offsets);
93
94/* Individual UV element selection functions. */
95
102 const Scene *scene, BMesh *bm, BMFace *efa, bool select, bool do_history, BMUVOffsets offsets);
109 const Scene *scene, BMesh *bm, BMLoop *l, bool select, bool do_history, BMUVOffsets offsets);
116 const Scene *scene, BMesh *bm, BMLoop *l, bool select, bool do_history, BMUVOffsets offsets);
117
118/* Low level functions for (de)selecting individual UV elements. Ensure UV face visibility before
119 * use. */
120
122 const Scene *scene, BMesh *bm, BMFace *efa, bool do_history, BMUVOffsets offsets);
123void uvedit_face_select_disable(const Scene *scene, BMesh *bm, BMFace *efa, BMUVOffsets offsets);
124
126 const Scene *scene, BMesh *bm, BMLoop *l, bool do_history, BMUVOffsets offsets);
127void uvedit_edge_select_disable(const Scene *scene, BMesh *bm, BMLoop *l, BMUVOffsets offsets);
128
130 const Scene *scene, BMesh *bm, BMLoop *l, bool do_history, BMUVOffsets offsets);
131void uvedit_uv_select_disable(const Scene *scene, BMesh *bm, BMLoop *l, BMUVOffsets offsets);
132
133/* Sticky mode UV element selection functions. */
134
136 BMEditMesh *em,
137 BMFace *efa,
138 bool select,
139 bool do_history,
140 BMUVOffsets offsets);
142 BMEditMesh *em,
143 BMLoop *l,
144 bool select,
145 bool do_history,
146 BMUVOffsets offsets);
147
149 BMEditMesh *em,
150 BMLoop *l,
151 bool select,
152 bool do_history,
153 BMUVOffsets offsets);
154
155/* Low level functions for sticky element selection (sticky mode independent). Type of sticky
156 * selection is specified explicitly (using sticky_flag, except for face selection). */
157
158void uvedit_face_select_shared_vert(const Scene *scene,
159 BMEditMesh *em,
160 BMFace *efa,
161 const bool select,
162 const bool do_history,
163 BMUVOffsets offsets);
171void uvedit_edge_select_shared_vert(const Scene *scene,
172 BMEditMesh *em,
173 BMLoop *l,
174 const bool select,
175 const int sticky_flag,
176 const bool do_history,
177 BMUVOffsets offsets);
185void uvedit_uv_select_shared_vert(const Scene *scene,
186 BMEditMesh *em,
187 BMLoop *l,
188 const bool select,
189 const int sticky_flag,
190 const bool do_history,
191 BMUVOffsets offsets);
192
197 const Scene *scene, BMLoop *l, const bool select, const int sticky_flag, BMUVOffsets offsets);
198
205void ED_uvedit_selectmode_clean(const Scene *scene, Object *obedit);
207
213void ED_uvedit_selectmode_flush(const Scene *scene, BMEditMesh *em);
214
218void uvedit_deselect_flush(const Scene *scene, BMEditMesh *em);
222void uvedit_select_flush(const Scene *scene, BMEditMesh *em);
223
225 const Scene *scene,
227 const float mval_fl[2],
228 const bool ignore_selected,
229 float *dist_sq,
230 float r_uv[2]);
231
232BMFace **ED_uvedit_selected_faces(const Scene *scene, BMesh *bm, int len_max, int *r_faces_len);
233BMLoop **ED_uvedit_selected_edges(const Scene *scene, BMesh *bm, int len_max, int *r_edges_len);
234BMLoop **ED_uvedit_selected_verts(const Scene *scene, BMesh *bm, int len_max, int *r_verts_len);
235
236void ED_uvedit_get_aspect(Object *obedit, float *r_aspx, float *r_aspy);
237
242float ED_uvedit_get_aspect_y(Object *obedit);
243
245 const int material_index,
246 float *r_aspx,
247 float *r_aspy);
248
251
254
259char ED_uvedit_select_mode_get(const Scene *scene);
261
262/* `uvedit_unwrap_ops.cc` */
263
266
270void ED_uvedit_live_unwrap_begin(Scene *scene, Object *obedit, struct wmWindow *win_modal);
272void ED_uvedit_live_unwrap_end(bool cancel);
273
275void ED_uvedit_add_simple_uvs(Main *bmain, const Scene *scene, Object *ob);
276
277/* `uvedit_draw.cc` */
278
279void ED_image_draw_cursor(ARegion *region, const float cursor[2]);
280
281/* `uvedit_buttons.cc` */
282
284
285/* `uvedit_islands.cc` */
286
299
303int bm_mesh_calc_uv_islands(const Scene *scene,
304 BMesh *bm,
305 ListBase *island_list,
306 const bool only_selected_faces,
307 const bool only_selected_uvs,
308 const bool use_seams,
309 const float aspect_y,
310 BMUVOffsets offsets);
311
315bool 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)
void uvedit_edge_select_set(const Scene *scene, BMesh *bm, BMLoop *l, bool select, bool do_history, BMUVOffsets offsets)
Select UV Edge.
void ED_uvedit_selectmode_clean(const Scene *scene, Object *obedit)
UV Select Mode set.
void ED_uvedit_select_sync_flush(const ToolSettings *ts, BMEditMesh *em, bool select)
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()
bool uvedit_face_select_test(const Scene *scene, BMFace *efa, BMUVOffsets offsets)
float ED_uvedit_get_aspect_y(Object *obedit)
void ED_uvedit_active_edge_loop_set(BMesh *bm, BMLoop *l)
bool uvedit_face_select_test_ex(const ToolSettings *ts, BMFace *efa, BMUVOffsets offsets)
bool ED_uvedit_minmax_multi(const Scene *scene, blender::Span< Object * > objects_edit, float r_min[2], float r_max[2])
void uvedit_deselect_flush(const Scene *scene, BMEditMesh *em)
void ED_uvedit_get_aspect_from_material(Object *ob, const int material_index, float *r_aspx, float *r_aspy)
void uvedit_face_select_enable(const Scene *scene, BMesh *bm, BMFace *efa, bool do_history, BMUVOffsets offsets)
void uvedit_face_select_set(const Scene *scene, BMesh *bm, BMFace *efa, bool select, bool do_history, BMUVOffsets offsets)
Select UV Face.
bool uvedit_edge_select_test(const Scene *scene, BMLoop *l, BMUVOffsets offsets)
void uvedit_edge_select_shared_vert(const Scene *scene, BMEditMesh *em, BMLoop *l, const bool select, const int sticky_flag, const bool do_history, BMUVOffsets offsets)
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)
bool ED_uvedit_live_unwrap_timer_check(const wmTimer *timer)
bool ED_uvedit_test(Object *obedit)
Definition uvedit_ops.cc:69
char ED_uvedit_select_mode_get(const Scene *scene)
void uvedit_edge_select_set_with_sticky(const Scene *scene, BMEditMesh *em, BMLoop *l, bool select, bool do_history, BMUVOffsets offsets)
void ED_uvedit_select_all(BMesh *bm)
void ED_uvedit_live_unwrap_re_solve()
void uvedit_select_flush(const Scene *scene, BMEditMesh *em)
bool uvedit_face_visible_test_ex(const ToolSettings *ts, BMFace *efa)
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_face_select_shared_vert(const Scene *scene, BMEditMesh *em, BMFace *efa, const bool select, const bool do_history, BMUVOffsets offsets)
void ED_uvedit_selectmode_flush(const Scene *scene, BMEditMesh *em)
UV Select Mode Flush.
BMLoop * ED_uvedit_active_edge_loop_get(BMesh *bm)
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, BMUVOffsets offsets)
bool uvedit_edge_select_test_ex(const ToolSettings *ts, const BMLoop *l, BMUVOffsets offsets)
void ED_uvedit_get_aspect(Object *obedit, float *r_aspx, float *r_aspy)
bool uvedit_face_visible_test(const Scene *scene, BMFace *efa)
void uvedit_face_select_disable(const Scene *scene, BMesh *bm, BMFace *efa, BMUVOffsets offsets)
void uvedit_uv_select_set(const Scene *scene, BMesh *bm, BMLoop *l, bool select, bool do_history, BMUVOffsets offsets)
Select UV Vertex.
void ED_uvedit_live_unwrap_end(bool cancel)
void uvedit_face_select_set_with_sticky(const Scene *scene, BMEditMesh *em, BMFace *efa, bool select, bool do_history, BMUVOffsets offsets)
BMLoop * ED_uvedit_active_vert_loop_get(BMesh *bm)
void ED_object_assign_active_image(Main *bmain, Object *ob, int mat_nr, Image *ima)
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)
void uvedit_uv_select_shared_vert(const Scene *scene, BMEditMesh *em, BMLoop *l, const bool select, const int sticky_flag, const bool do_history, BMUVOffsets offsets)
bool ED_uvedit_center_multi(const Scene *scene, blender::Span< Object * > objects_edit, float r_cent[2], char mode)
void ED_operatormacros_uvedit()
BMFace ** ED_uvedit_selected_faces(const Scene *scene, BMesh *bm, int len_max, int *r_faces_len)
void uvedit_edge_select_disable(const Scene *scene, BMesh *bm, BMLoop *l, BMUVOffsets offsets)
bool uvedit_uv_select_test_ex(const ToolSettings *ts, const BMLoop *l, BMUVOffsets offsets)
void uvedit_uv_select_enable(const Scene *scene, BMesh *bm, BMLoop *l, bool do_history, BMUVOffsets offsets)
void uvedit_edge_select_set_noflush(const Scene *scene, BMLoop *l, const bool select, const int sticky_flag, BMUVOffsets offsets)
bool uvedit_uv_select_test(const Scene *scene, BMLoop *l, BMUVOffsets offsets)
void uvedit_uv_select_set_with_sticky(const Scene *scene, BMEditMesh *em, BMLoop *l, bool select, bool do_history, BMUVOffsets offsets)
void uvedit_uv_select_disable(const Scene *scene, BMesh *bm, BMLoop *l, BMUVOffsets offsets)
BMLoop ** ED_uvedit_selected_verts(const Scene *scene, BMesh *bm, int len_max, int *r_verts_len)
void uvedit_edge_select_enable(const Scene *scene, BMesh *bm, BMLoop *l, bool do_history, BMUVOffsets offsets)
void ED_uvedit_active_vert_loop_set(BMesh *bm, BMLoop *l)
ATTR_WARN_UNUSED_RESULT BMesh * bm
ATTR_WARN_UNUSED_RESULT const BMLoop * l
ccl_device_inline float4 select(const int4 mask, const float4 a, const float4 b)
FaceIsland * prev
Definition ED_uvedit.hh:289
float aspect_y
Definition ED_uvedit.hh:297
BMFace ** faces
Definition ED_uvedit.hh:290
FaceIsland * next
Definition ED_uvedit.hh:288
BMUVOffsets offsets
Definition ED_uvedit.hh:296
wmTimer * timer
static bool do_history(const char *filepath, ReportList *reports)