45 count->selection_len += 1;
56 count->selection_len += 1;
67 count->selection_len += 1;
72 void *__restrict chunk_join,
73 void *__restrict chunk)
99 const int MIN_ITER_SIZE = 1024;
111 BM_iter_parallel(
bm, iter_type, range_func,
NULL, &settings);
112 return count.selection_len;
154 const BMEdge *e_iter = e_first;
166 static bool bm_vert_is_edge_select_any(
const BMVert *
v)
169 const BMEdge *e_iter, *e_first;
170 e_iter = e_first =
v->
e;
184 const BMEdge *e_iter, *e_first;
185 e_iter = e_first =
v->
e;
197 const BMLoop *l_iter = l_first;
200 while ((l_iter = l_iter->
radial_next) != l_first) {
209 static bool bm_edge_is_face_select_any(
const BMEdge *
e)
212 const BMLoop *l_iter, *l_first;
213 l_iter = l_first =
e->l;
218 }
while ((l_iter = l_iter->
radial_next) != l_first);
227 const BMLoop *l_iter, *l_first;
228 l_iter = l_first =
e->l;
233 }
while ((l_iter = l_iter->
radial_next) != l_first);
293 }
while ((l_iter = l_iter->
next) != l_first);
349 }
while ((l_iter = l_iter->
next) != l_first);
356 if (is_selected && !ok) {
359 else if (ok && !is_selected) {
365 void *__restrict chunk_join,
366 void *__restrict chunk)
455 l_iter = l_first =
e->l;
458 }
while ((l_iter = l_iter->
radial_next) != l_first);
496 }
while ((l_iter = l_iter->
next) != l_first);
558 for (i = 0; i < 2; i++) {
593 }
while ((l_iter = l_iter->
next) != l_first);
614 }
while ((l_iter = l_iter->
next) != l_first);
625 }
while ((l_iter = l_iter->
next) != l_first);
633 }
while ((l_iter = l_iter->
next) != l_first);
642 }
while ((l_iter = l_iter->
next) != l_first);
753 const bool respecthide,
754 const bool test_for_enabled)
799 const bool respecthide)
807 const bool respecthide)
847 for (; ese; ese = ese->
prev) {
962 float vec[3] = {0.0f, 0.0f, 0.0f};
973 if (eve->no[0] < 0.5f) {
976 else if (eve->no[1] < 0.5f) {
986 else if (ese->htype ==
BM_EDGE) {
998 if (eed->
v2->
co[1] > eed->
v1->
co[1]) {
1008 else if (ese->htype ==
BM_FACE) {
1017 "BMEdit Selection");
1090 ese_next = ese->
next;
1111 ese->
ele = ese_last->
ele;
1116 ese->
ele = ese_last->
ele;
1166 switch (ese->ele->head.htype) {
1181 BMElem *ele_dst = ese->ele;
1185 if (ele_dst_next ==
NULL) {
1188 ele_dst = ele_dst_next;
1190 if (
UNLIKELY(ele_dst == ese->ele)) {
1194 if (use_chain ==
false) {
1204 ese_next = ese->next;
1217 const bool respecthide,
1218 const bool overwrite,
1219 const char hflag_test)
1236 (respecthide ==
false) && (hflag_test == 0)) {
1239 for (i = 0; i < 3; i++) {
1244 for (; ele; ele = BM_iter_step(&iter)) {
1252 for (i = 0; i < 3; i++) {
1256 if (htype & flag_types[i]) {
1258 for (; ele; ele = BM_iter_step(&iter)) {
1269 else if (overwrite) {
1285 const bool respecthide,
1286 const bool overwrite,
1287 const char hflag_test)
1309 for (i = 0; i < 3; i++) {
1310 if (htype & flag_types[i]) {
1312 for (; ele; ele = BM_iter_step(&iter)) {
1324 else if (overwrite) {
1339 const bool respecthide)
1348 const bool respecthide)
1385 BMEdge *e_iter, *e_first;
1386 e_iter = e_first =
v->
e;
1390 const BMLoop *l_radial_iter, *l_radial_first;
1391 l_radial_iter = l_radial_first = e_iter->
l;
1394 }
while ((l_radial_iter = l_radial_iter->
radial_next) != l_radial_first);
1409 const BMLoop *l_iter, *l_first;
1410 l_iter = l_first =
e->l;
1413 }
while ((l_iter = l_iter->
radial_next) != l_first);
1445 }
while ((l_iter = l_iter->
next) != l_first);
1450 }
while ((l_iter = l_iter->
next) != l_first);
1460 }
while ((l_iter = l_iter->
next) != l_first);
1468 switch (head->
htype) {
void * BLI_ghash_lookup(const GHash *gh, const void *key) ATTR_WARN_UNUSED_RESULT
void BLI_ghash_insert(GHash *gh, void *key, void *val)
GHash * BLI_ghash_ptr_new(const char *info) ATTR_MALLOC ATTR_WARN_UNUSED_RESULT
BLI_INLINE bool BLI_listbase_is_empty(const struct ListBase *lb)
void BLI_addhead(struct ListBase *listbase, void *vlink) ATTR_NONNULL(1)
#define LISTBASE_FOREACH(type, var, list)
void BLI_freelinkN(struct ListBase *listbase, void *vlink) ATTR_NONNULL(1)
void BLI_insertlinkafter(struct ListBase *listbase, void *vprevlink, void *vnewlink) ATTR_NONNULL(1)
void void BLI_freelistN(struct ListBase *listbase) ATTR_NONNULL(1)
void BLI_addtail(struct ListBase *listbase, void *vlink) ATTR_NONNULL(1)
void * BLI_findptr(const struct ListBase *listbase, const void *ptr, int offset) ATTR_WARN_UNUSED_RESULT ATTR_NONNULL(1)
MINLINE float normalize_v3(float r[3])
MINLINE void sub_v3_v3v3(float r[3], const float a[3], const float b[3])
MINLINE void copy_v3_v3(float r[3], const float a[3])
MINLINE void add_v3_v3v3(float r[3], const float a[3], const float b[3])
MINLINE void cross_v3_v3v3(float r[3], const float a[3], const float b[3])
void mid_v3_v3v3(float r[3], const float a[3], const float b[3])
struct MempoolIterData MempoolIterData
BLI_INLINE void BLI_parallel_range_settings_defaults(TaskParallelSettings *settings)
void(* TaskParallelMempoolFunc)(void *userdata, MempoolIterData *iter, const TaskParallelTLS *__restrict tls)
#define SCE_SELECT_VERTEX
Read Guarded memory(de)allocation.
__forceinline const avxb select(const avxb &m, const avxb &t, const avxb &f)
#define BM_FACE_FIRST_LOOP(p)
#define BM_elem_flag_disable(ele, hflag)
#define BM_elem_flag_set(ele, hflag, val)
#define BM_elem_flag_test(ele, hflag)
#define BM_elem_flag_test_bool(ele, hflag)
#define BM_elem_flag_enable(ele, hflag)
#define BM_ITER_MESH(ele, iter, bm, itype)
BMIterType
BMesh Iterators.
#define BM_iter_new(iter, bm, itype, data)
ATTR_WARN_UNUSED_RESULT BMesh * bm
static TaskParallelMempoolFunc recount_totsels_get_range_func(BMIterType iter_type)
void BM_select_history_clear(BMesh *bm)
static void bm_mesh_select_mode_flush_reduce_fn(const void *__restrict UNUSED(userdata), void *__restrict chunk_join, void *__restrict chunk)
BMEdge * BM_mesh_active_edge_get(BMesh *bm)
static void vert_flush_hide_set(BMVert *v)
struct SelectionCountChunkData SelectionCountChunkData
void _bm_elem_hide_set(BMesh *bm, BMHeader *head, const bool hide)
struct SelectionFlushChunkData SelectionFlushChunkData
bool _bm_select_history_check(BMesh *bm, const BMHeader *ele)
void _bm_select_history_store_head_notest(BMesh *bm, BMHeader *ele)
static void recount_totsels_range_face_func(void *UNUSED(userdata), MempoolIterData *iter, const TaskParallelTLS *__restrict tls)
void BM_vert_hide_set(BMVert *v, const bool hide)
void BM_mesh_elem_hflag_enable_all(BMesh *bm, const char htype, const char hflag, const bool respecthide)
static bool bm_edge_is_face_visible_any(const BMEdge *e)
void BM_mesh_select_mode_flush(BMesh *bm)
int BM_mesh_elem_hflag_count_disabled(BMesh *bm, const char htype, const char hflag, const bool respecthide)
void BM_mesh_select_mode_set(BMesh *bm, int selectmode)
void BM_face_select_set(BMesh *bm, BMFace *f, const bool select)
Select Face.
static bool bm_vert_is_edge_visible_any(const BMVert *v)
void BM_elem_select_set(BMesh *bm, BMElem *ele, const bool select)
void BM_mesh_select_flush(BMesh *bm)
static bool recount_totsels_are_ok(BMesh *bm)
static void recount_totsels_reduce(const void *__restrict UNUSED(userdata), void *__restrict chunk_join, void *__restrict chunk)
bool _bm_select_history_remove(BMesh *bm, BMHeader *ele)
static void recount_totsels(BMesh *bm)
void _bm_select_history_store_head(BMesh *bm, BMHeader *ele)
static void recount_totsels_range_vert_func(void *UNUSED(userdata), MempoolIterData *iter, const TaskParallelTLS *__restrict tls)
void BM_mesh_select_mode_clean_ex(BMesh *bm, const short selectmode)
Select Mode Clean.
static void bm_mesh_select_mode_flush_vert_to_edge(BMesh *bm)
static bool bm_vert_is_edge_select_any_other(const BMVert *v, const BMEdge *e_first)
void _bm_select_history_store_after(BMesh *bm, BMEditSelection *ese_ref, BMHeader *ele)
static BMEditSelection * bm_select_history_create(BMHeader *ele)
void BM_mesh_select_mode_flush_ex(BMesh *bm, const short selectmode, eBMSelectionFlushFLags flags)
Select Mode Flush.
static bool bm_edge_is_face_select_any_other(BMLoop *l_first)
void _bm_select_history_store_notest(BMesh *bm, BMHeader *ele)
GHash * BM_select_history_map_create(BMesh *bm)
static int recount_totsel(BMesh *bm, BMIterType iter_type)
static void recount_totsels_range_edge_func(void *UNUSED(userdata), MempoolIterData *iter, const TaskParallelTLS *__restrict tls)
void BM_mesh_select_mode_clean(BMesh *bm)
void BM_editselection_center(BMEditSelection *ese, float r_center[3])
void BM_vert_select_set(BMesh *bm, BMVert *v, const bool select)
Select Vert.
void BM_mesh_elem_hflag_disable_test(BMesh *bm, const char htype, const char hflag, const bool respecthide, const bool overwrite, const char hflag_test)
void _bm_select_history_store_after_notest(BMesh *bm, BMEditSelection *ese_ref, BMHeader *ele)
void BM_edge_select_set(BMesh *bm, BMEdge *e, const bool select)
Select Edge.
void BM_select_history_validate(BMesh *bm)
void BM_editselection_plane(BMEditSelection *ese, float r_plane[3])
void BM_edge_select_set_noflush(BMesh *bm, BMEdge *e, const bool select)
void BM_editselection_normal(BMEditSelection *ese, float r_normal[3])
void BM_mesh_deselect_flush(BMesh *bm)
static void edge_flush_hide_set(BMEdge *e)
void BM_edge_hide_set(BMEdge *e, const bool hide)
static void bm_mesh_select_mode_flush_edge_to_face(BMesh *bm)
void BM_mesh_elem_hflag_disable_all(BMesh *bm, const char htype, const char hflag, const bool respecthide)
BMVert * BM_mesh_active_vert_get(BMesh *bm)
static void bm_mesh_select_mode_flush_vert_to_edge_iter_fn(void *UNUSED(userdata), MempoolIterData *iter, const TaskParallelTLS *__restrict tls)
static int bm_mesh_flag_count(BMesh *bm, const char htype, const char hflag, const bool respecthide, const bool test_for_enabled)
void BM_mesh_active_face_set(BMesh *bm, BMFace *f)
void _bm_select_history_store(BMesh *bm, BMHeader *ele)
BMFace * BM_mesh_active_face_get(BMesh *bm, const bool is_sloppy, const bool is_selected)
static void recount_totvertsel(BMesh *bm)
void BM_select_history_merge_from_targetmap(BMesh *bm, GHash *vert_map, GHash *edge_map, GHash *face_map, const bool use_chain)
void BM_face_select_set_noflush(BMesh *bm, BMFace *f, const bool select)
static void recount_totedgesel(BMesh *bm)
bool BM_select_history_active_get(BMesh *bm, BMEditSelection *ese)
static void bm_mesh_select_mode_flush_edge_to_face_iter_fn(void *UNUSED(userdata), MempoolIterData *iter, const TaskParallelTLS *__restrict tls)
void BM_face_hide_set(BMFace *f, const bool hide)
int BM_mesh_elem_hflag_count_enabled(BMesh *bm, const char htype, const char hflag, const bool respecthide)
void BM_mesh_elem_hflag_enable_test(BMesh *bm, const char htype, const char hflag, const bool respecthide, const bool overwrite, const char hflag_test)
static void recount_totfacesel(BMesh *bm)
BMElem * BM_mesh_active_elem_get(BMesh *bm)
#define BM_select_history_store_notest(bm, ele)
#define BM_select_history_store_head_notest(bm, ele)
#define BM_select_history_store_after_notest(bm, ese_ref, ele)
#define BM_select_history_check(bm, ele)
@ BM_SELECT_LEN_FLUSH_RECALC_ALL
@ BM_SELECT_LEN_FLUSH_RECALC_EDGE
@ BM_SELECT_LEN_FLUSH_RECALC_FACE
@ BM_SELECT_LEN_FLUSH_RECALC_VERT
void BM_face_calc_center_median(const BMFace *f, float r_cent[3])
void BM_face_calc_tangent_auto(const BMFace *f, float r_tangent[3])
#define BM_ELEM_API_FLAG_DISABLE(element, f)
#define BM_ELEM_API_FLAG_TEST(element, f)
#define BM_ELEM_API_FLAG_ENABLE(element, f)
BLI_INLINE bool BM_edge_is_boundary(const BMEdge *e) ATTR_WARN_UNUSED_RESULT ATTR_NONNULL()
ATTR_WARN_UNUSED_RESULT const BMVert const BMEdge * e
ATTR_WARN_UNUSED_RESULT const BMVert * v
BLI_INLINE BMEdge * bmesh_disk_edge_next(const BMEdge *e, const BMVert *v) ATTR_WARN_UNUSED_RESULT ATTR_NONNULL()
SyclQueue void void * src
void *(* MEM_callocN)(size_t len, const char *str)
SocketIndexByIdentifierMap * map
struct BMEditSelection * next
struct BMEditSelection * prev
struct BMLoop * radial_next
TaskParallelReduceFunc func_reduce
size_t userdata_chunk_size