Cleanup: transform_snap_object: Remove unused variables and reuse the precalc used to test the distance to the projected bound_box.
This commit is contained in:
parent
5be0dfe086
commit
375c6a7967
|
@ -1199,16 +1199,15 @@ static bool snapCurve(
|
|||
return retval;
|
||||
}
|
||||
|
||||
float lpmat[4][4], dist_px_sq;
|
||||
bool is_persp = snapdata->view_proj == VIEW_PROJ_PERSP;
|
||||
float dist_px_sq = SQUARE(*dist_px);
|
||||
float lpmat[4][4];
|
||||
mul_m4_m4m4(lpmat, snapdata->pmat, obmat);
|
||||
|
||||
struct DistProjectedAABBPrecalc neasrest_precalc;
|
||||
dist_squared_to_projected_aabb_precalc(
|
||||
&neasrest_precalc, lpmat, snapdata->win_size, snapdata->mval);
|
||||
|
||||
bool is_persp = snapdata->view_proj == VIEW_PROJ_PERSP;
|
||||
dist_px_sq = SQUARE(*dist_px);
|
||||
|
||||
for (Nurb *nu = (use_obedit ? cu->editnurb->nurbs.first : cu->nurb.first); nu; nu = nu->next) {
|
||||
for (int u = 0; u < nu->pntsu; u++) {
|
||||
switch (snapdata->snap_to) {
|
||||
|
@ -1432,8 +1431,6 @@ static bool snapMesh(
|
|||
/* return args */
|
||||
float r_loc[3], float r_no[3])
|
||||
{
|
||||
// #define USE_RAY_MIN
|
||||
|
||||
bool retval = false;
|
||||
|
||||
if (snapdata->snap_to == SCE_SNAP_MODE_EDGE) {
|
||||
|
@ -1447,39 +1444,20 @@ static bool snapMesh(
|
|||
}
|
||||
}
|
||||
|
||||
float imat[4][4];
|
||||
float timat[3][3]; /* transpose inverse matrix for normals */
|
||||
float ray_normal_local[3];
|
||||
|
||||
|
||||
invert_m4_m4(imat, obmat);
|
||||
transpose_m3_m4(timat, imat);
|
||||
|
||||
copy_v3_v3(ray_normal_local, snapdata->ray_dir);
|
||||
|
||||
mul_mat3_m4_v3(imat, ray_normal_local);
|
||||
|
||||
#ifdef USE_RAY_MIN
|
||||
/* local scale in normal direction */
|
||||
const float local_scale = normalize_v3(ray_normal_local);
|
||||
#endif
|
||||
|
||||
float lpmat[4][4];
|
||||
float ray_org_local[3];
|
||||
|
||||
mul_m4_m4m4(lpmat, snapdata->pmat, obmat);
|
||||
#ifdef USE_RAY_MIN
|
||||
const float ray_min_dist = snapdata->depth_range[0] * local_scale;
|
||||
#endif
|
||||
copy_v3_v3(ray_org_local, snapdata->ray_origin);
|
||||
mul_m4_v3(imat, ray_org_local);
|
||||
|
||||
Nearest2dUserData neasrest2d;
|
||||
dist_squared_to_projected_aabb_precalc(
|
||||
&neasrest2d.data_precalc, lpmat, snapdata->win_size, snapdata->mval);
|
||||
|
||||
/* Test BoundBox */
|
||||
BoundBox *bb = BKE_mesh_boundbox_get(ob);
|
||||
if (bb) {
|
||||
bool dummy[3] = {true, true, true};
|
||||
/* In vertex and edges you need to get the pixel distance from ray to BoundBox, see: T46099, T46816 */
|
||||
float dist_px_sq = dist_squared_to_projected_aabb_simple(
|
||||
lpmat, snapdata->win_size, snapdata->mval, bb->vec[0], bb->vec[6]);
|
||||
float dist_px_sq = dist_squared_to_projected_aabb(
|
||||
&neasrest2d.data_precalc, bb->vec[0], bb->vec[6], dummy);
|
||||
|
||||
if (dist_px_sq > SQUARE(*dist_px)) {
|
||||
return retval;
|
||||
|
@ -1582,22 +1560,24 @@ static bool snapMesh(
|
|||
* And more... ray_depth is being confused with Z-depth here... (varies only the precision) */
|
||||
const float ray_depth_max_global = *ray_depth + snapdata->depth_range[0];
|
||||
|
||||
Nearest2dUserData neasrest2d = {
|
||||
.r_axis_closest = {1.0f, 1.0f, 1.0f},
|
||||
.is_persp = snapdata->view_proj == VIEW_PROJ_PERSP,
|
||||
.depth_range = {snapdata->depth_range[0], ray_depth_max_global},
|
||||
.snap_to = snapdata->snap_to,
|
||||
.userdata = treedata,
|
||||
.get_vert_co = (Nearest2DGetVertCoCallback)cb_mvert_co_get,
|
||||
.get_edge_verts_index = (Nearest2DGetEdgeVertsCallback)cb_medge_verts_get,
|
||||
.get_tri_verts_index = (Nearest2DGetTriVertsCallback)cb_mlooptri_verts_get,
|
||||
.get_tri_edges_index = (Nearest2DGetTriEdgesCallback)cb_mlooptri_edges_get,
|
||||
.copy_vert_no = (Nearest2DCopyVertNoCallback)cb_mvert_no_copy,
|
||||
.dist_px_sq = SQUARE(*dist_px),
|
||||
.index = -1};
|
||||
neasrest2d.r_axis_closest[0] = true;
|
||||
neasrest2d.r_axis_closest[1] = true;
|
||||
neasrest2d.r_axis_closest[2] = true;
|
||||
|
||||
dist_squared_to_projected_aabb_precalc(
|
||||
&neasrest2d.data_precalc, lpmat, snapdata->win_size, snapdata->mval);
|
||||
neasrest2d.is_persp = snapdata->view_proj == VIEW_PROJ_PERSP;
|
||||
|
||||
neasrest2d.depth_range[0] = snapdata->depth_range[0];
|
||||
neasrest2d.depth_range[1] = ray_depth_max_global;
|
||||
|
||||
neasrest2d.snap_to = snapdata->snap_to;
|
||||
neasrest2d.userdata = treedata;
|
||||
neasrest2d.get_vert_co = (Nearest2DGetVertCoCallback)cb_mvert_co_get;
|
||||
neasrest2d.get_edge_verts_index = (Nearest2DGetEdgeVertsCallback)cb_medge_verts_get;
|
||||
neasrest2d.get_tri_verts_index = (Nearest2DGetTriVertsCallback)cb_mlooptri_verts_get;
|
||||
neasrest2d.get_tri_edges_index = (Nearest2DGetTriEdgesCallback)cb_mlooptri_edges_get;
|
||||
neasrest2d.copy_vert_no = (Nearest2DCopyVertNoCallback)cb_mvert_no_copy;
|
||||
neasrest2d.dist_px_sq = SQUARE(*dist_px);
|
||||
neasrest2d.index = -1;
|
||||
|
||||
|
||||
if (bvhtree[1]) {
|
||||
|
@ -1622,6 +1602,11 @@ static bool snapMesh(
|
|||
}
|
||||
|
||||
if (neasrest2d.index != -1) {
|
||||
float imat[4][4];
|
||||
float timat[3][3]; /* transpose inverse matrix for normals */
|
||||
invert_m4_m4(imat, obmat);
|
||||
transpose_m3_m4(timat, imat);
|
||||
|
||||
copy_v3_v3(r_loc, neasrest2d.co);
|
||||
mul_m4_v3(obmat, r_loc);
|
||||
if (r_no) {
|
||||
|
@ -1659,17 +1644,6 @@ static bool snapEditMesh(
|
|||
}
|
||||
}
|
||||
|
||||
float imat[4][4];
|
||||
float timat[3][3]; /* transpose inverse matrix for normals */
|
||||
float ray_normal_local[3];
|
||||
|
||||
invert_m4_m4(imat, obmat);
|
||||
transpose_m3_m4(timat, imat);
|
||||
|
||||
copy_v3_v3(ray_normal_local, snapdata->ray_dir);
|
||||
|
||||
mul_mat3_m4_v3(imat, ray_normal_local);
|
||||
|
||||
SnapObjectData_EditMesh *sod = NULL;
|
||||
BVHTreeFromEditMesh *treedata = NULL;
|
||||
|
||||
|
@ -1741,12 +1715,8 @@ static bool snapEditMesh(
|
|||
return retval;
|
||||
}
|
||||
|
||||
float ray_org_local[3];
|
||||
copy_v3_v3(ray_org_local, snapdata->ray_origin);
|
||||
mul_m4_v3(imat, ray_org_local);
|
||||
|
||||
Nearest2dUserData neasrest2d = {
|
||||
.r_axis_closest = {1.0f, 1.0f, 1.0f},
|
||||
.r_axis_closest = {true, true, true},
|
||||
.is_persp = snapdata->view_proj == VIEW_PROJ_PERSP,
|
||||
.depth_range = {snapdata->depth_range[0], *ray_depth + snapdata->depth_range[0]},
|
||||
.snap_to = snapdata->snap_to,
|
||||
|
@ -1771,6 +1741,11 @@ static bool snapEditMesh(
|
|||
cb_walk_parent_snap_project, cb_walk_leaf, cb_nearest_walk_order, &neasrest2d);
|
||||
|
||||
if (neasrest2d.index != -1) {
|
||||
float imat[4][4];
|
||||
float timat[3][3]; /* transpose inverse matrix for normals */
|
||||
invert_m4_m4(imat, obmat);
|
||||
transpose_m3_m4(timat, imat);
|
||||
|
||||
copy_v3_v3(r_loc, neasrest2d.co);
|
||||
mul_m4_v3(obmat, r_loc);
|
||||
if (r_no) {
|
||||
|
|
Loading…
Reference in New Issue