63 #define MAX_CLIPPLANE_LEN 3
204 case SNAP_EDIT_MESH: {
235 if (sod->
type != SNAP_MESH) {
246 sod->
type = SNAP_MESH;
266 return &((
Mesh *)ob->
data)->runtime;
275 bool init =
false, init_min_max =
true, clear_cache =
false;
296 if (sod->
type != SNAP_EDIT_MESH) {
336 sod->
type = SNAP_EDIT_MESH;
341 init_min_max =
false;
374 bool use_backface_culling,
375 bool is_object_active,
390 const bool use_object_edit_cage =
params->use_object_edit_cage;
391 const bool use_backface_culling =
params->use_backface_culling;
406 const bool is_object_active = (base == base_act);
413 if (is_object_active) {
423 for (
DupliObject *dupli_ob = lb->
first; dupli_ob; dupli_ob = dupli_ob->next) {
428 use_object_edit_cage,
429 use_backface_culling,
439 use_object_edit_cage,
440 use_backface_culling,
480 const float obmat[4][4],
516 data->raycast_callback(
data->bvhdata, index, ray, hit);
517 if (hit->
index != -1) {
519 float location[3],
normal[3];
524 depth = (hit->
dist +
data->len_diff) /
data->local_scale;
538 const float dir[3],
const float v0[3],
const float v1[3],
const float v2[3],
float no[3])
553 const float *vtri_co[3] = {
560 if (dist >= 0 && dist < hit->dist) {
581 const float *t0, *t1, *t2;
589 if (dist >= 0 && dist < hit->dist) {
602 const float ray_start[3],
603 const float ray_dir[3],
606 const float obmat[4][4],
609 bool use_backface_culling,
625 float ray_start_local[3], ray_normal_local[3];
626 float local_scale, local_depth, len_diff = 0.0f;
638 local_depth = *ray_depth;
640 local_depth *= local_scale;
648 ray_start_local, ray_normal_local, bb->
vec[0], bb->
vec[6], &len_diff,
NULL)) {
655 if (len_diff > 400.0f) {
656 len_diff -= local_scale;
657 madd_v3_v3fl(ray_start_local, ray_normal_local, len_diff);
658 local_depth -= len_diff;
669 if (treedata->
tree) {
714 data.bvhdata = treedata;
721 data.ob_uuid = ob_index;
722 data.hit_list = r_hit_list;
751 if (hit.
dist <= *ray_depth) {
752 *ray_depth = hit.
dist;
777 const float ray_start[3],
778 const float ray_dir[3],
781 const float obmat[4][4],
783 bool use_backface_culling,
798 float ray_start_local[3], ray_normal_local[3];
811 local_depth = *ray_depth;
857 treedata, em, elem_mask, looptri_num_active, 0.0f, 4, 6, 0,
NULL,
NULL);
883 data.bvhdata = treedata;
890 data.ob_uuid = ob_index;
891 data.hit_list = r_hit_list;
920 if (hit.
dist <= *ray_depth) {
921 *ray_depth = hit.
dist;
973 bool use_backface_culling,
974 bool is_object_active,
1000 bool use_hide =
false;
1012 use_backface_culling,
1035 use_backface_culling,
1046 if (!is_object_active) {
1057 use_backface_culling,
1134 .use_occlusion_test =
params->use_occlusion_test,
1152 const float lpmat[4][4],
1153 const float win_size[2],
1154 const float mval[2],
1166 if (bb_dist_px_sq > dist_px_sq) {
1174 *co =
data->vert[index].co;
1201 v_index[0] = edge->
v1;
1202 v_index[1] = edge->
v2;
1218 for (
int j = 2, j_next = 0; j_next < 3; j = j_next++) {
1219 const MEdge *ed = &medge[mloop[lt->
tri[j]].
e];
1220 const uint tri_edge[2] = {mloop[lt->
tri[j]].
v, mloop[lt->
tri[j_next]].
v};
1221 if (
ELEM(ed->
v1, tri_edge[0], tri_edge[1]) &&
ELEM(ed->
v2, tri_edge[0], tri_edge[1])) {
1223 v_index[j] = mloop[lt->
tri[j]].
e;
1236 v_index[0] = loop[looptri->
tri[0]].
v;
1237 v_index[1] = loop[looptri->
tri[1]].
v;
1238 v_index[2] = loop[looptri->
tri[2]].
v;
1242 const float (*clip_plane)[4],
1243 const int clip_plane_len,
1244 const bool is_persp,
1264 if (dist_sq < *dist_px_sq) {
1266 *dist_px_sq = dist_sq;
1273 const float (*clip_plane)[4],
1274 const int clip_plane_len,
1275 const bool is_persp,
1281 float near_co[3], lambda;
1286 if (lambda <= 0.0f) {
1289 else if (lambda >= 1.0f) {
1298 precalc, clip_plane, clip_plane_len, is_persp, near_co, dist_px_sq, r_co);
1329 const float (*clip_plane)[4],
1330 const int clip_plane_len,
1336 data->get_vert_co(index, &co,
data->userdata);
1345 data->copy_vert_no(index, nearest->
no,
data->userdata);
1346 nearest->
index = index;
1353 const float (*clip_plane)[4],
1354 const int clip_plane_len,
1360 data->get_edge_verts_index(index, vindex,
data->userdata);
1362 const float *v_pair[2];
1363 data->get_vert_co(vindex[0], &v_pair[0],
data->userdata);
1364 data->get_vert_co(vindex[1], &v_pair[1],
data->userdata);
1375 nearest->
index = index;
1382 const float (*clip_plane)[4],
1383 const int clip_plane_len,
1389 data->get_edge_verts_index(index, vindex,
data->userdata);
1391 for (
int i = 2; i--;) {
1392 if (vindex[i] == nearest->
index) {
1402 const float (*clip_plane)[4],
1403 const int clip_plane_len,
1408 if (
data->use_backface_culling) {
1410 data->get_tri_verts_index(index, vindex,
data->userdata);
1412 const float *t0, *t1, *t2;
1413 data->get_vert_co(vindex[0], &t0,
data->userdata);
1414 data->get_vert_co(vindex[1], &t1,
data->userdata);
1415 data->get_vert_co(vindex[2], &t2,
data->userdata);
1423 data->get_tri_edges_index(index, eindex,
data->userdata);
1424 for (
int i = 3; i--;) {
1425 if (eindex[i] != -1) {
1426 if (eindex[i] == nearest->
index) {
1437 const float (*clip_plane)[4],
1438 const int clip_plane_len,
1444 data->get_tri_verts_index(index, vindex,
data->userdata);
1446 if (
data->use_backface_culling) {
1447 const float *t0, *t1, *t2;
1448 data->get_vert_co(vindex[0], &t0,
data->userdata);
1449 data->get_vert_co(vindex[1], &t1,
data->userdata);
1450 data->get_vert_co(vindex[2], &t2,
data->userdata);
1457 for (
int i = 3; i--;) {
1458 if (vindex[i] == nearest->
index) {
1474 const float obmat[4][4],
1490 &neasrest_precalc, lpmat, snapdata->
win_size, snapdata->
mval);
1500 .use_backface_culling = use_backface_culling,
1512 if (sod->
type == SNAP_MESH) {
1525 for (
int i = mp->
totloop; i--; ml++) {
1536 for (
int i = mp->
totloop; i--; ml++) {
1557 BMLoop *l_iter, *l_first;
1570 }
while ((l_iter = l_iter->
next) != l_first);
1583 }
while ((l_iter = l_iter->
next) != l_first);
1587 if (nearest.
index != -1) {
1602 *r_index = nearest.
index;
1612 const float obmat[4][4],
1613 float original_dist_px,
1614 const float prev_co[3],
1615 bool use_backface_culling,
1637 if (sod->
type == SNAP_MESH) {
1655 const float *v_pair[2];
1665 &neasrest_precalc, lpmat, snapdata->
win_size, snapdata->
mval);
1670 .dist_sq =
square_f(original_dist_px),
1687 float range = 1.0f / (2 * e_mode_len - 1);
1689 if (lambda < (range) || (1.0f - range) < lambda) {
1690 int v_id = lambda < 0.5f ? 0 : 1;
1699 nearest.
index = vindex[v_id];
1713 range *= e_mode_len - 1;
1714 if ((range) < lambda && lambda < (1.0f - range)) {
1725 nearest.
index = *r_index;
1732 float v_near[3], va_g[3], vb_g[3];
1738 if (
IN_RANGE(lambda, 0.0f, 1.0f)) {
1752 nearest.
index = *r_index;
1760 if (nearest.
index != -1) {
1768 *r_index = nearest.
index;
1776 const float obmat[4][4],
1791 float lpmat[4][4], dist_px_sq =
square_f(*dist_px);
1796 &neasrest_precalc, lpmat, snapdata->
win_size, snapdata->
mval);
1800 if (use_obedit ==
false) {
1820 if (eBone->layer & arm->
layer) {
1823 bool has_vert_snap =
false;
1841 if (has_vert_snap) {
1863 Bone *bone = pchan->bone;
1866 bool has_vert_snap =
false;
1867 const float *head_vec = pchan->pose_head;
1868 const float *tail_vec = pchan->pose_tail;
1886 if (has_vert_snap) {
1907 *dist_px =
sqrtf(dist_px_sq);
1921 const float obmat[4][4],
1930 bool has_snap =
false;
1938 float dist_px_sq =
square_f(*dist_px);
1945 &neasrest_precalc, lpmat, snapdata->
win_size, snapdata->
mval);
1949 if (use_obedit ==
false) {
1971 for (
int i = clip_plane_len; i--;) {
1972 mul_v4_m4v4(clip_planes_local[i], tobmat, clip_planes[i]);
1978 for (
int u = 0; u < nu->pntsu; u++) {
1983 if (nu->bezt[u].f2 &
SELECT || nu->bezt[u].hide != 0) {
1995 if (!(nu->bezt[u].f1 &
SELECT) &&
2005 if (!(nu->bezt[u].f3 &
SELECT) &&
2018 if (nu->bp[u].f1 &
SELECT || nu->bp[u].hide != 0) {
2032 if (nu->pntsu > 1) {
2057 *dist_px =
sqrtf(dist_px_sq);
2072 const float obmat[4][4],
2099 float dist_px_sq =
square_f(*dist_px);
2109 *dist_px =
sqrtf(dist_px_sq);
2141 float dist_px_sq =
square_f(*dist_px);
2143 float orig_camera_mat[4][4], orig_camera_imat[4][4], imat[4][4];
2167 for (tracking_object = tracking->
objects.
first; tracking_object;
2168 tracking_object = tracking_object->
next) {
2171 float reconstructed_camera_mat[4][4], reconstructed_camera_imat[4][4];
2172 float(*vertex_obmat)[4];
2176 tracking, tracking_object,
CFRA, reconstructed_camera_mat);
2178 invert_m4_m4(reconstructed_camera_imat, reconstructed_camera_mat);
2181 for (track = tracksbase->
first; track; track = track->
next) {
2182 float bundle_pos[3];
2190 vertex_obmat = orig_camera_mat;
2193 mul_m4_v3(reconstructed_camera_imat, bundle_pos);
2194 vertex_obmat = obmat;
2212 *dist_px =
sqrtf(dist_px_sq);
2227 const float obmat[4][4],
2228 bool use_backface_culling,
2247 float dist_px_sq =
square_f(*dist_px);
2290 treedata->
vert = dummy_treedata.
vert;
2294 treedata->
edge = dummy_treedata.
edge;
2306 treedata->
vert = dummy_treedata.
vert;
2341 .use_backface_culling = use_backface_culling,
2346 .dist_sq = dist_px_sq,
2348 int last_index = nearest.
index;
2369 last_index = nearest.
index;
2386 if (treedata->
tree) {
2399 if (last_index != nearest.
index) {
2418 if (treedata->
tree) {
2432 if (nearest.
index != -1) {
2447 *r_index = nearest.
index;
2460 const float obmat[4][4],
2461 bool use_backface_culling,
2485 float dist_px_sq =
square_f(*dist_px);
2502 int verts_num_active = -1;
2513 &treedata, em, verts_mask, verts_num_active, 0.0f, 2, 6, 0,
NULL,
NULL);
2534 int edges_num_active = -1;
2545 &treedata, em, edges_mask, edges_num_active, 0.0f, 2, 6, 0,
NULL,
NULL);
2567 .use_backface_culling = use_backface_culling,
2572 .dist_sq = dist_px_sq,
2598 int last_index = nearest.
index;
2612 if (nearest.
index != -1) {
2616 nearest.
index = last_index;
2620 if (nearest.
index != -1) {
2634 *r_index = nearest.
index;
2665 bool use_backface_culling,
2666 bool UNUSED(is_object_active),
2684 use_backface_culling,
2707 use_backface_culling,
2731 use_backface_culling,
2889 const float ray_start[3],
2890 const float ray_normal[3],
2922 const float ray_start[3],
2923 const float ray_normal[3],
2928 if (ray_depth == -1.0f) {
2933 float ray_depth_prev = ray_depth;
2971 const float ray_start[3],
2972 const float ray_normal[3],
2981 sctx,
depsgraph,
params, ray_start, ray_normal, ray_depth, r_co,
r_no,
NULL,
NULL,
NULL);
2989 const float ray_origin[3],
2990 const float ray_direction[3],
2995 float ray_depth_fallback;
2996 if (ray_depth ==
NULL) {
2998 ray_depth = &ray_depth_fallback;
3008 const ushort snap_to_flag,
3010 const float mval[2],
3011 const float prev_co[3],
3025 bool has_hit =
false;
3030 float no[3] = {0.0f, 0.0f, 0.0f};
3040 float ray_start[3], ray_normal[3];
3088 short elem_test, elem = 0;
3113 float new_clipplane[4];
3121 new_clipplane[3] += 0.01f;
3125 sctx, &
snapdata, ob, obmat,
params->use_backface_culling, &dist_px_tmp, loc, no, &index);
3155 params->use_backface_culling,
3162 if (elem & snap_to_flag) {
3190 const float mval[2],
3191 const float prev_co[3],
3230 const float mval[2],
3231 const float prev_co[3],
3256 const float mval[2],
3261 float ray_start[3], ray_normal[3];
typedef float(TangentPoint)[2]
struct BoundBox * BKE_armature_boundbox_get(struct Object *ob)
BVHTree * BKE_bvhtree_from_mesh_get(struct BVHTreeFromMesh *data, struct Mesh *mesh, const BVHCacheType bvh_cache_type, const int tree_type)
float bvhtree_ray_tri_intersection(const BVHTreeRay *ray, const float m_dist, const float v0[3], const float v1[3], const float v2[3])
BVHTree * BKE_bvhtree_from_editmesh_get(BVHTreeFromEditMesh *data, struct BMEditMesh *em, const int tree_type, const BVHCacheType bvh_cache_type, struct BVHCache **bvh_cache_p, ThreadMutex *mesh_eval_mutex)
BVHTree * bvhtree_from_editmesh_verts_ex(BVHTreeFromEditMesh *data, struct BMEditMesh *em, const BLI_bitmap *mask, int verts_num_active, float epsilon, int tree_type, int axis, const BVHCacheType bvh_cache_type, struct BVHCache **bvh_cache_p, ThreadMutex *mesh_eval_mutex)
BVHTree * bvhtree_from_editmesh_looptri_ex(BVHTreeFromEditMesh *data, struct BMEditMesh *em, const BLI_bitmap *mask, int looptri_num_active, float epsilon, int tree_type, int axis, const BVHCacheType bvh_cache_type, struct BVHCache **bvh_cache_p, ThreadMutex *mesh_eval_mutex)
void free_bvhtree_from_mesh(struct BVHTreeFromMesh *data)
@ BVHTREE_FROM_LOOSEEDGES
@ BVHTREE_FROM_LOOSEVERTS
@ BVHTREE_FROM_EM_LOOPTRI
@ BVHTREE_FROM_LOOPTRI_NO_HIDDEN
bool bvhcache_has_tree(const struct BVHCache *bvh_cache, const BVHTree *tree)
void free_bvhtree_from_editmesh(struct BVHTreeFromEditMesh *data)
BVHTree * bvhtree_from_editmesh_edges_ex(BVHTreeFromEditMesh *data, struct BMEditMesh *em, const BLI_bitmap *edges_mask, int edges_num_active, float epsilon, int tree_type, int axis, const BVHCacheType bvh_cache_type, struct BVHCache **bvh_cache_p, ThreadMutex *mesh_eval_mutex)
struct BoundBox * BKE_curve_boundbox_get(struct Object *ob)
struct ListBase * object_duplilist(struct Depsgraph *depsgraph, struct Scene *sce, struct Object *ob)
void free_object_duplilist(struct ListBase *lb)
BMEditMesh * BKE_editmesh_from_object(struct Object *ob)
Return the BMEditMesh for a given object.
bool BKE_geometry_set_has_instances(const struct GeometrySet *geometry_set)
struct BoundBox * BKE_mesh_boundbox_get(struct Object *ob)
const struct MLoopTri * BKE_mesh_runtime_looptri_ensure(struct Mesh *mesh)
General operations, lookup, etc. for blender objects.
struct MovieClip * BKE_object_movieclip_get(struct Scene *scene, struct Object *ob, bool use_default)
struct Mesh * BKE_object_get_evaluated_mesh(struct Object *object)
bool BKE_object_is_in_editmode(const struct Object *ob)
void BKE_tracking_get_camera_object_matrix(struct Object *camera_object, float mat[4][4])
void BKE_tracking_camera_get_reconstructed_interpolate(struct MovieTracking *tracking, struct MovieTrackingObject *object, float framenr, float mat[4][4])
struct ListBase * BKE_tracking_object_get_tracks(struct MovieTracking *tracking, struct MovieTrackingObject *object)
#define BLI_BITMAP_NEW(_tot, _alloc_string)
void BLI_ghash_free(GHash *gh, GHashKeyFreeFP keyfreefp, GHashValFreeFP valfreefp)
GHash * BLI_ghash_ptr_new(const char *info) ATTR_MALLOC ATTR_WARN_UNUSED_RESULT
bool BLI_ghash_ensure_p(GHash *gh, void *key, void ***r_val) ATTR_WARN_UNUSED_RESULT
void * BLI_ghash_lookup(GHash *gh, const void *key) ATTR_WARN_UNUSED_RESULT
#define BVH_RAYCAST_DIST_MAX
int BLI_bvhtree_find_nearest_projected(BVHTree *tree, float projmat[4][4], float winsize[2], float mval[2], float clip_planes[6][4], int clip_plane_len, BVHTreeNearest *nearest, BVHTree_NearestProjectedCallback callback, void *userdata)
void BLI_bvhtree_free(BVHTree *tree)
void(* BVHTree_RayCastCallback)(void *userdata, int index, const BVHTreeRay *ray, BVHTreeRayHit *hit)
void BLI_bvhtree_ray_cast_all(BVHTree *tree, const float co[3], const float dir[3], float radius, float hit_dist, BVHTree_RayCastCallback callback, void *userdata)
int BLI_bvhtree_ray_cast(BVHTree *tree, const float co[3], const float dir[3], float radius, BVHTreeRayHit *hit, BVHTree_RayCastCallback callback, void *userdata)
#define LISTBASE_FOREACH(type, var, list)
void void BLI_listbase_sort(struct ListBase *listbase, int(*cmp)(const void *, const void *)) ATTR_NONNULL(1
void BLI_addtail(struct ListBase *listbase, void *vlink) ATTR_NONNULL(1)
MINLINE float square_f(float a)
void plane_from_point_normal_v3(float r_plane[4], const float plane_co[3], const float plane_no[3])
float dist_squared_to_projected_aabb(struct DistProjectedAABBPrecalc *data, const float bbmin[3], const float bbmax[3], bool r_axis_closest[3])
MINLINE int poly_to_tri_count(const int poly_count, const int corner_count)
bool isect_ray_line_v3(const float ray_origin[3], const float ray_direction[3], const float v0[3], const float v1[3], float *r_lambda)
void cross_tri_v3(float n[3], const float v1[3], const float v2[3], const float v3[3])
bool isect_ray_aabb_v3_simple(const float orig[3], const float dir[3], const float bb_min[3], const float bb_max[3], float *tmin, float *tmax)
void dist_squared_to_projected_aabb_precalc(struct DistProjectedAABBPrecalc *precalc, const float projmat[4][4], const float winsize[2], const float mval[2])
float line_point_factor_v3(const float p[3], const float l1[3], const float l2[3])
void planes_from_projmat(const float mat[4][4], float left[4], float right[4], float top[4], float bottom[4], float near[4], float far[4])
bool isect_point_planes_v3_negated(const float(*planes)[4], const int totplane, const float p[3])
void mul_v4_m4v4(float r[4], const float M[4][4], const float v[4])
void mul_m3_v3(const float M[3][3], float r[3])
void mul_m4_m4m4(float R[4][4], const float A[4][4], const float B[4][4])
void transpose_m4_m4(float R[4][4], const float M[4][4])
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 transpose_m3_m4(float R[3][3], const float M[4][4])
void copy_m4_m4(float m1[4][4], const float m2[4][4])
void mul_transposed_mat3_m4_v3(const float M[4][4], float r[3])
void mul_v3_m4v3(float r[3], const float M[4][4], const float v[3])
MINLINE void copy_v4_v4(float r[4], const float a[4])
void interp_v3_v3v3(float r[3], const float a[3], const float b[3], const float t)
void minmax_v3v3_v3(float min[3], float max[3], const float vec[3])
MINLINE void madd_v3_v3fl(float r[3], const float a[3], float f)
MINLINE float len_squared_v2v2(const float a[2], const float b[2]) 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 normal_short_to_float_v3(float r[3], const short n[3])
MINLINE void mul_v2_fl(float r[2], float f)
MINLINE void copy_v2_v2(float r[2], const float a[2])
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 float normalize_v3_v3(float r[3], const float a[3])
MINLINE float mul_project_m4_v3_zfac(const float mat[4][4], const float co[3]) ATTR_WARN_UNUSED_RESULT
void mid_v3_v3v3(float r[3], const float a[3], const float b[3])
MINLINE void madd_v3_v3v3fl(float r[3], const float a[3], const float b[3], float f)
MINLINE float dot_m4_v3_row_x(const float M[4][4], const float a[3]) ATTR_WARN_UNUSED_RESULT
MINLINE float dot_m4_v3_row_y(const float M[4][4], const float a[3]) ATTR_WARN_UNUSED_RESULT
MINLINE void negate_v4(float r[4])
void BLI_memarena_free(struct MemArena *ma) ATTR_NONNULL(1)
#define BLI_MEMARENA_STD_BUFSIZE
struct MemArena * BLI_memarena_new(const size_t bufsize, const char *name) ATTR_WARN_UNUSED_RESULT ATTR_NONNULL(2) ATTR_MALLOC
void * BLI_memarena_calloc(struct MemArena *ma, size_t size) ATTR_WARN_UNUSED_RESULT ATTR_NONNULL(1) ATTR_MALLOC ATTR_ALLOC_SIZE(2)
pthread_mutex_t ThreadMutex
#define INIT_MINMAX(min, max)
#define IN_RANGE(a, b, c)
struct Depsgraph Depsgraph
struct Object * DEG_get_original_object(struct Object *object)
bool DEG_is_evaluated_object(const struct Object *object)
struct ViewLayer * DEG_get_input_view_layer(const Depsgraph *graph)
struct Object * DEG_get_evaluated_object(const struct Depsgraph *depsgraph, struct Object *object)
Object is a sort of wrapper for general info.
#define BA_TRANSFORM_LOCKED_IN_PLACE
@ BA_SNAP_FIX_DEPS_FIASCO
#define SCE_SNAP_MODE_FACE
#define SCE_SNAP_MODE_EDGE_PERPENDICULAR
#define SCE_SNAP_MODE_EDGE_MIDPOINT
#define SCE_SNAP_MODE_VERTEX
#define SCE_SNAP_MODE_EDGE
#define BASE_VISIBLE(v3d, base)
#define XRAY_ENABLED(v3d)
#define XRAY_FLAG_ENABLED(v3d)
bool ED_view3d_win_to_ray_clipped_ex(struct Depsgraph *depsgraph, const struct ARegion *region, const struct View3D *v3d, const float mval[2], float r_ray_co[3], float r_ray_normal[3], float r_ray_start[3], bool do_clip)
_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 type
_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 BM_FACE_FIRST_LOOP(p)
#define BM_elem_index_get(ele)
int BM_iter_mesh_bitmap_from_filter_tessface(BMesh *bm, BLI_bitmap *bitmap, bool(*test_fn)(BMFace *, void *user_data), void *user_data)
int BM_iter_mesh_bitmap_from_filter(const char itype, BMesh *bm, BLI_bitmap *bitmap, bool(*test_fn)(BMElem *, void *user_data), void *user_data)
#define BM_ITER_MESH(ele, iter, bm, itype)
ATTR_WARN_UNUSED_RESULT BMesh * bm
void BM_mesh_elem_table_ensure(BMesh *bm, const char htype)
void BM_mesh_elem_index_ensure(BMesh *bm, const char htype)
BLI_INLINE BMFace * BM_face_at_index(BMesh *bm, const int index)
BLI_INLINE BMEdge * BM_edge_at_index(BMesh *bm, const int index)
BLI_INLINE BMVert * BM_vert_at_index(BMesh *bm, const int index)
ATTR_WARN_UNUSED_RESULT const BMVert * v2
ATTR_WARN_UNUSED_RESULT const BMVert * v
void sort(btMatrix3x3 &U, btVector3 &sigma, btMatrix3x3 &V, int t)
Helper function of 3X3 SVD for sorting singular values.
SIMD_FORCE_INLINE const btScalar & w() const
Return the w value.
const Depsgraph * depsgraph
IconTextureDrawCall normal
void(* MEM_freeN)(void *vmemh)
void *(* MEM_callocN)(size_t len, const char *str)
void *(* MEM_mallocN)(size_t len, const char *str)
static void clear(Message *msg)
struct Mesh * mesh_eval_final
struct Mesh * mesh_eval_cage
struct BMLoop *(* looptris)[3]
BVHTree_RayCastCallback raycast_callback
BVHTree_RayCastCallback raycast_callback
const struct MEdge * edge
const struct MLoop * loop
const struct MVert * vert
const struct MLoopTri * looptri
struct BVHCache * bvh_cache
struct BMEditMesh * edit_mesh
struct MovieTracking tracking
struct MovieTrackingObject * next
struct MovieTrackingTrack * next
Nearest2DCopyVertNoCallback copy_vert_no
bool use_backface_culling
Nearest2DGetTriVertsCallback get_tri_verts_index
Nearest2DGetTriEdgesCallback get_tri_edges_index
Nearest2DGetEdgeVertsCallback get_edge_verts_index
Nearest2DGetVertCoCallback get_vert_co
struct GeometrySet * geometry_set_eval
BVHTree_RayCastCallback raycast_callback
float clip_plane[MAX_CLIPPLANE_LEN][4]
const struct ARegion * region
struct SnapObjectContext::@599::@600 edit_mesh
struct SnapObjectContext::@598 cache
struct SnapObjectContext::@597 v3d_data
bool(* test_face_fn)(BMFace *, void *user_data)
bool(* test_edge_fn)(BMEdge *, void *user_data)
bool(* test_vert_fn)(BMVert *, void *user_data)
const struct View3D * v3d
struct SnapObjectContext::@599 callbacks
GHash * data_to_object_map
const struct MPoly * poly
BVHTreeFromEditMesh treedata_editmesh
BVHTreeFromMesh treedata_mesh
struct Mesh_Runtime * mesh_runtime
enum SnapObjectData::@590 type