Merge branch 'master' into blender2.8

This commit is contained in:
Germano Cavalcante 2018-05-04 11:58:55 -03:00
commit 26d87bd577
4 changed files with 19 additions and 44 deletions

View File

@ -57,9 +57,6 @@ typedef struct BVHTreeFromEditMesh {
struct BMEditMesh *em;
/* radius for raycast */
float sphere_radius;
/* Private data */
bool cached;
@ -87,9 +84,6 @@ typedef struct BVHTreeFromMesh {
bool loop_allocated;
bool looptri_allocated;
/* radius for raycast */
float sphere_radius;
/* Private data */
bool cached;

View File

@ -194,10 +194,10 @@ static void mesh_faces_spherecast(void *userdata, int index, const BVHTreeRay *r
do {
float dist;
if (data->sphere_radius == 0.0f)
if (ray->radius == 0.0f)
dist = bvhtree_ray_tri_intersection(ray, hit->dist, t0, t1, t2);
else
dist = bvhtree_sphereray_tri_intersection(ray, data->sphere_radius, hit->dist, t0, t1, t2);
dist = bvhtree_sphereray_tri_intersection(ray, ray->radius, hit->dist, t0, t1, t2);
if (dist >= 0 && dist < hit->dist) {
hit->index = index;
@ -226,10 +226,10 @@ static void mesh_looptri_spherecast(void *userdata, int index, const BVHTreeRay
};
float dist;
if (data->sphere_radius == 0.0f)
if (ray->radius == 0.0f)
dist = bvhtree_ray_tri_intersection(ray, hit->dist, UNPACK3(vtri_co));
else
dist = bvhtree_sphereray_tri_intersection(ray, data->sphere_radius, hit->dist, UNPACK3(vtri_co));
dist = bvhtree_sphereray_tri_intersection(ray, ray->radius, hit->dist, UNPACK3(vtri_co));
if (dist >= 0 && dist < hit->dist) {
hit->index = index;
@ -254,10 +254,10 @@ static void editmesh_looptri_spherecast(void *userdata, int index, const BVHTree
{
float dist;
if (data->sphere_radius == 0.0f)
if (ray->radius == 0.0f)
dist = bvhtree_ray_tri_intersection(ray, hit->dist, t0, t1, t2);
else
dist = bvhtree_sphereray_tri_intersection(ray, data->sphere_radius, hit->dist, t0, t1, t2);
dist = bvhtree_sphereray_tri_intersection(ray, ray->radius, hit->dist, t0, t1, t2);
if (dist >= 0 && dist < hit->dist) {
hit->index = index;
@ -340,7 +340,7 @@ static void mesh_edges_spherecast(void *userdata, int index, const BVHTreeRay *r
const MVert *vert = data->vert;
const MEdge *edge = &data->edge[index];
const float radius_sq = SQUARE(data->sphere_radius);
const float radius_sq = SQUARE(ray->radius);
float dist;
const float *v1, *v2, *r1;
float r2[3], i1[3], i2[3];
@ -448,7 +448,7 @@ static BVHTree *bvhtree_from_mesh_verts_create_tree(
}
static void bvhtree_from_mesh_verts_setup_data(
BVHTreeFromMesh *data, BVHTree *tree, const bool is_cached, float epsilon,
BVHTreeFromMesh *data, BVHTree *tree, const bool is_cached,
const MVert *vert, const bool vert_allocated)
{
memset(data, 0, sizeof(*data));
@ -464,8 +464,6 @@ static void bvhtree_from_mesh_verts_setup_data(
data->vert = vert;
data->vert_allocated = vert_allocated;
//data->face = DM_get_tessface_array(dm, &data->face_allocated); /* XXX WHY???? */
data->sphere_radius = epsilon;
}
/* Builds a bvh tree where nodes are the vertices of the given em */
@ -515,7 +513,7 @@ BVHTree *bvhtree_from_mesh_verts_ex(
/* Setup BVHTreeFromMesh */
bvhtree_from_mesh_verts_setup_data(
data, tree, false, epsilon, vert, vert_allocated);
data, tree, false, vert, vert_allocated);
return tree;
}
@ -599,7 +597,7 @@ static BVHTree *bvhtree_from_mesh_edges_create_tree(
static void bvhtree_from_mesh_edges_setup_data(
BVHTreeFromMesh *data, BVHTree *tree,
const bool is_cached, float epsilon,
const bool is_cached,
const MVert *vert, const bool vert_allocated,
const MEdge *edge, const bool edge_allocated)
{
@ -616,8 +614,6 @@ static void bvhtree_from_mesh_edges_setup_data(
data->vert_allocated = vert_allocated;
data->edge = edge;
data->edge_allocated = edge_allocated;
data->sphere_radius = epsilon;
}
/* Builds a bvh tree where nodes are the edges of the given em */
@ -672,7 +668,7 @@ BVHTree *bvhtree_from_mesh_edges_ex(
/* Setup BVHTreeFromMesh */
bvhtree_from_mesh_edges_setup_data(
data, tree, false, epsilon, vert, vert_allocated, edge, edge_allocated);
data, tree, false, vert, vert_allocated, edge, edge_allocated);
return tree;
}
@ -730,7 +726,7 @@ static BVHTree *bvhtree_from_mesh_faces_create_tree(
}
static void bvhtree_from_mesh_faces_setup_data(
BVHTreeFromMesh *data, BVHTree *tree, const bool is_cached, float epsilon,
BVHTreeFromMesh *data, BVHTree *tree, const bool is_cached,
const MVert *vert, const bool vert_allocated,
const MFace *face, const bool face_allocated)
{
@ -746,8 +742,6 @@ static void bvhtree_from_mesh_faces_setup_data(
data->vert_allocated = vert_allocated;
data->face = face;
data->face_allocated = face_allocated;
data->sphere_radius = epsilon;
}
/**
@ -770,7 +764,7 @@ BVHTree *bvhtree_from_mesh_faces_ex(
/* Setup BVHTreeFromMesh */
bvhtree_from_mesh_faces_setup_data(
data, tree, false, epsilon, vert, vert_allocated, face, face_allocated);
data, tree, false, vert, vert_allocated, face, face_allocated);
return tree;
}
@ -876,7 +870,7 @@ static BVHTree *bvhtree_from_mesh_looptri_create_tree(
}
static void bvhtree_from_mesh_looptri_setup_data(
BVHTreeFromMesh *data, BVHTree *tree, const bool is_cached, float epsilon,
BVHTreeFromMesh *data, BVHTree *tree, const bool is_cached,
const MVert *vert, const bool vert_allocated,
const MLoop *mloop, const bool loop_allocated,
const MLoopTri *looptri, const bool looptri_allocated)
@ -895,8 +889,6 @@ static void bvhtree_from_mesh_looptri_setup_data(
data->loop_allocated = loop_allocated;
data->looptri = looptri;
data->looptri_allocated = looptri_allocated;
data->sphere_radius = epsilon;
}
/**
@ -941,7 +933,6 @@ BVHTree *bvhtree_from_editmesh_looptri_ex(
data->tree = tree;
data->nearest_callback = editmesh_looptri_nearest_point;
data->raycast_callback = editmesh_looptri_spherecast;
data->sphere_radius = 0.0f;
data->em = em;
data->cached = bvhCache != NULL;
}
@ -977,7 +968,7 @@ BVHTree *bvhtree_from_mesh_looptri_ex(
/* Setup BVHTreeFromMesh */
bvhtree_from_mesh_looptri_setup_data(
data, tree, false, epsilon,
data, tree, false,
vert, vert_allocated,
mloop, loop_allocated,
looptri, looptri_allocated);
@ -1145,8 +1136,6 @@ BVHTree *bvhtree_from_mesh_get(
data->loop_allocated = loop_allocated;
data->looptri_allocated = looptri_allocated;
data->sphere_radius = 0.0;
data->cached = true;
}
else {

View File

@ -3491,8 +3491,7 @@ static void shrinkwrap_get_tarmat(struct Depsgraph *UNUSED(depsgraph), bConstrai
break;
}
treeData.sphere_radius = scon->dist;
if (BKE_shrinkwrap_project_normal(0, co, no, treeData.sphere_radius, &transform, treeData.tree,
if (BKE_shrinkwrap_project_normal(0, co, no, scon->dist, &transform, treeData.tree,
&hit, treeData.raycast_callback, &treeData) == false)
{
fail = true;

View File

@ -544,7 +544,6 @@ void BKE_mesh_remap_calc_verts_from_dm(
bvhtree_from_mesh_get(&treedata, dm_src, BVHTREE_FROM_LOOPTRI, 2);
if (mode == MREMAP_MODE_VERT_POLYINTERP_VNORPROJ) {
treedata.sphere_radius = ray_radius;
for (i = 0; i < numverts_dst; i++) {
copy_v3_v3(tmp_co, verts_dst[i].co);
normal_short_to_float_v3(tmp_no, verts_dst[i].no);
@ -909,10 +908,8 @@ void BKE_mesh_remap_calc_edges_from_dm(
interp_v3_v3v3_slerp_safe(tmp_no, v1_no, v2_no, fac);
while (n--) {
float radius = (ray_radius / w);
treedata.sphere_radius = radius;
if (mesh_remap_bvhtree_query_raycast(
&treedata, &rayhit, tmp_co, tmp_no, radius, max_dist, &hit_dist))
&treedata, &rayhit, tmp_co, tmp_no, ray_radius / w, max_dist, &hit_dist))
{
weights[rayhit.index] += w;
totweights += w;
@ -1565,10 +1562,8 @@ void BKE_mesh_remap_calc_loops_from_dm(
}
while (n--) {
float radius = ray_radius / w;
tdata->sphere_radius = radius;
if (mesh_remap_bvhtree_query_raycast(
tdata, &rayhit, tmp_co, tmp_no, radius, max_dist, &hit_dist))
tdata, &rayhit, tmp_co, tmp_no, ray_radius / w, max_dist, &hit_dist))
{
islands_res[tindex][plidx_dst].factor = (hit_dist ? (1.0f / hit_dist) : 1e18f) * w;
islands_res[tindex][plidx_dst].hit_dist = hit_dist;
@ -2051,7 +2046,6 @@ void BKE_mesh_remap_calc_polys_from_dm(
BLI_space_transform_apply_normal(space_transform, tmp_no);
}
treedata.sphere_radius = ray_radius;
if (mesh_remap_bvhtree_query_raycast(
&treedata, &rayhit, tmp_co, tmp_no, ray_radius, max_dist, &hit_dist))
{
@ -2201,9 +2195,8 @@ void BKE_mesh_remap_calc_polys_from_dm(
/* At this point, tmp_co is a point on our poly surface, in mesh_src space! */
while (n--) {
treedata.sphere_radius = ray_radius / w;
if (mesh_remap_bvhtree_query_raycast(
&treedata, &rayhit, tmp_co, tmp_no, treedata.sphere_radius, max_dist, &hit_dist))
&treedata, &rayhit, tmp_co, tmp_no, ray_radius / w, max_dist, &hit_dist))
{
const MLoopTri *lt = &treedata.looptri[rayhit.index];