51 #define USE_FACE_SUBSTITUTE
58 const bool calc_single_islands,
59 const bool calc_island_center,
60 const bool calc_island_axismtx,
71 int *groups_array =
NULL;
72 int(*group_index)[2] =
NULL;
75 if (has_only_single_islands && !calc_single_islands) {
85 if (!has_only_single_islands) {
104 if (calc_island_center) {
108 if (calc_island_axismtx) {
120 for (i = 0; i <
data.island_tot; i++) {
123 const int fg_sta = group_index[i][0];
124 const int fg_len = group_index[i][1];
125 float co[3], no[3], tangent[3];
138 for (j = 0; j < fg_len; j++) {
139 ese.
ele = ele_array[groups_array[fg_sta + j]];
148 float tmp_no[3], tmp_tangent[3];
192 if (calc_single_islands) {
195 int group_tot_single = 0;
199 group_tot_single += 1;
203 if (group_tot_single != 0) {
204 if (calc_island_center) {
206 sizeof(*
data.center) * (
data.island_tot + group_tot_single));
208 if (calc_island_axismtx) {
210 sizeof(*
data.axismtx) * (
data.island_tot + group_tot_single));
215 data.island_vert_map[i] =
data.island_tot;
229 data.island_tot += 1;
235 *r_island_data =
data;
240 if (island_data->
center) {
264 const float mtx[3][3])
272 if (dists[i0] <= dists[
i1]) {
282 if (dists[i0] <= dists[i2]) {
286 float vm0[3], vm1[3], vm2[3];
302 if (dist0 < dists[i0]) {
305 index[i0] = index[
i1];
317 if (edge->
l ==
NULL) {
338 const float mtx[3][3],
400 if (dists[
i1] != FLT_MAX || dists[i2] != FLT_MAX) {
418 if (dists[
i1] > dists[i2]) {
450 BMVert *v_other = l_other->v;
475 for (
LinkNode *lnk = queue_next; lnk; lnk = lnk->
next) {
476 BMEdge *e_link = lnk->link;
498 #define TRANSFORM_MAXDIST_MIRROR 0.00002f
502 if (quadrant[0] && ((co[0] * quadrant[0]) < -
epsilon)) {
505 if (quadrant[1] && ((co[1] * quadrant[1]) < -
epsilon)) {
508 if (quadrant[2] && ((co[2] * quadrant[2]) < -
epsilon)) {
515 const bool use_select,
516 const bool use_topology,
517 const bool mirror_axis[3],
527 vert_map =
MEM_callocN(totvert *
sizeof(*vert_map), __func__);
529 float select_sum[3] = {0};
542 for (
int a = 0;
a < 3;
a++) {
543 if (mirror_axis[
a]) {
544 quadrant[
a] = select_sum[
a] >= 0.0f ? 1 : -1;
551 uint mirror_elem_len = 0;
553 bool is_single_mirror_axis = (mirror_axis[0] + mirror_axis[1] + mirror_axis[2]) == 1;
554 bool test_selected_only = use_select && is_single_mirror_axis;
555 for (
int a = 0;
a < 3;
a++) {
556 if (!mirror_axis[
a]) {
560 index[
a] =
MEM_mallocN(totvert *
sizeof(*index[
a]), __func__);
566 int i_mirr = index[
a][i];
579 if (vert_map[i_mirr].flag != 0) {
590 if (!mirror_elem_len) {
594 else if (!is_single_mirror_axis) {
596 for (
int a = 0;
a < 3;
a++) {
597 if (!mirror_axis[
a]) {
602 for (i = 0; i < totvert; i++) {
603 int i_mirr = index[
a][i];
607 if (vert_map[i].index != -1 && !(vert_map[i].flag & flag)) {
608 if (vert_map[i_mirr].index == -1) {
612 vert_map[i_mirr].
flag |= vert_map[i].
flag | flag;
662 t->depsgraph, scene_eval, obedit_eval, em_eval, &defmats, &defcos);
670 if ((totleft > 0) || (totleft == -1))
688 r_crazyspace_data->
quats = quats;
689 r_crazyspace_data->
defmats = defmats;
693 const float smtx[3][3],
694 const float defmat[3][3],
699 if (quat || defmat) {
700 float mat[3][3], qmat[3][3], imat[3][3];
730 if (r_crazyspace_data->
quats) {
733 if (r_crazyspace_data->
defmats) {
745 const int island_index,
749 if (island_data->
center && island_index != -1) {
765 const int island_index)
788 if ((island_index != -1) && island_data->
axismtx) {
819 Mesh *me = tc->obedit->data;
823 float mtx[3][3], smtx[3][3];
871 if (is_island_center) {
878 const bool calc_island_center = !is_snap_rotate;
884 em, calc_single_islands, calc_island_center, calc_island_axismtx, &island_data);
894 int *dists_index =
NULL;
898 if (is_island_center) {
905 if (tc->use_mirror_axis_any) {
908 const bool mirror_axis[3] = {
909 tc->use_mirror_axis_x, tc->use_mirror_axis_y, tc->use_mirror_axis_z};
911 em, use_select, use_topology, mirror_axis, &mirror_data);
933 tc->data_len = data_len;
944 int cd_vert_bweight_offset = -1;
957 int island_index = -1;
959 const int connected_index = (dists_index && dists_index[
a] != -1) ? dists_index[
a] :
a;
971 td_mirror->extra = eve;
972 td_mirror->loc = eve->
co;
981 float *bweight = (cd_vert_bweight_offset != -1) ?
999 tob->
dist = dists[
a];
1003 tob->
dist = FLT_MAX;
1013 crazyspace_data.
quats[
a] :
1017 if (tc->use_mirror_axis_any) {
1109 #ifdef USE_FACE_SUBSTITUTE
1111 # define FACE_SUBSTITUTE_INDEX INT_MIN
1124 BMFace *f_test = l_radial_next->
f;
1140 if (best_face ==
NULL) {
1158 BMLoop *l_iter, *l_first;
1162 }
while ((l_iter = l_iter->
next) != l_first);
1170 *((
BMFace **)&f_copy->
no[0]) = f_substitute_copy;
1177 return *((
BMFace **)&f_copy->
no[0]);
1190 float *loop_weights;
1194 l_num = liter.
count;
1196 for (j = 0; j < l_num; j++) {
1197 BMLoop *
l = BM_iter_step(&liter);
1205 #ifdef USE_FACE_SUBSTITUTE
1218 loop_weights[j] = 0.0f;
1232 bm,
v, layer_nr, loop_weights, tcld->
arena);
1251 .use_toolflags =
false,
1275 int layer_math_map_len = 0;
1278 customdatalayer_map[layer_math_map_len++] = i;
1292 const bool use_merge_group)
1333 for (
int j = tc->
data_len; j--; tob++, i++) {
1357 else if (
ELEM(
t->mode,
1391 return td ? td->iloc :
v->
co;
1397 bool do_loop_mdisps)
1401 const float *co_orig_3d = td->iloc;
1405 float *loop_weights;
1408 const float *v_proj_axis =
v->
no;
1412 if (do_loop_weight) {
1418 l_num = liter.
count;
1420 for (j = 0; j < l_num; j++) {
1422 BMLoop *
l = BM_iter_step(&liter);
1426 #ifdef USE_FACE_SUBSTITUTE
1439 if (do_loop_weight) {
1440 const float eps = 1.0e-8f;
1456 ((l_prev = l_prev->
prev) !=
l->
next))) {
1462 ((l_next = l_next->
next) !=
l->
prev))) {
1467 if (co_prev_ok && co_next_ok) {
1471 loop_weights[j] = (dist >= 0.0f) ? 1.0f : ((dist <= -
eps) ? 0.0f : (1.0f + (dist /
eps)));
1473 loop_weights[j] = 0.0f;
1477 loop_weights[j] = 0.0f;
1485 if (do_loop_weight) {
1505 const bool update_loop_mdisps = is_moved && do_loop_mdisps && (tcld->
cd_loop_mdisp_offset != -1);
1506 if (update_loop_mdisps) {
1516 float f_copy_center[3];
1527 faces_center[j_other],
1538 if (!tc->custom.type.data) {
1546 for (
int i = tc->data_len; i--; tob++) {
1549 if (use_merge_group) {
1555 for (
int i = tc->data_mirror_len; i--; td_mirror++) {
1558 if (use_merge_group) {
1582 BMLoop *l_iter, *l_first, *l_copy;
1588 l_copy = l_copy->
next;
1589 }
while ((l_iter = l_iter->
next) != l_first);
1603 if (tc->use_mirror_axis_any) {
1606 for (i = 0, td = tc->data; i < tc->
data_len; i++, td++) {
1621 for (i = 0; i < tc->data_mirror_len; i++, td_mirror++) {
1624 td_mirror->loc[0] *= -1;
1627 td_mirror->loc[1] *= -1;
1630 td_mirror->loc[2] *= -1;
1641 if (!is_canceling) {
1680 if (use_automerge) {
1687 if (tc->use_mirror_axis_any) {
1693 for (
int i = tc->data_mirror_len; i--; td_mirror++) {
1705 tc->obedit,
true,
true,
true, hflag,
t->scene->toolsettings->doublimit);
1708 EDBM_automerge(tc->obedit,
true, hflag,
t->scene->toolsettings->doublimit);
typedef float(TangentPoint)[2]
struct Main * CTX_data_main(const bContext *C)
void BKE_crazyspace_set_quats_editmesh(struct BMEditMesh *em, float(*origcos)[3], float(*mappedcos)[3], float(*quats)[4], const bool use_select)
int BKE_crazyspace_get_first_deform_matrices_editbmesh(struct Depsgraph *depsgraph, struct Scene *, struct Object *, struct BMEditMesh *em, float(**deformmats)[3][3], float(**deformcos)[3])
float(* BKE_crazyspace_get_mapped_editverts(struct Depsgraph *depsgraph, struct Object *obedit))[3]
bool CustomData_has_math(const struct CustomData *data)
bool CustomData_has_layer(const struct CustomData *data, int type)
bool CustomData_layer_has_math(const struct CustomData *data, int layer_n)
int CustomData_get_offset(const struct CustomData *data, int type)
void BKE_editmesh_looptri_calc(BMEditMesh *em)
BMEditMesh * BKE_editmesh_from_object(struct Object *ob)
Return the BMEditMesh for a given object.
struct Mesh * BKE_mesh_from_object(struct Object *ob)
bool BKE_modifiers_is_correctable_deformed(const struct Scene *scene, struct Object *ob)
int BKE_modifiers_get_cage_index(const struct Scene *scene, struct Object *ob, int *r_lastPossibleCageIndex, bool is_virtual)
void BKE_scene_graph_evaluated_ensure(struct Depsgraph *depsgraph, struct Main *bmain)
#define BLI_array_alloca(arr, realsize)
BLI_INLINE void * BLI_ghashIterator_getKey(GHashIterator *ghi) ATTR_WARN_UNUSED_RESULT
BLI_INLINE void * BLI_ghashIterator_getValue(GHashIterator *ghi) ATTR_WARN_UNUSED_RESULT
#define GHASH_ITER(gh_iter_, ghash_)
void BLI_ghash_insert(GHash *gh, void *key, void *val)
void BLI_ghash_free(GHash *gh, GHashKeyFreeFP keyfreefp, GHashValFreeFP valfreefp)
GHash * BLI_ghash_ptr_new_ex(const char *info, const unsigned int nentries_reserve) ATTR_MALLOC ATTR_WARN_UNUSED_RESULT
GHash * BLI_ghash_ptr_new(const char *info) ATTR_MALLOC ATTR_WARN_UNUSED_RESULT
bool BLI_ghash_ensure_p(GHash *gh, void *key, void ***r_val) ATTR_WARN_UNUSED_RESULT
void * BLI_ghash_lookup(GHash *gh, const void *key) ATTR_WARN_UNUSED_RESULT
BLI_LINKSTACK_*** wrapper macros for using a LinkNode to store a stack of pointers,...
#define BLI_LINKSTACK_PUSH(var, ptr)
#define BLI_LINKSTACK_DECLARE(var, type)
#define BLI_LINKSTACK_SIZE(var)
#define BLI_LINKSTACK_FREE(var)
#define BLI_LINKSTACK_INIT(var)
#define BLI_LINKSTACK_POP(var)
#define BLI_LINKSTACK_SWAP(var_a, var_b)
void axis_dominant_v3_to_m3(float r_mat[3][3], const float normal[3])
Normal to x,y matrix.
float geodesic_distance_propagate_across_triangle(const float v0[3], const float v1[3], const float v2[3], const float dist1, const float dist2)
float dist_signed_squared_to_corner_v3v3v3(const float p[3], const float v1[3], const float v2[3], const float v3[3], const float axis_ref[3])
void mul_m3_v3(const float M[3][3], float r[3])
void copy_m3_m3(float m1[3][3], const float m2[3][3])
void unit_m3(float m[3][3])
void copy_m3_m4(float m1[3][3], const float m2[4][4])
#define PSEUDOINVERSE_EPSILON
bool invert_m3_m3(float R[3][3], const float A[3][3])
bool invert_m3(float R[3][3])
void mul_v3_m3v3(float r[3], const float M[3][3], const float a[3])
#define mul_m3_series(...)
void mul_m3_m3m3(float R[3][3], const float A[3][3], const float B[3][3])
void pseudoinverse_m3_m3(float Ainv[3][3], const float A[3][3], float epsilon)
void quat_to_mat3(float mat[3][3], const float q[4])
void copy_vn_i(int *array_tar, const int size, const int val)
MINLINE float normalize_v3(float r[3])
MINLINE float len_squared_v3v3(const float a[3], const float b[3]) ATTR_WARN_UNUSED_RESULT
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 bool is_zero_v3(const float a[3]) ATTR_WARN_UNUSED_RESULT
void project_plane_normalized_v3_v3v3(float out[3], const float p[3], const float v_plane[3])
MINLINE void zero_v3(float r[3])
float angle_v3v3v3(const float a[3], const float b[3], const float c[3]) ATTR_WARN_UNUSED_RESULT
MINLINE void mul_v3_v3fl(float r[3], const float a[3], float f)
MINLINE void add_v3_v3(float r[3], const float a[3])
MINLINE float len_v3(const float a[3]) ATTR_WARN_UNUSED_RESULT
void BLI_memarena_free(struct MemArena *ma) ATTR_NONNULL(1)
#define BLI_MEMARENA_STD_BUFSIZE
void * BLI_memarena_alloc(struct MemArena *ma, size_t size) ATTR_WARN_UNUSED_RESULT ATTR_NONNULL(1) ATTR_MALLOC ATTR_ALLOC_SIZE(2)
struct MemArena * BLI_memarena_new(const size_t bufsize, const char *name) ATTR_WARN_UNUSED_RESULT ATTR_NONNULL(2) ATTR_MALLOC
void DEG_id_tag_update(struct ID *id, int flag)
struct ID * DEG_get_evaluated_id(const struct Depsgraph *depsgraph, struct ID *id)
#define UVCALC_TRANSFORM_CORRECT_SLIDE
#define SCE_SELECT_VERTEX
#define UVCALC_TRANSFORM_CORRECT_KEEP_CONNECTED
#define UVCALC_TRANSFORM_CORRECT
@ V3D_AROUND_LOCAL_ORIGINS
void EDBM_selectmode_flush_ex(struct BMEditMesh *em, const short selectmode)
void EDBM_automerge_and_split(struct Object *ob, const bool split_edges, const bool split_faces, const bool update, const char hflag, const float dist)
void EDBM_automerge(struct Object *ob, bool update, const char hflag, const float dist)
void EDBM_verts_mirror_cache_begin_ex(struct BMEditMesh *em, const int axis, const bool use_self, const bool use_select, const bool respecthide, const bool use_topology, float maxdist, int *r_index)
void ED_mesh_mirror_spatial_table_end(struct Object *ob)
void EDBM_mesh_normals_update(struct BMEditMesh *em)
_GL_VOID GLfloat value _GL_VOID_RET _GL_VOID const GLuint GLboolean *residences _GL_BOOL_RET _GL_VOID GLsizei GLfloat GLfloat GLfloat GLfloat const GLubyte *bitmap _GL_VOID_RET _GL_VOID GLenum const void *lists _GL_VOID_RET _GL_VOID const GLdouble *equation _GL_VOID_RET _GL_VOID GLdouble GLdouble blue _GL_VOID_RET _GL_VOID GLfloat GLfloat blue _GL_VOID_RET _GL_VOID GLint GLint blue _GL_VOID_RET _GL_VOID GLshort GLshort blue _GL_VOID_RET _GL_VOID GLubyte GLubyte blue _GL_VOID_RET _GL_VOID GLuint GLuint blue _GL_VOID_RET _GL_VOID GLushort GLushort blue _GL_VOID_RET _GL_VOID GLbyte GLbyte GLbyte alpha _GL_VOID_RET _GL_VOID GLdouble GLdouble GLdouble alpha _GL_VOID_RET _GL_VOID GLfloat GLfloat GLfloat alpha _GL_VOID_RET _GL_VOID GLint GLint GLint alpha _GL_VOID_RET _GL_VOID GLshort GLshort GLshort alpha _GL_VOID_RET _GL_VOID GLubyte GLubyte GLubyte alpha _GL_VOID_RET _GL_VOID GLuint GLuint GLuint alpha _GL_VOID_RET _GL_VOID GLushort GLushort GLushort alpha _GL_VOID_RET _GL_VOID GLenum mode _GL_VOID_RET _GL_VOID GLint GLsizei GLsizei GLenum type _GL_VOID_RET _GL_VOID GLsizei GLenum GLenum const void *pixels _GL_VOID_RET _GL_VOID const void *pointer _GL_VOID_RET _GL_VOID GLdouble v _GL_VOID_RET _GL_VOID GLfloat v _GL_VOID_RET _GL_VOID GLint i1
_GL_VOID GLfloat value _GL_VOID_RET _GL_VOID const GLuint GLboolean *residences _GL_BOOL_RET _GL_VOID GLsizei GLfloat GLfloat GLfloat GLfloat const GLubyte *bitmap _GL_VOID_RET _GL_VOID GLenum const void *lists _GL_VOID_RET _GL_VOID const GLdouble *equation _GL_VOID_RET _GL_VOID GLdouble GLdouble blue _GL_VOID_RET _GL_VOID GLfloat GLfloat blue _GL_VOID_RET _GL_VOID GLint GLint blue _GL_VOID_RET _GL_VOID GLshort GLshort blue _GL_VOID_RET _GL_VOID GLubyte GLubyte blue _GL_VOID_RET _GL_VOID GLuint GLuint blue _GL_VOID_RET _GL_VOID GLushort GLushort blue _GL_VOID_RET _GL_VOID GLbyte GLbyte GLbyte alpha _GL_VOID_RET _GL_VOID GLdouble GLdouble GLdouble alpha _GL_VOID_RET _GL_VOID GLfloat GLfloat GLfloat alpha _GL_VOID_RET _GL_VOID GLint GLint GLint alpha _GL_VOID_RET _GL_VOID GLshort GLshort GLshort alpha _GL_VOID_RET _GL_VOID GLubyte GLubyte GLubyte alpha _GL_VOID_RET _GL_VOID GLuint GLuint GLuint alpha _GL_VOID_RET _GL_VOID GLushort GLushort GLushort alpha _GL_VOID_RET _GL_VOID GLenum mode _GL_VOID_RET _GL_VOID GLint GLsizei GLsizei GLenum type _GL_VOID_RET _GL_VOID GLsizei GLenum GLenum const void *pixels _GL_VOID_RET _GL_VOID const void *pointer _GL_VOID_RET _GL_VOID GLdouble v _GL_VOID_RET _GL_VOID GLfloat v _GL_VOID_RET _GL_VOID GLint GLint i2 _GL_VOID_RET _GL_VOID GLint j _GL_VOID_RET _GL_VOID GLfloat param _GL_VOID_RET _GL_VOID GLint param _GL_VOID_RET _GL_VOID GLdouble GLdouble GLdouble GLdouble GLdouble zFar _GL_VOID_RET _GL_UINT GLdouble *equation _GL_VOID_RET _GL_VOID GLenum GLint *params _GL_VOID_RET _GL_VOID GLenum GLfloat *v _GL_VOID_RET _GL_VOID GLenum GLfloat *params _GL_VOID_RET _GL_VOID GLfloat *values _GL_VOID_RET _GL_VOID GLushort *values _GL_VOID_RET _GL_VOID GLenum GLfloat *params _GL_VOID_RET _GL_VOID GLenum GLdouble *params _GL_VOID_RET _GL_VOID GLenum GLint *params _GL_VOID_RET _GL_VOID GLsizei const void *pointer _GL_VOID_RET _GL_VOID GLsizei const void *pointer _GL_VOID_RET _GL_BOOL GLfloat param _GL_VOID_RET _GL_VOID GLint param _GL_VOID_RET _GL_VOID GLenum GLfloat param _GL_VOID_RET _GL_VOID GLenum GLint param _GL_VOID_RET _GL_VOID GLushort pattern _GL_VOID_RET _GL_VOID GLdouble GLdouble GLint GLint const GLdouble *points _GL_VOID_RET _GL_VOID GLdouble GLdouble GLint GLint GLdouble GLdouble GLint GLint const GLdouble *points _GL_VOID_RET _GL_VOID GLdouble GLdouble u2 _GL_VOID_RET _GL_VOID GLdouble GLdouble GLint GLdouble GLdouble v2 _GL_VOID_RET _GL_VOID GLenum GLfloat param _GL_VOID_RET _GL_VOID GLenum GLint param _GL_VOID_RET _GL_VOID GLenum mode _GL_VOID_RET _GL_VOID GLdouble GLdouble nz _GL_VOID_RET _GL_VOID GLfloat GLfloat nz _GL_VOID_RET _GL_VOID GLint GLint nz _GL_VOID_RET _GL_VOID GLshort GLshort nz _GL_VOID_RET _GL_VOID GLsizei const void *pointer _GL_VOID_RET _GL_VOID GLsizei const GLfloat *values _GL_VOID_RET _GL_VOID GLsizei const GLushort *values _GL_VOID_RET _GL_VOID GLint param _GL_VOID_RET _GL_VOID const GLuint const GLclampf *priorities _GL_VOID_RET _GL_VOID GLdouble y _GL_VOID_RET _GL_VOID GLfloat y _GL_VOID_RET _GL_VOID GLint y _GL_VOID_RET _GL_VOID GLshort y _GL_VOID_RET _GL_VOID GLdouble GLdouble z _GL_VOID_RET _GL_VOID GLfloat GLfloat z _GL_VOID_RET _GL_VOID GLint GLint z _GL_VOID_RET _GL_VOID GLshort GLshort z _GL_VOID_RET _GL_VOID GLdouble GLdouble GLdouble w _GL_VOID_RET _GL_VOID GLfloat GLfloat GLfloat w _GL_VOID_RET _GL_VOID GLint GLint GLint w _GL_VOID_RET _GL_VOID GLshort GLshort GLshort w _GL_VOID_RET _GL_VOID GLdouble GLdouble GLdouble y2 _GL_VOID_RET _GL_VOID GLfloat GLfloat GLfloat y2 _GL_VOID_RET _GL_VOID GLint GLint GLint y2 _GL_VOID_RET _GL_VOID GLshort GLshort GLshort y2 _GL_VOID_RET _GL_VOID GLdouble GLdouble GLdouble z _GL_VOID_RET _GL_VOID GLdouble GLdouble z _GL_VOID_RET _GL_VOID GLuint *buffer _GL_VOID_RET _GL_VOID GLdouble t _GL_VOID_RET _GL_VOID GLfloat t _GL_VOID_RET _GL_VOID GLint t _GL_VOID_RET _GL_VOID GLshort t _GL_VOID_RET _GL_VOID GLdouble t
_GL_VOID GLfloat value _GL_VOID_RET _GL_VOID const GLuint GLboolean *residences _GL_BOOL_RET _GL_VOID GLsizei GLfloat GLfloat GLfloat GLfloat const GLubyte *bitmap _GL_VOID_RET _GL_VOID GLenum const void *lists _GL_VOID_RET _GL_VOID const GLdouble *equation _GL_VOID_RET _GL_VOID GLdouble GLdouble blue _GL_VOID_RET _GL_VOID GLfloat GLfloat blue _GL_VOID_RET _GL_VOID GLint GLint blue _GL_VOID_RET _GL_VOID GLshort GLshort blue _GL_VOID_RET _GL_VOID GLubyte GLubyte blue _GL_VOID_RET _GL_VOID GLuint GLuint blue _GL_VOID_RET _GL_VOID GLushort GLushort blue _GL_VOID_RET _GL_VOID GLbyte GLbyte GLbyte alpha _GL_VOID_RET _GL_VOID GLdouble GLdouble GLdouble alpha _GL_VOID_RET _GL_VOID GLfloat GLfloat GLfloat alpha _GL_VOID_RET _GL_VOID GLint GLint GLint alpha _GL_VOID_RET _GL_VOID GLshort GLshort GLshort alpha _GL_VOID_RET _GL_VOID GLubyte GLubyte GLubyte alpha _GL_VOID_RET _GL_VOID GLuint GLuint GLuint alpha _GL_VOID_RET _GL_VOID GLushort GLushort GLushort alpha _GL_VOID_RET _GL_VOID GLenum mode _GL_VOID_RET _GL_VOID GLint GLsizei GLsizei GLenum type _GL_VOID_RET _GL_VOID GLsizei GLenum GLenum const void *pixels _GL_VOID_RET _GL_VOID const void *pointer _GL_VOID_RET _GL_VOID GLdouble v _GL_VOID_RET _GL_VOID GLfloat v _GL_VOID_RET _GL_VOID GLint GLint i2 _GL_VOID_RET _GL_VOID GLint j _GL_VOID_RET _GL_VOID GLfloat param _GL_VOID_RET _GL_VOID GLint param _GL_VOID_RET _GL_VOID GLdouble GLdouble GLdouble GLdouble GLdouble zFar _GL_VOID_RET _GL_UINT GLdouble *equation _GL_VOID_RET _GL_VOID GLenum GLint *params _GL_VOID_RET _GL_VOID GLenum GLfloat *v _GL_VOID_RET _GL_VOID GLenum GLfloat *params _GL_VOID_RET _GL_VOID GLfloat *values _GL_VOID_RET _GL_VOID GLushort *values _GL_VOID_RET _GL_VOID GLenum GLfloat *params _GL_VOID_RET _GL_VOID GLenum GLdouble *params _GL_VOID_RET _GL_VOID GLenum GLint *params _GL_VOID_RET _GL_VOID GLsizei const void *pointer _GL_VOID_RET _GL_VOID GLsizei const void *pointer _GL_VOID_RET _GL_BOOL GLfloat param _GL_VOID_RET _GL_VOID GLint param _GL_VOID_RET _GL_VOID GLenum GLfloat param _GL_VOID_RET _GL_VOID GLenum GLint param _GL_VOID_RET _GL_VOID GLushort pattern _GL_VOID_RET _GL_VOID GLdouble GLdouble GLint GLint const GLdouble *points _GL_VOID_RET _GL_VOID GLdouble GLdouble GLint GLint GLdouble v1
Read Guarded memory(de)allocation.
#define MEM_reallocN(vmemh, len)
#define BM_FACE_FIRST_LOOP(p)
#define BM_ELEM_CD_GET_VOID_P(ele, offset)
void BM_elem_attrs_copy(BMesh *bm_src, BMesh *bm_dst, const void *ele_src, void *ele_dst)
void BM_mesh_copy_init_customdata_all_layers(BMesh *bm_dst, BMesh *bm_src, const char htype, const BMAllocTemplate *allocsize)
BMFace * BM_face_copy(BMesh *bm_dst, BMesh *bm_src, BMFace *f, const bool copy_verts, const bool copy_edges)
#define BM_elem_index_get(ele)
#define BM_elem_flag_disable(ele, hflag)
#define BM_elem_flag_set(ele, hflag, val)
#define BM_elem_index_set(ele, index)
#define BM_elem_flag_test(ele, hflag)
#define BM_elem_flag_enable(ele, hflag)
LinkNode * BM_vert_loop_groups_data_layer_create(BMesh *bm, BMVert *v, const int layer_n, const float *loop_weights, MemArena *arena)
void BM_face_interp_multires_ex(BMesh *bm, BMFace *f_dst, const BMFace *f_src, const float f_dst_center[3], const float f_src_center[3], const int cd_loop_mdisp_offset)
void BM_vert_loop_groups_data_layer_merge(BMesh *bm, LinkNode *groups, const int layer_n)
void BM_vert_loop_groups_data_layer_merge_weights(BMesh *bm, LinkNode *groups, const int layer_n, const float *loop_weights)
void BM_loop_interp_from_face(BMesh *bm, BMLoop *l_dst, const BMFace *f_src, const bool do_vertex, const bool do_multires)
int BM_iter_mesh_count_flag(const char itype, BMesh *bm, const char hflag, const bool value)
Mesh Iter Flag Count.
#define BM_ITER_ELEM(ele, iter, data, itype)
#define BM_ITER_MESH(ele, iter, bm, itype)
#define BM_ITER_MESH_INDEX(ele, iter, bm, itype, indexvar)
#define BM_ITER_ELEM_INDEX(ele, iter, data, itype, indexvar)
BLI_INLINE bool BM_iter_init(BMIter *iter, BMesh *bm, const char itype, void *data)
Iterator Init.
ATTR_WARN_UNUSED_RESULT BMesh const char itype
ATTR_WARN_UNUSED_RESULT BMesh * bm
void BM_editselection_center(BMEditSelection *ese, float r_center[3])
void BM_editselection_plane(BMEditSelection *ese, float r_plane[3])
void BM_editselection_normal(BMEditSelection *ese, float r_normal[3])
void BM_mesh_elem_hflag_disable_all(BMesh *bm, const char htype, const char hflag, const bool respecthide)
const BMAllocTemplate bm_mesh_allocsize_default
void BM_mesh_free(BMesh *bm)
BMesh Free Mesh.
BMesh * BM_mesh_create(const BMAllocTemplate *allocsize, const struct BMeshCreateParams *params)
BMesh Make Mesh.
void bmesh_edit_begin(BMesh *UNUSED(bm), BMOpTypeFlag UNUSED(type_flag))
BMesh Begin Edit.
void BM_mesh_elem_table_ensure(BMesh *bm, const char htype)
void BM_mesh_elem_index_ensure(BMesh *bm, const char htype)
void bmesh_edit_end(BMesh *bm, BMOpTypeFlag type_flag)
BMesh End Edit.
BLI_INLINE BMVert * BM_vert_at_index(BMesh *bm, const int index)
void BM_mesh_cd_flag_ensure(BMesh *bm, Mesh *mesh, const char cd_flag)
@ BMO_OPTYPE_FLAG_UNTAN_MULTIRES
bool BM_vert_calc_normal_ex(const BMVert *v, const char hflag, float r_no[3])
void BM_face_calc_center_median(const BMFace *f, float r_cent[3])
BMLoop * BM_loop_find_next_nodouble(BMLoop *l, BMLoop *l_stop, const float eps_sq)
int BM_mesh_calc_face_groups(BMesh *bm, int *r_groups_array, int(**r_group_index)[2], BMLoopFilterFunc filter_fn, BMLoopPairFilterFunc filter_pair_fn, void *user_data, const char hflag_test, const char htype_step)
float BM_vert_calc_shell_factor_ex(const BMVert *v, const float no[3], const char hflag)
BMLoop * BM_loop_find_prev_nodouble(BMLoop *l, BMLoop *l_stop, const float eps_sq)
int BM_mesh_calc_edge_groups(BMesh *bm, int *r_groups_array, int(**r_group_index)[2], BMVertFilterFunc filter_fn, void *user_data, const char hflag_test)
BLI_INLINE BMVert * BM_edge_other_vert(BMEdge *e, const BMVert *v) ATTR_WARN_UNUSED_RESULT ATTR_NONNULL()
ATTR_WARN_UNUSED_RESULT const BMVert * v2
ATTR_WARN_UNUSED_RESULT const BMLoop * l
ATTR_WARN_UNUSED_RESULT const BMVert const BMEdge * e
ATTR_WARN_UNUSED_RESULT const BMVert * v
void(* MEM_freeN)(void *vmemh)
void *(* MEM_callocN)(size_t len, const char *str)
void *(* MEM_mallocN)(size_t len, const char *str)
ThreadQueue * queue
all scheduled work for the cpu
struct BMLoop * radial_next
struct TransCustomDataMergeGroup * data
struct TransCustomDataLayer::@575 merge_group
int customdatalayer_map_len
struct BMesh * bm_origfaces
int * customdatalayer_map
struct LinkNode ** cd_loop_groups
void(* free_cb)(struct TransInfo *, struct TransDataContainer *tc, struct TransCustomData *custom_data)
TransCustomDataContainer custom
TransDataMirror * data_mirror
struct MirrorDataVert * vert_map