78 #define PARTIAL_TYPE_MAX 2
171 #define USE_FACE_SUBSTITUTE
172 #ifdef USE_FACE_SUBSTITUTE
173 # define FACE_SUBSTITUTE_INDEX INT_MIN
186 BMFace *f_test = l_radial_next->
f;
202 if (best_face ==
NULL) {
224 }
while ((l_iter = l_iter->
next) != l_first);
232 *((
BMFace **)&f_copy->
no[0]) = f_substitute_copy;
239 return *((
BMFace **)&f_copy->
no[0]);
258 for (j = 0; j < l_num; j++) {
259 BMLoop *
l = BM_iter_step(&liter);
267 #ifdef USE_FACE_SUBSTITUTE
280 loop_weights[j] = 0.0f;
294 bm,
v, layer_nr, loop_weights, tcld->
arena);
313 .use_toolflags =
false,
337 int layer_math_map_len = 0;
340 customdatalayer_map[layer_math_map_len++] = i;
389 for (
int j = tc->
data_len; j--; tob++, i++) {
407 if (!customdatacorrect) {
441 bool use_merge_group =
false;
447 use_merge_group =
true;
449 else if (
ELEM(
t->mode,
473 if (tc->custom.type.data !=
NULL) {
497 return td ? td->iloc :
v->
co;
507 const float *co_orig_3d = td->iloc;
514 const float *v_proj_axis =
v->
no;
518 if (do_loop_weight) {
526 for (j = 0; j < l_num; j++) {
528 BMLoop *
l = BM_iter_step(&liter);
532 #ifdef USE_FACE_SUBSTITUTE
545 if (do_loop_weight) {
546 const float eps = 1.0e-8f;
573 if (co_prev_ok && co_next_ok) {
577 loop_weights[j] = (dist >= 0.0f) ? 1.0f : ((dist <= -
eps) ? 0.0f : (1.0f + (dist /
eps)));
579 loop_weights[j] = 0.0f;
583 loop_weights[j] = 0.0f;
591 if (do_loop_weight) {
611 const bool update_loop_mdisps = is_moved && do_loop_mdisps && (tcld->
cd_loop_mdisp_offset != -1);
612 if (update_loop_mdisps) {
622 float f_copy_center[3];
633 faces_center[j_other],
652 for (
int i = tc->
data_len; i--; tob++) {
655 if (use_merge_group) {
664 if (use_merge_group) {
694 BMLoop *l_iter, *l_first, *l_copy;
700 l_copy = l_copy->
next;
701 }
while ((l_iter = l_iter->
next) != l_first);
713 const bool calc_single_islands,
714 const bool calc_island_center,
715 const bool calc_island_axismtx,
726 int *groups_array =
NULL;
727 int(*group_index)[2] =
NULL;
730 if (has_only_single_islands && !calc_single_islands) {
740 if (!has_only_single_islands) {
759 if (calc_island_center) {
763 if (calc_island_axismtx) {
775 for (i = 0; i <
data.island_tot; i++) {
778 const int fg_sta = group_index[i][0];
779 const int fg_len = group_index[i][1];
780 float co[3], no[3], tangent[3];
793 for (j = 0; j < fg_len; j++) {
794 ese.
ele = ele_array[groups_array[fg_sta + j]];
803 float tmp_no[3], tmp_tangent[3];
847 if (calc_single_islands) {
850 int group_tot_single = 0;
854 group_tot_single += 1;
858 if (group_tot_single != 0) {
859 if (calc_island_center) {
861 sizeof(*
data.center) * (
data.island_tot + group_tot_single));
863 if (calc_island_axismtx) {
865 sizeof(*
data.axismtx) * (
data.island_tot + group_tot_single));
870 data.island_vert_map[i] =
data.island_tot;
884 data.island_tot += 1;
890 *r_island_data =
data;
895 if (island_data->
center) {
919 const float mtx[3][3])
927 if (dists[i0] <= dists[
i1]) {
937 if (dists[i0] <= dists[i2]) {
941 float vm0[3], vm1[3], vm2[3];
957 if (dist0 < dists[i0]) {
960 index[i0] = index[
i1];
972 if (edge->l ==
NULL) {
988 const float mtx[3][3],
1015 if (index !=
NULL) {
1021 if (index !=
NULL) {
1050 if (dists[
i1] != FLT_MAX || dists[i2] != FLT_MAX) {
1068 if (dists[
i1] > dists[i2]) {
1100 BMVert *v_other = l_other->v;
1125 for (
LinkNode *lnk = queue_next; lnk; lnk = lnk->
next) {
1126 BMEdge *e_link = lnk->link;
1148 #define TRANSFORM_MAXDIST_MIRROR 0.00002f
1152 if (quadrant[0] && ((co[0] * quadrant[0]) < -
epsilon)) {
1155 if (quadrant[1] && ((co[1] * quadrant[1]) < -
epsilon)) {
1158 if (quadrant[2] && ((co[2] * quadrant[2]) < -
epsilon)) {
1165 const bool use_select,
1166 const bool use_topology,
1167 const bool mirror_axis[3],
1177 vert_map =
MEM_callocN(totvert *
sizeof(*vert_map), __func__);
1179 float select_sum[3] = {0};
1192 for (
int a = 0;
a < 3;
a++) {
1193 if (mirror_axis[
a]) {
1194 quadrant[
a] = select_sum[
a] >= 0.0f ? 1 : -1;
1201 uint mirror_elem_len = 0;
1203 bool is_single_mirror_axis = (mirror_axis[0] + mirror_axis[1] + mirror_axis[2]) == 1;
1204 bool test_selected_only = use_select && is_single_mirror_axis;
1205 for (
int a = 0;
a < 3;
a++) {
1206 if (!mirror_axis[
a]) {
1210 index[
a] =
MEM_mallocN(totvert *
sizeof(*index[
a]), __func__);
1216 int i_mirr = index[
a][i];
1229 if (vert_map[i_mirr].flag != 0) {
1240 if (!mirror_elem_len) {
1244 else if (!is_single_mirror_axis) {
1246 for (
int a = 0;
a < 3;
a++) {
1247 if (!mirror_axis[
a]) {
1252 for (i = 0; i < totvert; i++) {
1253 int i_mirr = index[
a][i];
1257 if (vert_map[i].index != -1 && !(vert_map[i].flag & flag)) {
1258 if (vert_map[i_mirr].index == -1) {
1262 vert_map[i_mirr].
flag |= vert_map[i].
flag | flag;
1272 r_mirror_data->
vert_map = vert_map;
1310 t->depsgraph, scene_eval, obedit_eval, em_eval, &defmats, &defcos);
1318 if ((totleft > 0) || (totleft == -1))
1336 r_crazyspace_data->
quats = quats;
1337 r_crazyspace_data->
defmats = defmats;
1341 const float smtx[3][3],
1342 const float defmat[3][3],
1343 const float quat[4],
1347 if (quat || defmat) {
1348 float mat[3][3], qmat[3][3], imat[3][3];
1378 if (r_crazyspace_data->
quats) {
1381 if (r_crazyspace_data->
defmats) {
1393 const int island_index,
1394 const float iloc[3],
1397 if (island_data->
center && island_index != -1) {
1412 const int island_index)
1435 if ((island_index != -1) && island_data->
axismtx) {
1462 Mesh *me = tc->obedit->data;
1466 float mtx[3][3], smtx[3][3];
1498 if (data_len == 0) {
1514 if (is_island_center) {
1521 const bool calc_island_center = !is_snap_rotate;
1527 em, calc_single_islands, calc_island_center, calc_island_axismtx, &island_data);
1537 int *dists_index =
NULL;
1538 float *dists =
NULL;
1541 if (is_island_center) {
1548 if (tc->use_mirror_axis_any) {
1551 const bool mirror_axis[3] = {
1552 tc->use_mirror_axis_x, tc->use_mirror_axis_y, tc->use_mirror_axis_z};
1554 em, use_select, use_topology, mirror_axis, &mirror_data);
1576 tc->data_len = data_len;
1594 int island_index = -1;
1596 const int connected_index = (dists_index && dists_index[
a] != -1) ? dists_index[
a] :
a;
1608 td_mirror->extra = eve;
1609 td_mirror->loc = eve->
co;
1614 &island_data, island_index, td_mirror->iloc, td_mirror->center);
1633 tob->
dist = dists[
a];
1637 tob->
dist = FLT_MAX;
1647 crazyspace_data.
quats[
a] :
1651 if (tc->use_mirror_axis_any) {
1693 if (pupdate->
cache) {
1714 else if (pupdate->
prop_size !=
t->prop_size) {
1724 return pupdate->
cache;
1736 int *verts_group =
NULL;
1737 int verts_group_count = 0;
1740 int verts_mask_count = 0;
1747 for (i = 0, td = tc->
data; i < tc->data_len; i++, td++) {
1748 if (td->
factor == 0.0f) {
1756 verts_group[v_index] = -1;
1760 verts_group[v_index] = 1;
1767 verts_mask_count += 1;
1777 if (verts_group[v_mirr_index] == 0 &&
equals_v3v3(td_mirror->loc, td_mirror->iloc)) {
1787 if (verts_group[v_mirr_index] == -1) {
1788 verts_group[v_mirr_other_index] = -1;
1795 verts_mask_count += 1;
1803 for (i = 0, td = tc->
data; i < tc->data_len; i++, td++) {
1804 if (td->
factor == 0.0f) {
1811 verts_mask_count += 1;
1826 verts_mask_count += 1;
1830 switch (partial_type) {
1834 .do_tessellate = true,
1845 .do_tessellate = true,
1849 verts_group_count) :
1852 .do_tessellate = true,
1874 return pupdate->
cache;
1908 (
t->values_final[0] !=
t->values_final[1] ||
t->values_final[0] !=
t->values_final[2])) {
1930 r_partial_state->
for_looptri = partial_for_looptri;
1931 r_partial_state->
for_normals = partial_for_normals;
1968 .face_normals =
true,
1981 .face_normals = face_normals,
2002 for (i = 0, td = tc->
data; i < tc->data_len; i++, td++) {
2020 td_mirror->loc[0] *= -1;
2023 td_mirror->loc[1] *= -1;
2026 td_mirror->loc[2] *= -1;
2036 if (!is_canceling) {
2084 if (use_automerge) {
2091 if (tc->use_mirror_axis_any) {
2097 for (
int i = tc->data_mirror_len; i--; td_mirror++) {
2109 tc->obedit,
true,
true,
true, hflag,
t->scene->toolsettings->doublimit);
2112 EDBM_automerge(tc->obedit,
true, hflag,
t->scene->toolsettings->doublimit);
typedef float(TangentPoint)[2]
struct Main * CTX_data_main(const bContext *C)
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])
void BKE_crazyspace_set_quats_editmesh(struct BMEditMesh *em, float(*origcos)[3], float(*mappedcos)[3], float(*quats)[4], bool use_select)
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_and_normals_calc(BMEditMesh *em)
BMEditMesh * BKE_editmesh_from_object(struct Object *ob)
Return the BMEditMesh for a given object.
void BKE_editmesh_looptri_calc_with_partial_ex(BMEditMesh *em, struct BMPartialUpdate *bmpinfo, const struct BMeshCalcTessellation_Params *params)
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)
#define BLI_assert_unreachable()
#define BLI_BITMAP_NEW(_num, _alloc_string)
#define BLI_BITMAP_TEST(_bitmap, _index)
#define BLI_BITMAP_ENABLE(_bitmap, _index)
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_lookup(const GHash *gh, const void *key) ATTR_WARN_UNUSED_RESULT
GHash * BLI_ghash_ptr_new_ex(const char *info, unsigned int nentries_reserve) ATTR_MALLOC ATTR_WARN_UNUSED_RESULT
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(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
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)
float geodesic_distance_propagate_across_triangle(const float v0[3], const float v1[3], const float v2[3], float dist1, float dist2)
void axis_dominant_v3_to_m3(float r_mat[3][3], const float normal[3])
Normal to x,y matrix.
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])
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])
void copy_vn_i(int *array_tar, int size, int val)
MINLINE bool equals_v3v3(const float a[3], const float b[3]) ATTR_WARN_UNUSED_RESULT
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)
struct MemArena * BLI_memarena_new(size_t bufsize, const char *name) ATTR_WARN_UNUSED_RESULT ATTR_RETURNS_NONNULL ATTR_NONNULL(2) ATTR_MALLOC
#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)
#define POINTER_OFFSET(v, ofs)
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_automerge_and_split(struct Object *ob, bool split_edges, bool split_faces, bool update, char hflag, float dist)
void EDBM_verts_mirror_cache_begin_ex(struct BMEditMesh *em, int axis, bool use_self, bool use_select, bool respecthide, bool use_topology, float maxdist, int *r_index)
void EDBM_automerge(struct Object *ob, bool update, char hflag, float dist)
void EDBM_selectmode_flush_ex(struct BMEditMesh *em, short selectmode)
void ED_mesh_mirror_spatial_table_end(struct Object *ob)
_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)
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)
void bmesh_edit_begin(BMesh *UNUSED(bm), BMOpTypeFlag UNUSED(type_flag))
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_normals_update_with_partial_ex(BMesh *UNUSED(bm), const BMPartialUpdate *bmpinfo, const struct BMeshNormalsUpdate_Params *params)
void BM_mesh_partial_destroy(BMPartialUpdate *bmpinfo)
BMPartialUpdate * BM_mesh_partial_create_from_verts_group_single(BMesh *bm, const BMPartialUpdate_Params *params, const BLI_bitmap *verts_mask, const int verts_mask_count)
BMPartialUpdate * BM_mesh_partial_create_from_verts_group_multi(BMesh *bm, const BMPartialUpdate_Params *params, const int *verts_group, const int verts_group_count)
BMPartialUpdate * BM_mesh_partial_create_from_verts(BMesh *bm, const BMPartialUpdate_Params *params, const BLI_bitmap *verts_mask, const int verts_mask_count)
@ 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)
struct BMLoop * radial_next
enum ePartialType for_looptri
enum ePartialType for_normals
struct TransCustomDataMergeGroup * data
int customdatalayer_map_len
struct BMesh * bm_origfaces
struct TransCustomDataLayer::@605 merge_group
int * customdatalayer_map
struct LinkNode ** cd_loop_groups
struct TransCustomData_PartialUpdate partial_update[PARTIAL_TYPE_MAX]
struct TransCustomDataLayer * cd_layer_correct
struct PartialTypeState partial_update_state_prev
struct BMPartialUpdate * cache
void(* free_cb)(struct TransInfo *, struct TransDataContainer *tc, struct TransCustomData *custom_data)
TransCustomDataContainer custom
TransDataMirror * data_mirror
struct MirrorDataVert * vert_map