86 #define SV_UNUSED (UINT_MAX)
87 #define SV_INVALID ((UINT_MAX)-1)
88 #define SV_IS_VALID(v) ((v) < SV_INVALID)
133 const float axis_vec[3],
134 const float axis_offset[3],
135 const float merge_threshold)
137 const float merge_threshold_sq =
square_f(merge_threshold);
138 const bool use_offset = axis_offset !=
NULL;
139 uint tot_doubles = 0;
140 for (
uint i = 0; i < totvert; i += 1) {
144 sub_v3_v3v3(offset_co, mvert_new[i].co, axis_offset);
152 if (dist_sq <= merge_threshold_sq) {
162 if (tot_doubles != 0) {
163 uint tot = totvert * step_tot;
165 copy_vn_i(full_doubles_map, (
int)tot, -1);
167 uint tot_doubles_left = tot_doubles;
168 for (
uint i = 0; i < totvert; i += 1) {
170 int *doubles_map = &full_doubles_map[totvert + i];
171 for (
uint step = 1; step < step_tot; step += 1) {
172 *doubles_map = (int)i;
173 doubles_map += totvert;
175 tot_doubles_left -= 1;
176 if (tot_doubles_left == 0) {
183 (
int)(tot_doubles * (step_tot - 1)),
205 const int quad_ord[4] = {
211 const int quad_ord_ofs[4] = {
218 uint maxVerts = 0, maxEdges = 0, maxPolys = 0;
230 float uv_v_minmax[2] = {FLT_MAX, -FLT_MAX};
231 float uv_v_range_inv;
232 float uv_axis_plane[4];
234 char axis_char =
'X';
238 float axis_vec[3] = {0.0f, 0.0f, 0.0f};
239 float tmp_vec1[3], tmp_vec2[3];
243 float mtx_tx_inv[4][4];
244 float mtx_tmp_a[4][4];
246 uint vc_tot_linked = 0;
247 short other_axis_1, other_axis_2;
248 const float *tmpf1, *tmpf2;
252 MPoly *mpoly_orig, *mpoly_new, *mp_new;
253 MLoop *mloop_orig, *mloop_new, *ml_new;
254 MEdge *medge_orig, *med_orig, *med_new, *med_new_firstloop, *medge_new;
255 MVert *mvert_new, *mvert_orig, *mv_orig, *mv_new, *mv_new_base;
268 switch (ltmd->
axis) {
283 axis_vec[ltmd->
axis] = 1.0f;
285 if (ob_axis !=
NULL) {
298 float totlen =
len_v3(mtx_tx[3]);
300 if (totlen != 0.0f) {
301 const float zero[3] = {0.0f, 0.0f, 0.0f};
313 if (ltmd->
flag & MOD_SCREW_OBJECT_ANGLE) {
317 float vec[3] = {0, 1, 0};
336 if (
len_v3v3(axis_tmp, axis_vec) > 1.0f) {
345 axis_char = (char)(axis_char + ltmd->
axis);
349 axis_vec[ltmd->
axis] = 1.0f;
354 screw_ofs *= (
float)ltmd->
iter;
355 uv_u_scale = 1.0f / (
float)(step_tot);
358 step_tot = ((step_tot + 1) * ltmd->
iter) - (ltmd->
iter - 1);
363 if (
fabsf(screw_ofs) <= (FLT_EPSILON * 100.0f) &&
368 maxVerts = totvert * step_tot;
369 maxEdges = (totvert * step_tot) +
370 (totedge * step_tot);
371 maxPolys = totedge * step_tot;
381 maxVerts = totvert * step_tot;
382 maxEdges = (totvert * (step_tot - 1)) +
383 (totedge * step_tot);
384 maxPolys = totedge * (step_tot - 1);
392 mesh, (
int)maxVerts, (
int)maxEdges, 0, (
int)maxPolys * 4, (
int)maxPolys);
398 mvert_new =
result->mvert;
399 mpoly_new =
result->mpoly;
400 mloop_new =
result->mloop;
401 medge_new =
result->medge;
411 if (mloopuv_layers_tot) {
412 const float zero_co[3] = {0};
416 if (mloopuv_layers_tot) {
418 for (uv_lay = 0; uv_lay < mloopuv_layers_tot; uv_lay++) {
423 for (i = 0, mv_orig = mvert_orig; i < totvert; i++, mv_orig++) {
425 uv_v_minmax[0] =
min_ff(
v, uv_v_minmax[0]);
426 uv_v_minmax[1] =
max_ff(
v, uv_v_minmax[1]);
432 uv_v_range_inv = uv_v_minmax[1] - uv_v_minmax[0];
433 uv_v_range_inv = uv_v_range_inv ? 1.0f / uv_v_range_inv : 0.0f;
439 mv_orig = mvert_orig;
442 med_orig = medge_orig;
444 for (i = 0; i < totedge; i++, med_orig++, med_new++) {
445 med_new->
v1 = med_orig->
v1;
446 med_new->
v2 = med_orig->
v2;
462 memset(edge_poly_map, 0xff,
sizeof(*edge_poly_map) * totedge);
465 memset(vert_loop_map, 0xff,
sizeof(*vert_loop_map) * totvert);
467 for (i = 0, mp_orig = mpoly_orig; i < totpoly; i++, mp_orig++) {
471 MLoop *ml_orig = &mloop_orig[loopstart];
473 for (k = loopstart; k < loopend; k++, ml_orig++) {
474 edge_poly_map[ml_orig->
e] = i;
475 vert_loop_map[ml_orig->
v] = k;
478 if (medge_new[ml_orig->
e].
v1 != ml_orig->
v) {
515 for (i = 0; i < totvert; i++, mv_orig++, mv_new++) {
526 if (ob_axis !=
NULL) {
528 for (i = 0; i < totvert; i++, mv_new++, mv_orig++, vc++) {
529 vc->
co[0] = mv_new->co[0] = mv_orig->co[0];
530 vc->
co[1] = mv_new->co[1] = mv_orig->co[1];
531 vc->
co[2] = mv_new->co[2] = mv_orig->co[2];
534 vc->
e[0] = vc->
e[1] =
NULL;
539 vc->
dist = vc->
co[other_axis_1] * vc->
co[other_axis_1] +
540 vc->
co[other_axis_2] * vc->
co[other_axis_2];
546 for (i = 0; i < totvert; i++, mv_new++, mv_orig++, vc++) {
547 vc->
co[0] = mv_new->co[0] = mv_orig->co[0];
548 vc->
co[1] = mv_new->co[1] = mv_orig->co[1];
549 vc->
co[2] = mv_new->co[2] = mv_orig->co[2];
552 vc->
e[0] = vc->
e[1] =
NULL;
556 vc->
dist = vc->
co[other_axis_1] * vc->
co[other_axis_1] +
557 vc->
co[other_axis_2] * vc->
co[other_axis_2];
564 for (i = 0; i < totedge; i++, med_new++) {
565 vc = &vert_connect[med_new->
v1];
568 vc->
v[0] = med_new->
v2;
572 vc->
v[1] = med_new->
v2;
579 vc = &vert_connect[med_new->
v2];
583 vc->
v[0] = med_new->
v1;
587 vc->
v[1] = med_new->
v1;
597 for (i = 0; i < totvert; i++, vc++) {
607 bool ed_loop_flip =
false;
611 for (j = 0; j < 2; j++) {
628 if (fl <= lt_iter.v_poin->dist) {
647 if (vc_tot_linked > 1) {
648 float vf_1, vf_2, vf_best;
650 vc_tmp = &vert_connect[v_best];
652 tmpf1 = vert_connect[vc_tmp->
v[0]].
co;
653 tmpf2 = vert_connect[vc_tmp->
v[1]].
co;
660 vf_1 = tmpf1[ltmd->
axis];
661 vf_2 = tmpf2[ltmd->
axis];
662 vf_best = vc_tmp->
co[ltmd->
axis];
664 if (vf_1 < vf_best && vf_best < vf_2) {
667 else if (vf_1 > vf_best && vf_best > vf_2) {
677 if (tmp_vec1[ltmd->
axis] < tmp_vec2[ltmd->
axis]) {
687 if (tmpf1[ltmd->
axis] < vc_tmp->
co[ltmd->
axis]) {
696 printf(
"No Connected ___\n");
706 ed_loop_flip = !ed_loop_flip;
711 ed_loop_flip = !ed_loop_flip;
715 for (j = ed_loop_closed; j < 2; j++) {
726 ed_loop_flip = !ed_loop_flip;
734 if (lt_iter.
v == lt_iter.
e->
v1) {
735 if (ed_loop_flip == 0) {
741 printf(
"\t\t\tFlipping Not 0\n");
745 else if (lt_iter.
v == lt_iter.
e->
v2) {
746 if (ed_loop_flip == 1) {
752 printf(
"\t\t\tFlipping Not 1\n");
758 printf(
"\t\tIncorrect edge topology");
764 printf(
"\t\tNo Edge at this point\n");
793 if (vc->
e[0]->
v1 == i) {
803 if (vc->
e[0]->
v2 == i) {
817 if (vc->
e[0]->
v2 == i) {
834 if ((
angle < 0.0f) != do_flip) {
846 mv_orig = mvert_orig;
849 for (i = 0; i < totvert; i++, mv_new++, mv_orig++) {
856 for (step = 1; step < step_tot; step++) {
857 const uint varray_stride = totvert * step;
864 if (ob_axis !=
NULL) {
873 madd_v3_v3fl(mat[3], axis_vec, screw_ofs * ((
float)step / (
float)(step_tot - 1)));
879 mv_new_base = mvert_new;
880 mv_new = &mvert_new[varray_stride];
882 for (j = 0; j < totvert; j++, mv_new_base++, mv_new++) {
897 if (ob_axis !=
NULL) {
909 med_new->
v1 = varray_stride + j;
910 med_new->
v2 = med_new->
v1 - totvert;
927 const uint varray_stride = (step_tot - 1) * totvert;
929 for (i = 0; i < totvert; i++) {
931 med_new->
v2 = varray_stride + i;
942 med_new_firstloop = medge_new;
945 edge_offset = totedge + (totvert * (step_tot - (close ? 0 : 1)));
947 for (i = 0; i < totedge; i++, med_new_firstloop++) {
948 const uint step_last = step_tot - (close ? 1 : 2);
949 const uint mpoly_index_orig = totpoly ? edge_poly_map[i] :
UINT_MAX;
950 const bool has_mpoly_orig = (mpoly_index_orig !=
UINT_MAX);
951 float uv_v_offset_a, uv_v_offset_b;
953 const uint mloop_index_orig[2] = {
954 vert_loop_map ? vert_loop_map[medge_new[i].
v1] :
UINT_MAX,
955 vert_loop_map ? vert_loop_map[medge_new[i].
v2] :
UINT_MAX,
957 const bool has_mloop_orig = mloop_index_orig[0] !=
UINT_MAX;
962 i1 = med_new_firstloop->
v1;
963 i2 = med_new_firstloop->
v2;
965 if (has_mpoly_orig) {
966 mat_nr = mpoly_orig[mpoly_index_orig].
mat_nr;
972 if (has_mloop_orig ==
false && mloopuv_layers_tot) {
977 uv_v_offset_a = (uv_v_offset_a - uv_v_minmax[0]) * uv_v_range_inv;
978 uv_v_offset_b = (uv_v_offset_b - uv_v_minmax[0]) * uv_v_range_inv;
982 for (step = 0; step <= step_last; step++) {
985 if (has_mpoly_orig) {
987 &
mesh->pdata, &
result->pdata, (
int)mpoly_index_orig, (
int)mpoly_index, 1);
988 origindex[mpoly_index] = (int)mpoly_index_orig;
992 mp_new->
flag = mpoly_flag;
999 if (has_mloop_orig) {
1000 int l_index = (int)(ml_new - mloop_new);
1003 &
mesh->
ldata, &
result->ldata, (
int)mloop_index_orig[0], l_index + 0, 1);
1005 &
mesh->
ldata, &
result->ldata, (
int)mloop_index_orig[1], l_index + 1, 1);
1007 &
mesh->
ldata, &
result->ldata, (
int)mloop_index_orig[1], l_index + 2, 1);
1009 &
mesh->
ldata, &
result->ldata, (
int)mloop_index_orig[0], l_index + 3, 1);
1011 if (mloopuv_layers_tot) {
1013 const float uv_u_offset_a = (
float)(step)*uv_u_scale;
1014 const float uv_u_offset_b = (
float)(step + 1) * uv_u_scale;
1015 for (uv_lay = 0; uv_lay < mloopuv_layers_tot; uv_lay++) {
1016 MLoopUV *mluv = &mloopuv_layers[uv_lay][l_index];
1018 mluv[quad_ord[0]].
uv[0] += uv_u_offset_a;
1019 mluv[quad_ord[1]].
uv[0] += uv_u_offset_a;
1020 mluv[quad_ord[2]].
uv[0] += uv_u_offset_b;
1021 mluv[quad_ord[3]].
uv[0] += uv_u_offset_b;
1026 if (mloopuv_layers_tot) {
1027 int l_index = (int)(ml_new - mloop_new);
1030 const float uv_u_offset_a = (
float)(step)*uv_u_scale;
1031 const float uv_u_offset_b = (
float)(step + 1) * uv_u_scale;
1032 for (uv_lay = 0; uv_lay < mloopuv_layers_tot; uv_lay++) {
1033 MLoopUV *mluv = &mloopuv_layers[uv_lay][l_index];
1035 copy_v2_fl2(mluv[quad_ord[0]].uv, uv_u_offset_a, uv_v_offset_a);
1036 copy_v2_fl2(mluv[quad_ord[1]].uv, uv_u_offset_a, uv_v_offset_b);
1037 copy_v2_fl2(mluv[quad_ord[2]].uv, uv_u_offset_b, uv_v_offset_b);
1038 copy_v2_fl2(mluv[quad_ord[3]].uv, uv_u_offset_b, uv_v_offset_a);
1044 if (!(close && step == step_last)) {
1046 ml_new[quad_ord[0]].
v =
i1;
1047 ml_new[quad_ord[1]].
v = i2;
1048 ml_new[quad_ord[2]].
v = i2 + totvert;
1049 ml_new[quad_ord[3]].
v =
i1 + totvert;
1051 ml_new[quad_ord_ofs[0]].
e = step == 0 ? i :
1052 (edge_offset + step + (i * (step_tot - 1))) - 1;
1053 ml_new[quad_ord_ofs[1]].
e = totedge + i2;
1054 ml_new[quad_ord_ofs[2]].
e = edge_offset + step + (i * (step_tot - 1));
1055 ml_new[quad_ord_ofs[3]].
e = totedge +
i1;
1061 med_new->
flag = med_new_firstloop->
flag;
1070 ml_new[quad_ord[0]].
v =
i1;
1071 ml_new[quad_ord[1]].
v = i2;
1072 ml_new[quad_ord[2]].
v = med_new_firstloop->
v2;
1073 ml_new[quad_ord[3]].
v = med_new_firstloop->
v1;
1075 ml_new[quad_ord_ofs[0]].
e = (edge_offset + step + (i * (step_tot - 1))) - 1;
1076 ml_new[quad_ord_ofs[1]].
e = totedge + i2;
1077 ml_new[quad_ord_ofs[2]].
e = i;
1078 ml_new[quad_ord_ofs[3]].
e = totedge +
i1;
1099 for (; i < maxPolys * 4; i += 4) {
1101 ml_new = mloop_new + i;
1102 ii = findEd(medge_new, maxEdges, ml_new[0].
v, ml_new[1].
v);
1103 printf(
"%d %d -- ", ii, ml_new[0].
e);
1106 ii = findEd(medge_new, maxEdges, ml_new[1].
v, ml_new[2].
v);
1107 printf(
"%d %d -- ", ii, ml_new[1].
e);
1110 ii = findEd(medge_new, maxEdges, ml_new[2].
v, ml_new[3].
v);
1111 printf(
"%d %d -- ", ii, ml_new[2].
e);
1114 ii = findEd(medge_new, maxEdges, ml_new[3].
v, ml_new[0].
v);
1115 printf(
"%d %d\n", ii, ml_new[3].
e);
1121 if (edge_poly_map) {
1125 if (vert_loop_map) {
1136 ob_axis !=
NULL ? mtx_tx[3] :
NULL,
1138 if (
result != result_prev) {
1194 uiItemR(sub,
ptr,
"use_object_screw_offset", 0,
NULL, ICON_NONE);
1205 uiItemR(row,
ptr,
"use_merge_vertices", 0,
"", ICON_NONE);
1208 uiItemR(sub,
ptr,
"merge_threshold", 0,
"", ICON_NONE);
1243 "ScrewModifierData",
typedef float(TangentPoint)[2]
int CustomData_number_of_layers(const struct CustomData *data, int type)
bool CustomData_has_layer(const struct CustomData *data, int type)
void * CustomData_get_layer_n(const struct CustomData *data, int type, int n)
void * CustomData_get_layer(const struct CustomData *data, int type)
void * CustomData_add_layer(struct CustomData *data, int type, eCDAllocType alloctype, void *layer, int totelem)
void CustomData_copy_data(const struct CustomData *source, struct CustomData *dest, int source_index, int dest_index, int count)
struct Mesh * BKE_mesh_new_nomain_from_template(const struct Mesh *me_src, int verts_len, int edges_len, int tessface_len, int loops_len, int polys_len)
@ MESH_MERGE_VERTS_DUMP_IF_MAPPED
struct Mesh * BKE_mesh_merge_verts(struct Mesh *mesh, const int *vtargetmap, const int tot_vtargetmap, const int merge_mode)
void(* IDWalkFunc)(void *userData, struct Object *ob, struct ID **idpoin, int cb_flag)
@ eModifierTypeFlag_AcceptsCVs
@ eModifierTypeFlag_EnableInEditmode
@ eModifierTypeFlag_SupportsEditmode
@ eModifierTypeFlag_AcceptsMesh
void BKE_modifier_copydata_generic(const struct ModifierData *md, struct ModifierData *md_dst, const int flag)
@ eModifierTypeType_Constructive
#define BLI_array_alloca(arr, realsize)
MINLINE float max_ff(float a, float b)
MINLINE float min_ff(float a, float b)
MINLINE float square_f(float a)
MINLINE float sqrtf_signed(float f)
void plane_from_point_normal_v3(float r_plane[4], const float plane_co[3], const float plane_no[3])
float dist_signed_to_plane_v3(const float p[3], const float plane[4])
float closest_to_line_v3(float r_close[3], const float p[3], const float l1[3], const float l2[3])
float dist_signed_squared_to_plane_v3(const float p[3], const float plane[4])
void mul_m4_m4m4(float R[4][4], const float A[4][4], const float B[4][4])
void copy_m3_m4(float m1[3][3], const float m2[4][4])
void copy_m4_m3(float m1[4][4], const float m2[3][3])
void mul_mat3_m4_v3(const float M[4][4], float r[3])
bool invert_m4_m4(float R[4][4], const float A[4][4])
void mul_m4_v3(const float M[4][4], float r[3])
void copy_m4_m4(float m1[4][4], const float m2[4][4])
void mul_v3_m3v3(float r[3], const float M[3][3], const float a[3])
void axis_angle_to_mat3_single(float R[3][3], const char axis, const float angle)
void axis_angle_normalized_to_mat3(float R[3][3], const float axis[3], const float angle)
float angle_v3v3(const float a[3], const float b[3]) ATTR_WARN_UNUSED_RESULT
MINLINE float len_v3v3(const float a[3], const float b[3]) ATTR_WARN_UNUSED_RESULT
MINLINE void madd_v3_v3fl(float r[3], const float a[3], float f)
void copy_vn_i(int *array_tar, const int size, const int val)
MINLINE void copy_v2_fl2(float v[2], float x, float y)
MINLINE void normal_float_to_short_v3(short r[3], const float n[3])
MINLINE float normalize_v3(float r[3])
MINLINE void sub_v3_v3(float r[3], const float a[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 void negate_v3_v3(float r[3], const float a[3])
void project_v3_v3v3_normalized(float out[3], const float p[3], const float v_proj[3])
MINLINE bool is_zero_v3(const float a[3]) ATTR_WARN_UNUSED_RESULT
MINLINE void cross_v3_v3v3(float r[3], const float a[3], const float b[3])
MINLINE void negate_v3(float r[3])
MINLINE float normalize_v3_v3(float r[3], const float a[3])
MINLINE void zero_v3(float r[3])
MINLINE void add_v3_v3(float r[3], const float a[3])
MINLINE float len_v3(const float a[3]) ATTR_WARN_UNUSED_RESULT
Strict compiler flags for areas of code we want to ensure don't do conversions without us knowing abo...
#define MEMCMP_STRUCT_AFTER_IS_ZERO(struct_var, member)
#define MEMCPY_STRUCT_AFTER(struct_dst, struct_src, member)
void DEG_add_object_relation(struct DepsNodeHandle *node_handle, struct Object *object, eDepsObjectComponentType component, const char *description)
void DEG_add_modifier_to_transform_relation(struct DepsNodeHandle *node_handle, const char *description)
#define DNA_struct_default_get(struct_name)
@ MOD_SCREW_SMOOTH_SHADING
@ MOD_SCREW_OBJECT_OFFSET
struct ScrewModifierData ScrewModifierData
Object is a sort of wrapper for general info.
_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 v1
Read Guarded memory(de)allocation.
struct ScrewVertConnect ScrewVertConnect
static void screwvert_iter_init(ScrewVertIter *iter, ScrewVertConnect *array, uint v_init, uint dir)
static Mesh * mesh_remove_doubles_on_axis(Mesh *result, MVert *mvert_new, const uint totvert, const uint step_tot, const float axis_vec[3], const float axis_offset[3], const float merge_threshold)
static void updateDepsgraph(ModifierData *md, const ModifierUpdateDepsgraphContext *ctx)
struct ScrewVertIter ScrewVertIter
static Mesh * modifyMesh(ModifierData *md, const ModifierEvalContext *ctx, Mesh *meshData)
static void foreachIDLink(ModifierData *md, Object *ob, IDWalkFunc walk, void *userData)
static void normals_panel_draw(const bContext *UNUSED(C), Panel *panel)
ModifierTypeInfo modifierType_Screw
static void panel_draw(const bContext *UNUSED(C), Panel *panel)
static void initData(ModifierData *md)
static void panelRegister(ARegionType *region_type)
static void screwvert_iter_step(ScrewVertIter *iter)
PointerRNA * modifier_panel_get_property_pointers(Panel *panel, PointerRNA *r_ob_ptr)
void modifier_panel_end(uiLayout *layout, PointerRNA *ptr)
PanelType * modifier_panel_register(ARegionType *region_type, ModifierType type, PanelDrawFn draw)
PanelType * modifier_subpanel_register(ARegionType *region_type, const char *name, const char *label, PanelDrawFn draw_header, PanelDrawFn draw, PanelType *parent)
StructRNA RNA_ScrewModifier
uiLayout * uiLayoutRowWithHeading(uiLayout *layout, bool align, const char *heading)
void uiLayoutSetActive(uiLayout *layout, bool active)
@ UI_ITEM_R_FORCE_BLANK_DECORATE
uiLayout * uiLayoutColumn(uiLayout *layout, bool align)
void uiLayoutSetPropSep(uiLayout *layout, bool is_sep)
void uiItemS(uiLayout *layout)
uiLayout * uiLayoutRow(uiLayout *layout, bool align)
void uiItemR(uiLayout *layout, struct PointerRNA *ptr, const char *propname, int flag, const char *name, int icon)
ATTR_WARN_UNUSED_RESULT const BMVert * v2
ATTR_WARN_UNUSED_RESULT const BMVert const BMEdge * e
ATTR_WARN_UNUSED_RESULT const BMVert * v
SIMD_FORCE_INLINE btScalar angle(const btVector3 &v) const
Return the angle between this and another vector.
void *(* MEM_malloc_arrayN)(size_t len, size_t size, const char *str)
void(* MEM_freeN)(void *vmemh)
PointerRNA RNA_pointer_get(PointerRNA *ptr, const char *name)
bool RNA_pointer_is_null(const PointerRNA *ptr)
bool RNA_boolean_get(PointerRNA *ptr, const char *name)
struct CustomData pdata ldata
struct DepsNodeHandle * node
unsigned int render_steps
ScrewVertConnect * v_array
ScrewVertConnect * v_poin