Blender  V3.3
bmesh_marking.h
Go to the documentation of this file.
1 /* SPDX-License-Identifier: GPL-2.0-or-later */
2 
3 #pragma once
4 
9 typedef struct BMEditSelection {
12  char htype;
14 
15 typedef enum eBMSelectionFlushFLags {
24 
25 /* Geometry hiding code. */
26 
27 #define BM_elem_hide_set(bm, ele, hide) _bm_elem_hide_set(bm, &(ele)->head, hide)
28 void _bm_elem_hide_set(BMesh *bm, BMHeader *head, bool hide);
29 void BM_vert_hide_set(BMVert *v, bool hide);
30 void BM_edge_hide_set(BMEdge *e, bool hide);
31 void BM_face_hide_set(BMFace *f, bool hide);
32 
33 /* Selection code. */
34 
40 
42  BMesh *bm, char htype, char hflag, bool respecthide, bool overwrite, char hflag_test);
44  BMesh *bm, char htype, char hflag, bool respecthide, bool overwrite, char hflag_test);
45 
46 void BM_mesh_elem_hflag_enable_all(BMesh *bm, char htype, char hflag, bool respecthide);
47 void BM_mesh_elem_hflag_disable_all(BMesh *bm, char htype, char hflag, bool respecthide);
48 
49 /* Individual element select functions, #BM_elem_select_set is a shortcut for these
50  * that automatically detects which one to use. */
51 
58 void BM_vert_select_set(BMesh *bm, BMVert *v, bool select);
64 void BM_edge_select_set(BMesh *bm, BMEdge *e, bool select);
71 void BM_face_select_set(BMesh *bm, BMFace *f, bool select);
72 
73 /* Lower level functions which don't do flushing. */
74 
77 
86 void BM_mesh_select_mode_clean_ex(BMesh *bm, short selectmode);
88 
95 void BM_mesh_select_mode_set(BMesh *bm, int selectmode);
103 void BM_mesh_select_mode_flush_ex(BMesh *bm, short selectmode, eBMSelectionFlushFLags flags);
105 
114 
115 int BM_mesh_elem_hflag_count_enabled(BMesh *bm, char htype, char hflag, bool respecthide);
116 int BM_mesh_elem_hflag_count_disabled(BMesh *bm, char htype, char hflag, bool respecthide);
117 
118 /* Edit selection stuff. */
119 
121 BMFace *BM_mesh_active_face_get(BMesh *bm, bool is_sloppy, bool is_selected);
125 
135 void BM_editselection_center(BMEditSelection *ese, float r_center[3]);
136 void BM_editselection_normal(BMEditSelection *ese, float r_normal[3]);
142 void BM_editselection_plane(BMEditSelection *ese, float r_plane[3]);
143 
144 #define BM_select_history_check(bm, ele) _bm_select_history_check(bm, &(ele)->head)
145 #define BM_select_history_remove(bm, ele) _bm_select_history_remove(bm, &(ele)->head)
146 #define BM_select_history_store_notest(bm, ele) _bm_select_history_store_notest(bm, &(ele)->head)
147 #define BM_select_history_store(bm, ele) _bm_select_history_store(bm, &(ele)->head)
148 #define BM_select_history_store_head_notest(bm, ele) \
149  _bm_select_history_store_head_notest(bm, &(ele)->head)
150 #define BM_select_history_store_head(bm, ele) _bm_select_history_store_head(bm, &(ele)->head)
151 #define BM_select_history_store_after_notest(bm, ese_ref, ele) \
152  _bm_select_history_store_after_notest(bm, ese_ref, &(ele)->head)
153 #define BM_select_history_store_after(bm, ese, ese_ref) \
154  _bm_select_history_store_after(bm, ese_ref, &(ele)->head)
155 
164 
175 
180  BMesh *bm, GHash *vert_map, GHash *edge_map, GHash *face_map, bool use_chain);
181 
182 #define BM_SELECT_HISTORY_BACKUP(bm) \
183  { \
184  ListBase _bm_prev_selected = (bm)->selected; \
185  BLI_listbase_clear(&(bm)->selected)
186 
187 #define BM_SELECT_HISTORY_RESTORE(bm) \
188  (bm)->selected = _bm_prev_selected; \
189  } \
190  (void)0
__forceinline const avxb select(const avxb &m, const avxb &t, const avxb &f)
Definition: avxb.h:154
ATTR_WARN_UNUSED_RESULT BMesh * bm
void BM_mesh_select_mode_flush_ex(BMesh *bm, short selectmode, eBMSelectionFlushFLags flags)
Select Mode Flush.
void BM_select_history_merge_from_targetmap(BMesh *bm, GHash *vert_map, GHash *edge_map, GHash *face_map, bool use_chain)
void BM_select_history_clear(BMesh *bm)
BMEdge * BM_mesh_active_edge_get(BMesh *bm)
bool _bm_select_history_check(BMesh *bm, const BMHeader *ele)
void _bm_select_history_store_head_notest(BMesh *bm, BMHeader *ele)
struct BMEditSelection BMEditSelection
void BM_mesh_select_mode_flush(BMesh *bm)
void BM_mesh_select_mode_clean_ex(BMesh *bm, short selectmode)
Select Mode Clean.
void BM_edge_select_set(BMesh *bm, BMEdge *e, bool select)
Select Edge.
void BM_mesh_select_mode_set(BMesh *bm, int selectmode)
void BM_mesh_elem_hflag_enable_test(BMesh *bm, char htype, char hflag, bool respecthide, bool overwrite, char hflag_test)
void BM_mesh_elem_hflag_disable_all(BMesh *bm, char htype, char hflag, bool respecthide)
void BM_mesh_select_flush(BMesh *bm)
bool _bm_select_history_remove(BMesh *bm, BMHeader *ele)
int BM_mesh_elem_hflag_count_enabled(BMesh *bm, char htype, char hflag, bool respecthide)
void _bm_select_history_store_head(BMesh *bm, BMHeader *ele)
void _bm_select_history_store_after(BMesh *bm, BMEditSelection *ese_ref, BMHeader *ele)
void BM_vert_select_set(BMesh *bm, BMVert *v, bool select)
Select Vert.
void _bm_select_history_store_notest(BMesh *bm, BMHeader *ele)
bool BM_select_history_active_get(BMesh *bm, struct BMEditSelection *ese)
void BM_edge_select_set_noflush(BMesh *bm, BMEdge *e, bool select)
void _bm_elem_hide_set(BMesh *bm, BMHeader *head, bool hide)
void BM_vert_hide_set(BMVert *v, bool hide)
void BM_mesh_select_mode_clean(BMesh *bm)
void BM_editselection_center(BMEditSelection *ese, float r_center[3])
void _bm_select_history_store_after_notest(BMesh *bm, BMEditSelection *ese_ref, BMHeader *ele)
void BM_select_history_validate(BMesh *bm)
void BM_elem_select_set(BMesh *bm, BMElem *ele, bool select)
void BM_editselection_plane(BMEditSelection *ese, float r_plane[3])
void BM_face_select_set_noflush(BMesh *bm, BMFace *f, bool select)
void BM_editselection_normal(BMEditSelection *ese, float r_normal[3])
void BM_face_select_set(BMesh *bm, BMFace *f, bool select)
Select Face.
void BM_mesh_deselect_flush(BMesh *bm)
void BM_mesh_elem_hflag_enable_all(BMesh *bm, char htype, char hflag, bool respecthide)
int BM_mesh_elem_hflag_count_disabled(BMesh *bm, char htype, char hflag, bool respecthide)
BMVert * BM_mesh_active_vert_get(BMesh *bm)
void BM_mesh_active_face_set(BMesh *bm, BMFace *f)
void _bm_select_history_store(BMesh *bm, BMHeader *ele)
void BM_edge_hide_set(BMEdge *e, bool hide)
BMFace * BM_mesh_active_face_get(BMesh *bm, bool is_sloppy, bool is_selected)
void BM_mesh_elem_hflag_disable_test(BMesh *bm, char htype, char hflag, bool respecthide, bool overwrite, char hflag_test)
eBMSelectionFlushFLags
Definition: bmesh_marking.h:15
@ BM_SELECT_LEN_FLUSH_RECALC_ALL
Definition: bmesh_marking.h:20
@ BM_SELECT_LEN_FLUSH_RECALC_EDGE
Definition: bmesh_marking.h:18
@ BM_SELECT_LEN_FLUSH_RECALC_FACE
Definition: bmesh_marking.h:19
@ BM_SELECT_LEN_FLUSH_RECALC_NOTHING
Definition: bmesh_marking.h:16
@ BM_SELECT_LEN_FLUSH_RECALC_VERT
Definition: bmesh_marking.h:17
struct GHash * BM_select_history_map_create(BMesh *bm)
void BM_face_hide_set(BMFace *f, bool hide)
BMElem * BM_mesh_active_elem_get(BMesh *bm)
ATTR_WARN_UNUSED_RESULT const BMVert const BMEdge * e
ATTR_WARN_UNUSED_RESULT const BMVert * v
struct BMEditSelection * next
Definition: bmesh_marking.h:10
struct BMEditSelection * prev
Definition: bmesh_marking.h:10