111 if (f->
no[0] == FLT_MAX) {
122 for (
int i = 0; i < verts_len; i++) {
126 for (
int i = 0; i < verts_len; i++) {
169 #define MAX_SKIN_NODE_FRAMES 2
192 const float threshold = 0.0001f;
193 const float threshold_squared = threshold * threshold;
196 for (axis = 0; axis < 3; axis++) {
228 for (axis = 0; axis < 3; axis++) {
233 for (i = 0; i < 4; i++) {
234 if (
quad[i]->co[axis] < 0.0f) {
237 else if (
quad[i]->co[axis] > 0.0f) {
285 for (i = 0; i < totframe; i++) {
286 for (j = 0; j < 4; j++) {
315 for (i = 0; i < totframe; i++) {
316 Frame *frame = frames[i];
319 for (j = 0; j < 4; j++) {
320 if (frame->
verts[j] ==
v) {
331 for (i = 0; i < totframe; i++) {
332 Frame *frame = frames[i];
345 for (i = 0; i < totframe; i++) {
346 Frame *frame = frames[i];
399 float dist, side_a, side_b, thresh, mid[3];
402 for (i = 0; i < totframe; i++) {
406 for (j = 0; j < 4; j++) {
409 if (frames[i]->
merge[j].frame) {
413 for (k = i + 1; k < totframe; k++) {
417 thresh =
min_ff(side_a, side_b) / 2.0f;
420 for (
l = 0;
l < 4;
l++) {
421 if (frames[k]->
merge[
l].frame || frames[k]->
merge[
l].is_target) {
440 dist =
len_v3v3(frames[i]->co[j], frames[k]->co[
l]);
468 (*tothullframe) = emap[
v].
count;
470 (*tothullframe),
sizeof(
Frame *),
"hull_from_frames.hull_frames");
472 for (nbr = 0; nbr < emap[
v].
count; nbr++) {
477 hull_frames[i++] = &f->
frames[0];
497 for (i = 0; i < 2; i++) {
503 Frame *frame,
const float co[3],
const float radius[2],
const float mat[3][3],
float offset)
505 float rx[3], ry[3], rz[3];
524 for (i = 0; i < 4; i++) {
531 return (
v[0] +
v[1]) * 0.5f;
541 const float *rad = nodes[
v].
radius;
553 mat[0][2] = mat[1][0] = mat[2][1] = 1;
556 create_frame(&skin_nodes[
v].frames[0], mvert[
v].co, rad, mat, avg);
557 create_frame(&skin_nodes[
v].frames[1], mvert[
v].co, rad, mat, -avg);
566 if (emat[emap[
v].
indices[0]].origin !=
v) {
588 float axis[3],
angle, ine[3][3], oute[3][3];
626 const float *rad = nodes[
v].
radius;
646 create_frame(&skin_nodes[
v].frames[0], mvert[
v].co, rad, mat, avg);
653 create_frame(&skin_nodes[
v].frames[1], mvert[
v].co, rad, mat, avg);
672 for (
v = 0;
v < totvert;
v++) {
676 else if (emap[
v].
count == 2) {
691 const float z_up[3] = {0, 0, 1};
699 if (
dot > -1 + FLT_EPSILON &&
dot < 1 - FLT_EPSILON) {
733 float axis[3],
angle;
734 int i,
e,
v, parent_v, parent_is_branch;
756 if (parent_is_branch) {
761 sub_v3_v3v3(emat[
e].mat[0], mvert[
v].co, mvert[parent_v].co);
771 for (i = 0; i < emap[
v].
count; i++) {
786 bool *has_valid_root)
794 stack =
BLI_stack_new(
sizeof(stack_elem),
"build_edge_mats.stack");
801 for (
v = 0;
v < totvert;
v++) {
809 for (i = 0; i < emap[
v].
count; i++) {
814 *has_valid_root =
true;
816 else if (totedge == 0) {
818 *has_valid_root =
true;
847 #define NUM_SUBDIVISIONS_MAX 128
849 const MVertSkin *evs[2] = {&nodes[
e->v1], &nodes[
e->v2]};
851 const bool v1_branch = degree[
e->v1] > 2;
852 const bool v2_branch = degree[
e->v2] > 2;
853 int num_subdivisions;
859 if (v1_branch && v2_branch) {
868 if (avg_radius != 0.0f) {
870 float num_subdivisions_fl;
871 const float edge_len =
len_v3v3(mvert[
e->v1].
co, mvert[
e->v2].
co);
872 num_subdivisions_fl = (edge_len / avg_radius);
874 num_subdivisions = (int)num_subdivisions_fl;
881 num_subdivisions = 0;
886 if (num_subdivisions < 2 && v1_branch && v2_branch) {
887 num_subdivisions = 2;
890 return num_subdivisions;
892 #undef NUM_SUBDIVISIONS_MAX
901 MVert *origvert, *outvert;
902 MEdge *origedge, *outedge, *
e;
904 int totorigvert, totorigedge;
905 int totsubd, *degree, *edge_subd;
910 origvert = orig->
mvert;
911 origedge = orig->
medge;
912 origdvert = orig->
dvert;
918 for (i = 0; i < totorigedge; i++) {
919 degree[origedge[i].
v1]++;
920 degree[origedge[i].v2]++;
925 for (i = 0, totsubd = 0; i < totorigedge; i++) {
928 totsubd += edge_subd[i];
935 orig, totorigvert + totsubd, totorigedge + totsubd, 0, 0, 0);
946 for (i = 0,
v = totorigvert; i < totorigedge; i++) {
951 } *vgroups =
NULL, *vg;
966 vg = &vgroups[totvgroup];
983 radrat = (radrat + 1) / 2;
991 for (j = 0; j < edge_subd[i]; j++,
v++, outedge++) {
992 float r = (j + 1) / (
float)(edge_subd[i] + 1);
993 float t =
powf(
r, radrat);
1002 for (k = 0; k < totvgroup; k++) {
1006 weight =
interpf(vg->w2, vg->w1,
t);
1024 outedge->
v2 =
e->v2;
1057 {frame2[0], frame2[1], frame1[1], frame1[0]},
1058 {frame2[1], frame2[2], frame1[2], frame1[1]},
1059 {frame2[2], frame2[3], frame1[3], frame1[2]},
1060 {frame2[3], frame2[0], frame1[0], frame1[3]},
1071 normal_quad_v3(no, q[0][0]->co, q[0][1]->co, q[0][2]->co, q[0][3]->co);
1077 float cent_sides[4][3];
1081 for (i = 0; i < 4; i++) {
1086 for (i = 0; i < 4; i++) {
1097 for (i = 0; i < 4; i++) {
1099 add_poly(so, q[i][3], q[i][2], q[i][1], q[i][0]);
1102 add_poly(so, q[i][0], q[i][1], q[i][2], q[i][3]);
1113 for (i = 0; i < sn->
totframe; i++) {
1115 for (j = 0; j < 4; j++) {
1131 #define PRINT_HOLE_INFO 0
1144 const float ray_dir[3],
1150 float best_dist = FLT_MAX;
1157 else if (v_prev != v_first) {
1162 if (curhit && dist < best_dist) {
1171 *r_lambda = best_dist;
1182 int orig_len = f->
len;
1191 while (f->
len > n) {
1194 BMVert *v_safe, *v_merge;
1208 v_safe = shortest_edge->
v1;
1209 v_merge = shortest_edge->
v2;
1218 bool wrong_face =
false;
1220 for (i = 0; i < orig_len; i++) {
1221 if (orig_verts[i] == v_merge) {
1222 orig_verts[i] =
NULL;
1246 BMFace *f, *isect_target_face, *center_target_face;
1248 float frame_center[3];
1249 float frame_normal[3];
1250 float best_isect_dist = FLT_MAX;
1251 float best_center_dist = FLT_MAX;
1262 isect_target_face = center_target_face =
NULL;
1264 float dist, poly_center[3];
1269 if (hit && dist < best_isect_dist) {
1270 isect_target_face = f;
1271 best_isect_dist = dist;
1276 dist =
len_v3v3(frame_center, poly_center);
1277 if (dist < best_center_dist) {
1278 center_target_face = f;
1279 best_center_dist = dist;
1283 f = isect_target_face;
1284 if (!f || best_center_dist < best_isect_dist / 2) {
1285 f = center_target_face;
1292 printf(
"no good face found\n");
1307 for (i = 0; i < 4; i++) {
1308 for (j = 0; j < 4; j++) {
1309 orders[i][j] = (j + i) % 4;
1310 orders[i + 4][j] = 3 - ((j + i) % 4);
1314 shortest_len = FLT_MAX;
1315 for (i = 0; i < 8; i++) {
1319 for (j = 0; j < 4; j++) {
1323 if (
len < shortest_len) {
1325 memcpy(best_order, orders[i],
sizeof(
int[4]));
1338 int i, best_order[4];
1349 "extrude_discrete_faces faces=%hf",
1363 if (split_face->
len == 3) {
1375 "subdivide_edges edges=%he cuts=%i quad_corner_type=%i",
1380 else if (split_face->
len > 4) {
1399 if (split_face->
len != 4) {
1423 for (i = 0; i < 4; i++) {
1437 int i, attached[4], totattached = 0;
1440 for (i = 0; i < 4; i++) {
1442 attached[totattached++] = i;
1447 for (i = 0; i < totattached; i++) {
1470 for (i = 0; i < 3; i++) {
1471 if (!
ELEM(tri[1][i], tri[0][0], tri[0][1], tri[0][2])) {
1478 for (i = 0, j = 0; i < 3; i++, j++) {
1482 if ((tri[0][i] ==
e->v1 || tri[0][i] ==
e->v2) &&
1483 (tri[0][(i + 1) % 3] ==
e->v1 || tri[0][(i + 1) % 3] ==
e->v2)) {
1516 if (adj[0]->
len == 3 && adj[1]->
len == 3) {
1581 Frame **hull_frames;
1582 int v, tothullframe;
1584 for (
v = 0;
v < totvert;
v++) {
1586 if (!skin_nodes[
v].totframe) {
1598 for (
v = 0;
v < totvert;
v++) {
1602 for (i = 0; i < sn->
totframe; i++) {
1605 for (j = 0; j < 4; j++) {
1621 for (
v = 0;
v < totvert;
v++) {
1625 for (j = 0; j < sn->
totframe; j++) {
1646 for (
v = 0;
v < totvert;
v++) {
1654 for (i = 0; i < 4; i++) {
1696 for (
e = 0;
e < totedge;
e++) {
1698 a = &skin_nodes[medge[
e].
v1];
1699 b = &skin_nodes[medge[
e].v2];
1715 for (i = 0; i < 4; i++) {
1742 for (i = 0; i < totvert; i++) {
1743 for (j = 0; j < skin_nodes[i].
totframe; j++) {
1746 for (k = 0; k < 4; k++) {
1802 for (
v = 0;
v < totvert;
v++) {
1807 Frame **hull_frames;
1811 if (!
build_hull(so, hull_frames, tothullframe)) {
1842 .use_toolflags =
true,
1860 for (
v = 0;
v < totvert;
v++) {
1861 if (skin_nodes[
v].totframe) {
1928 int totvert, totedge;
1929 bool has_valid_root =
false;
1933 mvert = origmesh->
mvert;
1934 dvert = origmesh->
dvert;
1935 medge = origmesh->
medge;
1941 emat =
build_edge_mats(nodes, mvert, totvert, medge, emap, totedge, &has_valid_root);
1942 skin_nodes =
build_frames(mvert, totvert, nodes, emap, emat);
1946 bm =
build_skin(skin_nodes, totvert, emap, medge, totedge, dvert, smd, r_error);
1952 if (!has_valid_root) {
2010 "No valid root vertex found (you need one per mesh island you want to skin)");
2047 uiItemR(row,
ptr,
"use_x_symmetry", toggles_flag,
NULL, ICON_NONE);
2048 uiItemR(row,
ptr,
"use_y_symmetry", toggles_flag,
NULL, ICON_NONE);
2049 uiItemR(row,
ptr,
"use_z_symmetry", toggles_flag,
NULL, ICON_NONE);
2054 uiItemO(row,
IFACE_(
"Create Armature"), ICON_NONE,
"OBJECT_OT_skin_armature_create");
2055 uiItemO(row,
NULL, ICON_NONE,
"MESH_OT_customdata_skin_add");
2059 "OBJECT_OT_skin_loose_mark_clear",
2068 "OBJECT_OT_skin_loose_mark_clear",
2077 uiItemO(layout,
IFACE_(
"Mark Root"), ICON_NONE,
"OBJECT_OT_skin_root_mark");
2078 uiItemO(layout,
IFACE_(
"Equalize Radii"), ICON_NONE,
"OBJECT_OT_skin_radii_equalize");
int CustomData_number_of_layers(const struct CustomData *data, int type)
void * CustomData_get_layer(const struct CustomData *data, int type)
void * CustomData_bmesh_get(const struct CustomData *data, void *block, 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)
void * CustomData_bmesh_get_n(const struct CustomData *data, void *block, int type, int n)
void BKE_id_free(struct Main *bmain, void *idv)
int BKE_mesh_edge_other_vert(const struct MEdge *e, int v)
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)
struct Mesh * BKE_mesh_from_bmesh_for_eval_nomain(struct BMesh *bm, const struct CustomData_MeshMasks *cd_mask_extra, const struct Mesh *me_settings)
void BKE_mesh_vert_edge_map_create(MeshElemMap **r_map, int **r_mem, const struct MEdge *medge, int totvert, int totedge)
@ eModifierTypeFlag_SupportsEditmode
@ eModifierTypeFlag_AcceptsMesh
void BKE_modifier_copydata_generic(const struct ModifierData *md, struct ModifierData *md_dst, const int flag)
@ eModifierTypeType_Constructive
void BKE_modifier_set_error(const struct Object *ob, struct ModifierData *md, const char *format,...) ATTR_PRINTF_FORMAT(3
A (mainly) macro array library.
#define BLI_array_grow_items(arr, num)
#define BLI_array_declare(arr)
#define BLI_array_len(arr)
#define BLI_array_clear(arr)
#define BLI_array_free(arr)
#define BLI_BITMAP_TEST(_bitmap, _index)
#define BLI_BITMAP_ENABLE(_bitmap, _index)
#define BLI_BITMAP_NEW(_tot, _alloc_string)
A min-heap / priority queue ADT.
void BLI_heapsimple_free(HeapSimple *heap, HeapSimpleFreeFP ptrfreefp) ATTR_NONNULL(1)
HeapSimple * BLI_heapsimple_new(void) ATTR_WARN_UNUSED_RESULT
void * BLI_heapsimple_pop_min(HeapSimple *heap) ATTR_NONNULL(1)
bool BLI_heapsimple_is_empty(const HeapSimple *heap) ATTR_NONNULL(1)
void BLI_heapsimple_insert(HeapSimple *heap, float value, void *ptr) ATTR_NONNULL(1)
MINLINE float min_ff(float a, float b)
MINLINE float interpf(float a, float b, float t)
float normal_quad_v3(float n[3], const float v1[3], const float v2[3], const float v3[3], const float v4[3])
bool isect_ray_tri_v3(const float ray_origin[3], const float ray_direction[3], const float v0[3], const float v1[3], const float v2[3], float *r_lambda, float r_uv[2])
bool is_quad_convex_v3(const float v1[3], const float v2[3], const float v3[3], const float v4[3])
void copy_m3_m3(float m1[3][3], const float m2[3][3])
void zero_m3(float m[3][3])
void mid_v3_v3v3v3v3(float v[3], const float v1[3], const float v2[3], const float v3[3], const float v4[3])
void interp_v3_v3v3(float r[3], const float a[3], const float b[3], const float t)
MINLINE float len_v3v3(const float a[3], const float b[3]) ATTR_WARN_UNUSED_RESULT
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 mul_v3_fl(float r[3], float f)
MINLINE void copy_v3_v3(float r[3], const float a[3])
MINLINE float dot_v3v3(const float a[3], const float b[3]) ATTR_WARN_UNUSED_RESULT
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])
MINLINE void negate_v3(float r[3])
void mid_v3_v3v3(float r[3], const float a[3], const float b[3])
MINLINE void mul_v3_v3fl(float r[3], const float a[3], float f)
float angle_normalized_v3v3(const float v1[3], const float v2[3]) ATTR_WARN_UNUSED_RESULT
MINLINE void add_v3_v3(float r[3], const float a[3])
void rotate_normalized_v3_v3v3fl(float out[3], const float p[3], const float axis[3], const float angle)
void BLI_stack_pop(BLI_Stack *stack, void *dst) ATTR_NONNULL()
void BLI_stack_push(BLI_Stack *stack, const void *src) ATTR_NONNULL()
bool BLI_stack_is_empty(const BLI_Stack *stack) ATTR_WARN_UNUSED_RESULT ATTR_NONNULL()
void BLI_stack_free(BLI_Stack *stack) ATTR_NONNULL()
#define BLI_stack_new(esize, descr)
#define UNPACK4_EX(pre, a, post)
#define MEMCMP_STRUCT_AFTER_IS_ZERO(struct_var, member)
#define MEMCPY_STRUCT_AFTER(struct_dst, struct_src, member)
#define CD_MASK_MDEFORMVERT
#define CD_MASK_MVERT_SKIN
#define DNA_struct_default_get(struct_name)
struct SkinModifierData SkinModifierData
@ MOD_SKIN_SMOOTH_SHADING
Object is a sort of wrapper for general info.
NSNotificationCenter * center
_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 GLdouble r _GL_VOID_RET _GL_VOID GLfloat GLfloat r _GL_VOID_RET _GL_VOID GLint GLint r _GL_VOID_RET _GL_VOID GLshort GLshort r _GL_VOID_RET _GL_VOID GLdouble GLdouble r
_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 right
_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 order
_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 NUM_SUBDIVISIONS_MAX
static void hull_merge_triangles(SkinOutput *so, const SkinModifierData *smd)
static void skin_output_end_nodes(SkinOutput *so, SkinNode *skin_nodes, int totvert)
static void connection_node_frames(int v, SkinNode *skin_nodes, const MVert *mvert, const MVertSkin *nodes, const MeshElemMap *emap, EMat *emat)
static void skin_smooth_hulls(BMesh *bm, SkinNode *skin_nodes, int totvert, const SkinModifierData *smd)
static bool is_quad_symmetric(BMVert *quad[4], const SkinModifierData *smd)
static Mesh * modifyMesh(ModifierData *md, const ModifierEvalContext *ctx, Mesh *mesh)
@ SKIN_ERROR_NO_VALID_ROOT
static void create_frame(Frame *frame, const float co[3], const float radius[2], const float mat[3][3], float offset)
ModifierTypeInfo modifierType_Skin
static int calc_edge_subdivisions(const MVert *mvert, const MVertSkin *nodes, const MEdge *e, const int *degree)
static void merge_frame_corners(Frame **frames, int totframe)
static bool quad_crosses_symmetry_plane(BMVert *quad[4], const SkinModifierData *smd)
static void end_node_frames(int v, SkinNode *skin_nodes, const MVert *mvert, const MVertSkin *nodes, const MeshElemMap *emap, EMat *emat)
static BMFace * skin_hole_target_face(BMesh *bm, Frame *frame)
static void connect_frames(SkinOutput *so, BMVert *frame1[4], BMVert *frame2[4])
static void calc_edge_mat(float mat[3][3], const float a[3], const float b[3])
static void output_frames(BMesh *bm, SkinNode *sn, const MDeformVert *input_dvert)
static BMFace * collapse_face_corners(BMesh *bm, BMFace *f, int n, BMVert **orig_verts)
static bool build_hull(SkinOutput *so, Frame **frames, int totframe)
static void vert_face_normal_mark_update(BMVert *v)
static void node_frames_init(SkinNode *nf, int totframe)
static bool skin_output_branch_hulls(SkinOutput *so, SkinNode *skin_nodes, int totvert, const MeshElemMap *emap, const MEdge *medge)
static void skin_fix_hull_topology(BMesh *bm, SkinNode *skin_nodes, int totvert)
static void add_poly(SkinOutput *so, BMVert *v1, BMVert *v2, BMVert *v3, BMVert *v4)
static void skin_set_orig_indices(Mesh *mesh)
static Mesh * base_skin(Mesh *origmesh, SkinModifierData *smd, eSkinErrorFlag *r_error)
static void skin_fix_hole_no_good_verts(BMesh *bm, Frame *frame, BMFace *split_face)
static SkinNode * build_frames(const MVert *mvert, int totvert, const MVertSkin *nodes, const MeshElemMap *emap, EMat *emat)
static void skin_update_merged_vertices(SkinNode *skin_nodes, int totvert)
static void requiredDataMask(Object *UNUSED(ob), ModifierData *UNUSED(md), CustomData_MeshMasks *r_cddata_masks)
static void vert_array_face_normal_update(BMVert **verts, int verts_len)
static void add_quad_from_tris(SkinOutput *so, BMEdge *e, BMFace *adj[2])
static void skin_merge_close_frame_verts(SkinNode *skin_nodes, int totvert, const MeshElemMap *emap, const MEdge *medge)
static float half_v2(const float v[2])
#define MAX_SKIN_NODE_FRAMES
static int connection_node_mat(float mat[3][3], int v, const MeshElemMap *emap, EMat *emat)
static int isect_ray_poly(const float ray_start[3], const float ray_dir[3], BMFace *f, float *r_lambda)
static void skin_choose_quad_bridge_order(BMVert *a[4], BMVert *b[4], int best_order[4])
static void build_emats_stack(BLI_Stack *stack, BLI_bitmap *visited_e, EMat *emat, const MeshElemMap *emap, const MEdge *medge, const MVertSkin *vs, const MVert *mvert)
static EMat * build_edge_mats(const MVertSkin *vs, const MVert *mvert, int totvert, const MEdge *medge, const MeshElemMap *emap, int totedge, bool *has_valid_root)
static bool skin_frame_find_contained_faces(const Frame *frame, BMFace *fill_faces[2])
static void calc_frame_center(float center[3], const Frame *frame)
static void panel_draw(const bContext *UNUSED(C), Panel *panel)
static void initData(ModifierData *md)
static void panelRegister(ARegionType *region_type)
static void quad_from_tris(BMEdge *e, BMFace *adj[2], BMVert *ndx[4])
static BMesh * build_skin(SkinNode *skin_nodes, int totvert, const MeshElemMap *emap, const MEdge *medge, int totedge, const MDeformVert *input_dvert, SkinModifierData *smd, eSkinErrorFlag *r_error)
static float frame_len(const Frame *frame)
static Frame ** collect_hull_frames(int v, SkinNode *frames, const MeshElemMap *emap, const MEdge *medge, int *tothullframe)
static Mesh * final_skin(SkinModifierData *smd, Mesh *mesh, eSkinErrorFlag *r_error)
static void vert_face_normal_mark_set(BMVert *v)
static void skin_hole_detach_partially_attached_frame(BMesh *bm, Frame *frame)
static void skin_output_connections(SkinOutput *so, SkinNode *skin_nodes, const MEdge *medge, int totedge)
static Mesh * subdivide_base(Mesh *orig)
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)
StructRNA RNA_SkinModifier
uiLayout * uiLayoutRowWithHeading(uiLayout *layout, bool align, const char *heading)
@ UI_ITEM_R_FORCE_BLANK_DECORATE
void uiItemFullO(uiLayout *layout, const char *opname, const char *name, int icon, struct IDProperty *properties, int context, int flag, struct PointerRNA *r_opptr)
void uiLayoutSetPropSep(uiLayout *layout, bool is_sep)
uiLayout * uiLayoutRow(uiLayout *layout, bool align)
void uiItemR(uiLayout *layout, struct PointerRNA *ptr, const char *propname, int flag, const char *name, int icon)
void uiItemO(uiLayout *layout, const char *name, int icon, const char *opname)
BMVert * BM_vert_create(BMesh *bm, const float co[3], const BMVert *v_example, const eBMCreateFlag create_flag)
Main function for creating a new vertex.
BMFace * BM_face_create_verts(BMesh *bm, BMVert **vert_arr, const int len, const BMFace *f_example, const eBMCreateFlag create_flag, const bool create_edges)
void BM_face_kill(BMesh *bm, BMFace *f)
void BM_mesh_delete_hflag_tagged(BMesh *bm, const char hflag, const char htype)
bool BMO_error_occurred(BMesh *bm)
#define BM_elem_flag_test(ele, hflag)
#define BM_elem_flag_enable(ele, hflag)
void BM_data_layer_free_n(BMesh *bm, CustomData *data, int type, int n)
void BM_data_layer_add(BMesh *bm, CustomData *data, int type)
int BM_iter_as_array(BMesh *bm, const char itype, void *data, void **array, const int len)
Iterator as Array.
#define BM_ITER_ELEM(ele, iter, data, itype)
#define BM_ITER_MESH(ele, iter, bm, itype)
ATTR_WARN_UNUSED_RESULT BMesh * bm
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_elem_toolflags_ensure(BMesh *bm)
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 bmesh_edit_end(BMesh *bm, BMOpTypeFlag type_flag)
BMesh End Edit.
void BMO_op_exec(BMesh *bm, BMOperator *op)
BMESH OPSTACK EXEC OP.
void BMO_pop(BMesh *bm)
BMESH OPSTACK POP.
bool BMO_op_initf(BMesh *bm, BMOperator *op, const int flag, const char *fmt,...)
void BMO_push(BMesh *bm, BMOperator *op)
#define BMO_ITER(ele, iter, slot_args, slot_name, restrict_flag)
void BMO_op_finish(BMesh *bm, BMOperator *op)
BMESH OPSTACK FINISH OP.
BMOpSlot * BMO_slot_get(BMOpSlot slot_args[BMO_OP_MAX_SLOTS], const char *identifier)
BMESH OPSTACK GET SLOT.
#define BMO_FLAG_DEFAULTS
void BMO_op_init(BMesh *bm, BMOperator *op, const int flag, const char *opname)
BMESH OPSTACK INIT OP.
bool BMO_op_callf(BMesh *bm, const int flag, const char *fmt,...)
BLI_INLINE void BMO_slot_map_elem_insert(BMOperator *op, BMOpSlot *slot, const void *element, void *val)
@ SUBD_CORNER_STRAIGHT_CUT
void BM_face_as_array_vert_quad(BMFace *f, BMVert *r_verts[4])
void BM_face_normal_update(BMFace *f)
void BM_face_as_array_vert_tri(BMFace *f, BMVert *r_verts[3])
float BM_face_calc_area(const BMFace *f)
void BM_face_calc_center_median(const BMFace *f, float r_cent[3])
bool BM_face_share_face_check(BMFace *f_a, BMFace *f_b)
BMEdge * BM_edge_exists(BMVert *v_a, BMVert *v_b)
bool BM_edge_face_pair(BMEdge *e, BMFace **r_fa, BMFace **r_fb)
bool BM_face_is_normal_valid(const BMFace *f)
bool BM_vert_in_face(BMVert *v, BMFace *f)
BMLoop * BM_face_find_shortest_loop(BMFace *f)
BMLoop * BM_face_find_longest_loop(BMFace *f)
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
SIMD_FORCE_INLINE btScalar angle(const btVector3 &v) const
Return the angle between this and another vector.
IconTextureDrawCall normal
void(* MEM_freeN)(void *vmemh)
void *(* MEM_calloc_arrayN)(size_t len, size_t size, const char *str)
static void error(const char *str)
void RNA_enum_set(PointerRNA *ptr, const char *name, int value)
struct BMOpSlot slots_out[BMO_OP_MAX_SLOTS]
struct BMOpSlot slots_in[BMO_OP_MAX_SLOTS]
struct Frame::@1101 merge[4]
struct MDeformVert * dvert
Frame frames[MAX_SKIN_NODE_FRAMES]
__forceinline BoundBox merge(const BoundBox &bbox, const float3 &pt)
ccl_device_inline float dot(const float2 &a, const float2 &b)