71 #include "RNA_prototypes.h"
98 if (f->
no[0] == FLT_MAX) {
109 for (
int i = 0; i < verts_len; i++) {
113 for (
int i = 0; i < verts_len; i++) {
156 #define MAX_SKIN_NODE_FRAMES 2
183 for (axis = 0; axis < 3; axis++) {
215 for (axis = 0; axis < 3; axis++) {
220 for (i = 0; i < 4; i++) {
221 if (
quad[i]->co[axis] < 0.0f) {
224 else if (
quad[i]->co[axis] > 0.0f) {
272 for (i = 0; i < totframe; i++) {
273 for (j = 0; j < 4; j++) {
302 for (i = 0; i < totframe; i++) {
303 Frame *frame = frames[i];
306 for (j = 0; j < 4; j++) {
307 if (frame->
verts[j] ==
v) {
318 for (i = 0; i < totframe; i++) {
319 Frame *frame = frames[i];
332 for (i = 0; i < totframe; i++) {
333 Frame *frame = frames[i];
386 float dist, side_a, side_b, thresh, mid[3];
389 for (i = 0; i < totframe; i++) {
393 for (j = 0; j < 4; j++) {
396 if (frames[i]->
merge[j].frame) {
400 for (k = i + 1; k < totframe; k++) {
404 thresh =
min_ff(side_a, side_b) / 2.0f;
407 for (
l = 0;
l < 4;
l++) {
408 if (frames[k]->
merge[
l].frame || frames[k]->
merge[
l].is_target) {
427 dist =
len_v3v3(frames[i]->co[j], frames[k]->co[
l]);
453 int hull_frames_num, i;
455 (*tothullframe) = emap[
v].
count;
457 (*tothullframe),
sizeof(
Frame *),
"hull_from_frames.hull_frames");
459 for (i = 0; i < emap[
v].
count; i++) {
464 hull_frames[hull_frames_num++] = &f->
frames[0];
484 for (i = 0; i < 2; i++) {
490 Frame *frame,
const float co[3],
const float radius[2],
const float mat[3][3],
float offset)
492 float rx[3], ry[3], rz[3];
511 for (i = 0; i < 4; i++) {
518 return (
v[0] +
v[1]) * 0.5f;
528 const float *rad = nodes[
v].
radius;
540 mat[0][2] = mat[1][0] = mat[2][1] = 1;
543 create_frame(&skin_nodes[
v].frames[0], mvert[
v].co, rad, mat, avg);
544 create_frame(&skin_nodes[
v].frames[1], mvert[
v].co, rad, mat, -avg);
553 if (emat[emap[
v].
indices[0]].origin !=
v) {
575 float axis[3],
angle, ine[3][3], oute[3][3];
613 const float *rad = nodes[
v].
radius;
633 create_frame(&skin_nodes[
v].frames[0], mvert[
v].co, rad, mat, avg);
640 create_frame(&skin_nodes[
v].frames[1], mvert[
v].co, rad, mat, avg);
659 for (
v = 0;
v < verts_num;
v++) {
663 else if (emap[
v].
count == 2) {
678 const float z_up[3] = {0, 0, 1};
686 if (
dot > -1 + FLT_EPSILON &&
dot < 1 - FLT_EPSILON) {
720 float axis[3],
angle;
721 int i,
e,
v, parent_v, parent_is_branch;
743 if (parent_is_branch) {
748 sub_v3_v3v3(emat[
e].mat[0], mvert[
v].co, mvert[parent_v].co);
758 for (i = 0; i < emap[
v].
count; i++) {
773 bool *has_valid_root)
781 stack =
BLI_stack_new(
sizeof(stack_elem),
"build_edge_mats.stack");
783 visited_e =
BLI_BITMAP_NEW(edges_num,
"build_edge_mats.visited_e");
788 for (
v = 0;
v < verts_num;
v++) {
796 for (i = 0; i < emap[
v].
count; i++) {
801 *has_valid_root =
true;
803 else if (edges_num == 0) {
805 *has_valid_root =
true;
834 #define NUM_SUBDIVISIONS_MAX 128
836 const MVertSkin *evs[2] = {&nodes[
e->v1], &nodes[
e->v2]};
838 const bool v1_branch = degree[
e->v1] > 2;
839 const bool v2_branch = degree[
e->v2] > 2;
840 int subdivisions_num;
846 if (v1_branch && v2_branch) {
855 if (avg_radius != 0.0f) {
857 float subdivisions_num_fl;
858 const float edge_len =
len_v3v3(mvert[
e->v1].
co, mvert[
e->v2].
co);
859 subdivisions_num_fl = (edge_len / avg_radius);
861 subdivisions_num = (int)subdivisions_num_fl;
868 subdivisions_num = 0;
873 if (subdivisions_num < 2 && v1_branch && v2_branch) {
874 subdivisions_num = 2;
877 return subdivisions_num;
879 #undef NUM_SUBDIVISIONS_MAX
895 int orig_vert_num = orig->
totvert;
896 int orig_edge_num = orig->
totedge;
900 for (i = 0; i < orig_edge_num; i++) {
901 degree[origedge[i].
v1]++;
902 degree[origedge[i].v2]++;
907 for (i = 0, subd_num = 0; i < orig_edge_num; i++) {
910 subd_num += edge_subd[i];
917 orig, orig_vert_num + subd_num, orig_edge_num + subd_num, 0, 0, 0);
928 for (i = 0,
v = orig_vert_num; i < orig_edge_num; i++) {
933 } *vgroups =
NULL, *vg;
948 vg = &vgroups[vgroups_num];
965 radrat = (radrat + 1) / 2;
973 for (j = 0; j < edge_subd[i]; j++,
v++, outedge++) {
974 float r = (j + 1) / (
float)(edge_subd[i] + 1);
975 float t =
powf(
r, radrat);
984 for (k = 0; k < vgroups_num; k++) {
988 weight =
interpf(vg->w2, vg->w1,
t);
1006 outedge->
v2 =
e->v2;
1039 {frame2[0], frame2[1], frame1[1], frame1[0]},
1040 {frame2[1], frame2[2], frame1[2], frame1[1]},
1041 {frame2[2], frame2[3], frame1[3], frame1[2]},
1042 {frame2[3], frame2[0], frame1[0], frame1[3]},
1053 normal_quad_v3(no, q[0][0]->co, q[0][1]->co, q[0][2]->co, q[0][3]->co);
1059 float cent_sides[4][3];
1063 for (i = 0; i < 4; i++) {
1068 for (i = 0; i < 4; i++) {
1079 for (i = 0; i < 4; i++) {
1081 add_poly(so, q[i][3], q[i][2], q[i][1], q[i][0]);
1084 add_poly(so, q[i][0], q[i][1], q[i][2], q[i][3]);
1095 for (i = 0; i < sn->
totframe; i++) {
1097 for (j = 0; j < 4; j++) {
1113 #define PRINT_HOLE_INFO 0
1126 const float ray_dir[3],
1132 float best_dist = FLT_MAX;
1139 else if (v_prev != v_first) {
1144 if (curhit && dist < best_dist) {
1153 *r_lambda = best_dist;
1164 int orig_len = f->
len;
1173 while (f->
len > n) {
1176 BMVert *v_safe, *v_merge;
1190 v_safe = shortest_edge->
v1;
1191 v_merge = shortest_edge->
v2;
1200 bool wrong_face =
false;
1202 for (i = 0; i < orig_len; i++) {
1203 if (orig_verts[i] == v_merge) {
1204 orig_verts[i] =
NULL;
1228 BMFace *f, *isect_target_face, *center_target_face;
1230 float frame_center[3];
1231 float frame_normal[3];
1232 float best_isect_dist = FLT_MAX;
1233 float best_center_dist = FLT_MAX;
1244 isect_target_face = center_target_face =
NULL;
1246 float dist, poly_center[3];
1251 if (hit && dist < best_isect_dist) {
1252 isect_target_face = f;
1253 best_isect_dist = dist;
1258 dist =
len_v3v3(frame_center, poly_center);
1259 if (dist < best_center_dist) {
1260 center_target_face = f;
1261 best_center_dist = dist;
1265 f = isect_target_face;
1266 if (!f || best_center_dist < best_isect_dist / 2) {
1267 f = center_target_face;
1274 printf(
"no good face found\n");
1289 for (i = 0; i < 4; i++) {
1290 for (j = 0; j < 4; j++) {
1291 orders[i][j] = (j + i) % 4;
1292 orders[i + 4][j] = 3 - ((j + i) % 4);
1296 shortest_len = FLT_MAX;
1297 for (i = 0; i < 8; i++) {
1301 for (j = 0; j < 4; j++) {
1305 if (
len < shortest_len) {
1307 memcpy(best_order, orders[i],
sizeof(
int[4]));
1320 int i, best_order[4];
1331 "extrude_discrete_faces faces=%hf",
1345 if (split_face->
len == 3) {
1357 "subdivide_edges edges=%he cuts=%i quad_corner_type=%i",
1362 else if (split_face->
len > 4) {
1381 if (split_face->
len != 4) {
1405 for (i = 0; i < 4; i++) {
1419 int i, attached[4], totattached = 0;
1422 for (i = 0; i < 4; i++) {
1424 attached[totattached++] = i;
1429 for (i = 0; i < totattached; i++) {
1452 for (i = 0; i < 3; i++) {
1453 if (!
ELEM(tri[1][i], tri[0][0], tri[0][1], tri[0][2])) {
1460 for (i = 0, j = 0; i < 3; i++, j++) {
1464 if ((
ELEM(tri[0][i],
e->v1,
e->v2)) &&
1465 (tri[0][(i + 1) % 3] ==
e->v1 || tri[0][(i + 1) % 3] ==
e->v2)) {
1498 if (adj[0]->
len == 3 && adj[1]->
len == 3) {
1563 Frame **hull_frames;
1564 int v, tothullframe;
1566 for (
v = 0;
v < verts_num;
v++) {
1568 if (!skin_nodes[
v].totframe) {
1580 for (
v = 0;
v < verts_num;
v++) {
1584 for (i = 0; i < sn->
totframe; i++) {
1587 for (j = 0; j < 4; j++) {
1603 for (
v = 0;
v < verts_num;
v++) {
1607 for (j = 0; j < sn->
totframe; j++) {
1628 for (
v = 0;
v < verts_num;
v++) {
1636 for (i = 0; i < 4; i++) {
1678 for (
e = 0;
e < edges_num;
e++) {
1680 a = &skin_nodes[medge[
e].
v1];
1681 b = &skin_nodes[medge[
e].v2];
1683 if (
a->totframe &&
b->totframe) {
1685 Frame *fr[2] = {&
a->frames[0], &
b->frames[0]};
1697 for (i = 0; i < 4; i++) {
1724 for (i = 0; i < verts_num; i++) {
1725 for (j = 0; j < skin_nodes[i].
totframe; j++) {
1728 for (k = 0; k < 4; k++) {
1787 for (
v = 0;
v < verts_num;
v++) {
1792 Frame **hull_frames;
1796 if (!
build_hull(so, hull_frames, tothullframe)) {
1827 .use_toolflags =
true,
1845 for (
v = 0;
v < verts_num;
v++) {
1846 if (skin_nodes[
v].totframe) {
1913 int verts_num, edges_num;
1914 bool has_valid_root =
false;
1918 mvert = origmesh->
mvert;
1919 dvert = origmesh->
dvert;
1920 medge = origmesh->
medge;
1921 verts_num = origmesh->
totvert;
1922 edges_num = origmesh->
totedge;
1926 emat =
build_edge_mats(nodes, mvert, verts_num, medge, emap, edges_num, &has_valid_root);
1927 skin_nodes =
build_frames(mvert, verts_num, nodes, emap, emat);
1931 bm =
build_skin(skin_nodes, verts_num, emap, medge, edges_num, dvert, smd, r_error);
1937 if (!has_valid_root) {
1993 "No valid root vertex found (you need one per mesh island you want to skin)");
2030 uiItemR(row,
ptr,
"use_x_symmetry", toggles_flag,
NULL, ICON_NONE);
2031 uiItemR(row,
ptr,
"use_y_symmetry", toggles_flag,
NULL, ICON_NONE);
2032 uiItemR(row,
ptr,
"use_z_symmetry", toggles_flag,
NULL, ICON_NONE);
2037 uiItemO(row,
IFACE_(
"Create Armature"), ICON_NONE,
"OBJECT_OT_skin_armature_create");
2038 uiItemO(row,
NULL, ICON_NONE,
"MESH_OT_customdata_skin_add");
2042 "OBJECT_OT_skin_loose_mark_clear",
2051 "OBJECT_OT_skin_loose_mark_clear",
2060 uiItemO(layout,
IFACE_(
"Mark Root"), ICON_NONE,
"OBJECT_OT_skin_root_mark");
2061 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, 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_NEW(_num, _alloc_string)
#define BLI_BITMAP_TEST(_bitmap, _index)
#define BLI_BITMAP_ENABLE(_bitmap, _index)
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])
MINLINE float len_v3v3(const float a[3], const float b[3]) ATTR_WARN_UNUSED_RESULT
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
void interp_v3_v3v3(float r[3], const float a[3], const float b[3], float t)
MINLINE void add_v3_v3v3(float r[3], const float a[3], const float b[3])
void rotate_normalized_v3_v3v3fl(float out[3], const float p[3], const float axis[3], float angle)
MINLINE void cross_v3_v3v3(float r[3], const float a[3], const float b[3])
MINLINE void negate_v3(float r[3])
void copy_vn_i(int *array_tar, int size, int val)
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 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.
static void skin_smooth_hulls(BMesh *bm, SkinNode *skin_nodes, int verts_num, const SkinModifierData *smd)
#define NUM_SUBDIVISIONS_MAX
static void hull_merge_triangles(SkinOutput *so, const SkinModifierData *smd)
static void connection_node_frames(int v, SkinNode *skin_nodes, const MVert *mvert, const MVertSkin *nodes, const MeshElemMap *emap, EMat *emat)
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 Mesh * subdivide_base(const Mesh *orig)
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 void skin_merge_close_frame_verts(SkinNode *skin_nodes, int verts_num, const MeshElemMap *emap, const MEdge *medge)
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 void skin_output_connections(SkinOutput *so, SkinNode *skin_nodes, const MEdge *medge, int edges_num)
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 verts_num, const MeshElemMap *emap, const MEdge *medge)
static BMesh * build_skin(SkinNode *skin_nodes, int verts_num, const MeshElemMap *emap, const MEdge *medge, int edges_num, const MDeformVert *input_dvert, SkinModifierData *smd, eSkinErrorFlag *r_error)
static void add_poly(SkinOutput *so, BMVert *v1, BMVert *v2, BMVert *v3, BMVert *v4)
static EMat * build_edge_mats(const MVertSkin *vs, const MVert *mvert, const int verts_num, const MEdge *medge, const MeshElemMap *emap, const int edges_num, bool *has_valid_root)
static void skin_set_orig_indices(Mesh *mesh)
static SkinNode * build_frames(const MVert *mvert, int verts_num, const MVertSkin *nodes, const MeshElemMap *emap, EMat *emat)
static Mesh * base_skin(Mesh *origmesh, SkinModifierData *smd, eSkinErrorFlag *r_error)
static void skin_update_merged_vertices(SkinNode *skin_nodes, int verts_num)
static void skin_fix_hole_no_good_verts(BMesh *bm, Frame *frame, BMFace *split_face)
static void skin_output_end_nodes(SkinOutput *so, SkinNode *skin_nodes, int verts_num)
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 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 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 skin_fix_hull_topology(BMesh *bm, SkinNode *skin_nodes, int verts_num)
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 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)
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)
uiLayout * uiLayoutRowWithHeading(uiLayout *layout, bool align, const char *heading)
void uiLayoutSetPropSep(uiLayout *layout, bool is_sep)
uiLayout * uiLayoutRow(uiLayout *layout, bool align)
@ UI_ITEM_R_FORCE_BLANK_DECORATE
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)
void uiItemFullO(uiLayout *layout, const char *opname, const char *name, int icon, struct IDProperty *properties, wmOperatorCallContext context, int flag, struct PointerRNA *r_opptr)
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_at_level(BMesh *bm, eBMOpErrorLevel level)
#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)
void bmesh_edit_begin(BMesh *UNUSED(bm), BMOpTypeFlag UNUSED(type_flag))
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.
void BMO_push(BMesh *bm, BMOperator *op)
BMESH OPSTACK PUSH.
void BMO_op_init(BMesh *bm, BMOperator *op, int flag, const char *opname)
BMESH OPSTACK INIT OP.
#define BMO_ITER(ele, iter, slot_args, slot_name, restrict_flag)
bool BMO_op_initf(BMesh *bm, BMOperator *op, int flag, const char *fmt,...)
void BMO_op_finish(BMesh *bm, BMOperator *op)
BMESH OPSTACK FINISH OP.
bool BMO_op_callf(BMesh *bm, int flag, const char *fmt,...)
BMOpSlot * BMO_slot_get(BMOpSlot slot_args[BMO_OP_MAX_SLOTS], const char *identifier)
BMESH OPSTACK GET SLOT.
#define BMO_FLAG_DEFAULTS
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
__forceinline BoundBox merge(const BoundBox &bbox, const float3 &pt)
SIMD_FORCE_INLINE btScalar angle(const btVector3 &v) const
Return the angle between this and another vector.
IconTextureDrawCall normal
ccl_gpu_kernel_postfix ccl_global float int int int int float threshold
ccl_gpu_kernel_postfix ccl_global float int int int int float bool int offset
ccl_gpu_kernel_postfix int ccl_global int * indices
void(* MEM_freeN)(void *vmemh)
void *(* MEM_calloc_arrayN)(size_t len, size_t size, const char *str)
static void error(const char *str)
T dot(const vec_base< T, Size > &a, const vec_base< T, Size > &b)
static const pxr::TfToken b("b", pxr::TfToken::Immortal)
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::@1150 merge[4]
struct MDeformVert * dvert
Frame frames[MAX_SKIN_NODE_FRAMES]