Cleanup: reference some snap parameters in the snap context itself
This decreases the number of parameters in functions and makes important variables available in more places.
This commit is contained in:
parent
6b4ca78108
commit
eed48a7322
Notes:
blender-bot
2023-03-24 17:05:22 +01:00
Referenced by commit 5e9dba822d
, Cleanup: Avoid error prone pointer storage in SnapObjectParams
|
@ -125,6 +125,8 @@ struct SnapObjectContext {
|
|||
const ARegion *region;
|
||||
const View3D *v3d;
|
||||
|
||||
const struct SnapObjectParams *params;
|
||||
|
||||
float mval[2];
|
||||
float pmat[4][4]; /* perspective matrix */
|
||||
float win_size[2]; /* win x and y */
|
||||
|
@ -444,8 +446,6 @@ static SnapObjectData *snap_object_data_editmesh_get(SnapObjectContext *sctx,
|
|||
typedef void (*IterSnapObjsCallback)(SnapObjectContext *sctx,
|
||||
Object *ob_eval,
|
||||
float obmat[4][4],
|
||||
eSnapEditType edit_mode_type,
|
||||
bool use_backface_culling,
|
||||
bool is_object_active,
|
||||
void *data);
|
||||
|
||||
|
@ -453,20 +453,16 @@ typedef void (*IterSnapObjsCallback)(SnapObjectContext *sctx,
|
|||
* Walks through all objects in the scene to create the list of objects to snap.
|
||||
*/
|
||||
static void iter_snap_objects(SnapObjectContext *sctx,
|
||||
const struct SnapObjectParams *params,
|
||||
IterSnapObjsCallback sob_callback,
|
||||
void *data)
|
||||
{
|
||||
ViewLayer *view_layer = DEG_get_input_view_layer(sctx->runtime.depsgraph);
|
||||
const eSnapSelect snap_select = params->snap_select;
|
||||
const eSnapEditType edit_mode_type = params->edit_mode_type;
|
||||
const bool use_backface_culling = params->use_backface_culling;
|
||||
const eSnapSelect snap_select = sctx->runtime.params->snap_select;
|
||||
|
||||
Base *base_act = view_layer->basact;
|
||||
if (snap_select == SNAP_ONLY_ACTIVE) {
|
||||
Object *obj_eval = DEG_get_evaluated_object(sctx->runtime.depsgraph, base_act->object);
|
||||
sob_callback(
|
||||
sctx, obj_eval, obj_eval->obmat, edit_mode_type, use_backface_culling, true, data);
|
||||
sob_callback(sctx, obj_eval, obj_eval->obmat, true, data);
|
||||
return;
|
||||
}
|
||||
|
||||
|
@ -504,24 +500,12 @@ static void iter_snap_objects(SnapObjectContext *sctx,
|
|||
ListBase *lb = object_duplilist(sctx->runtime.depsgraph, sctx->scene, obj_eval);
|
||||
for (DupliObject *dupli_ob = lb->first; dupli_ob; dupli_ob = dupli_ob->next) {
|
||||
BLI_assert(DEG_is_evaluated_object(dupli_ob->ob));
|
||||
sob_callback(sctx,
|
||||
dupli_ob->ob,
|
||||
dupli_ob->mat,
|
||||
edit_mode_type,
|
||||
use_backface_culling,
|
||||
is_object_active,
|
||||
data);
|
||||
sob_callback(sctx, dupli_ob->ob, dupli_ob->mat, is_object_active, data);
|
||||
}
|
||||
free_object_duplilist(lb);
|
||||
}
|
||||
|
||||
sob_callback(sctx,
|
||||
obj_eval,
|
||||
obj_eval->obmat,
|
||||
edit_mode_type,
|
||||
use_backface_culling,
|
||||
is_object_active,
|
||||
data);
|
||||
sob_callback(sctx, obj_eval, obj_eval->obmat, is_object_active, data);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -688,7 +672,6 @@ static bool raycastMesh(SnapObjectContext *sctx,
|
|||
const float obmat[4][4],
|
||||
const uint ob_index,
|
||||
bool use_hide,
|
||||
bool use_backface_culling,
|
||||
/* read/write args */
|
||||
float *ray_depth,
|
||||
/* return args */
|
||||
|
@ -790,8 +773,9 @@ static bool raycastMesh(SnapObjectContext *sctx,
|
|||
ray_normal_local,
|
||||
0.0f,
|
||||
&hit,
|
||||
use_backface_culling ? mesh_looptri_raycast_backface_culling_cb :
|
||||
treedata->raycast_callback,
|
||||
sctx->runtime.params->use_backface_culling ?
|
||||
mesh_looptri_raycast_backface_culling_cb :
|
||||
treedata->raycast_callback,
|
||||
treedata) != -1) {
|
||||
hit.dist += len_diff;
|
||||
hit.dist /= local_scale;
|
||||
|
@ -827,7 +811,6 @@ static bool raycastEditMesh(SnapObjectContext *sctx,
|
|||
BMEditMesh *em,
|
||||
const float obmat[4][4],
|
||||
const uint ob_index,
|
||||
bool use_backface_culling,
|
||||
/* read/write args */
|
||||
float *ray_depth,
|
||||
/* return args */
|
||||
|
@ -960,8 +943,9 @@ static bool raycastEditMesh(SnapObjectContext *sctx,
|
|||
ray_normal_local,
|
||||
0.0f,
|
||||
&hit,
|
||||
use_backface_culling ? editmesh_looptri_raycast_backface_culling_cb :
|
||||
treedata->raycast_callback,
|
||||
sctx->runtime.params->use_backface_culling ?
|
||||
editmesh_looptri_raycast_backface_culling_cb :
|
||||
treedata->raycast_callback,
|
||||
treedata) != -1) {
|
||||
hit.dist += len_diff;
|
||||
hit.dist /= local_scale;
|
||||
|
@ -1014,13 +998,8 @@ struct RaycastObjUserData {
|
|||
*
|
||||
* \note Duplicate args here are documented at #snapObjectsRay
|
||||
*/
|
||||
static void raycast_obj_fn(SnapObjectContext *sctx,
|
||||
Object *ob_eval,
|
||||
float obmat[4][4],
|
||||
eSnapEditType edit_mode_type,
|
||||
bool use_backface_culling,
|
||||
bool is_object_active,
|
||||
void *data)
|
||||
static void raycast_obj_fn(
|
||||
SnapObjectContext *sctx, Object *ob_eval, float obmat[4][4], bool is_object_active, void *data)
|
||||
{
|
||||
struct RaycastObjUserData *dt = data;
|
||||
const uint ob_index = dt->ob_index++;
|
||||
|
@ -1039,6 +1018,7 @@ static void raycast_obj_fn(SnapObjectContext *sctx,
|
|||
|
||||
switch (ob_eval->type) {
|
||||
case OB_MESH: {
|
||||
const eSnapEditType edit_mode_type = sctx->runtime.params->edit_mode_type;
|
||||
bool use_hide = false;
|
||||
Mesh *me_eval = mesh_for_snap(ob_eval, edit_mode_type, &use_hide);
|
||||
if (me_eval == NULL) {
|
||||
|
@ -1051,7 +1031,6 @@ static void raycast_obj_fn(SnapObjectContext *sctx,
|
|||
em_orig,
|
||||
obmat,
|
||||
ob_index,
|
||||
use_backface_culling,
|
||||
ray_depth,
|
||||
dt->r_loc,
|
||||
dt->r_no,
|
||||
|
@ -1067,7 +1046,6 @@ static void raycast_obj_fn(SnapObjectContext *sctx,
|
|||
obmat,
|
||||
ob_index,
|
||||
use_hide,
|
||||
use_backface_culling,
|
||||
ray_depth,
|
||||
dt->r_loc,
|
||||
dt->r_no,
|
||||
|
@ -1089,7 +1067,6 @@ static void raycast_obj_fn(SnapObjectContext *sctx,
|
|||
obmat,
|
||||
ob_index,
|
||||
false,
|
||||
use_backface_culling,
|
||||
ray_depth,
|
||||
dt->r_loc,
|
||||
dt->r_no,
|
||||
|
@ -1119,7 +1096,6 @@ static void raycast_obj_fn(SnapObjectContext *sctx,
|
|||
* Walks through all objects in the scene to find the `hit` on object surface.
|
||||
*
|
||||
* \param sctx: Snap context to store data.
|
||||
* \param params: Snapping behavior.
|
||||
*
|
||||
* Read/Write Args
|
||||
* ---------------
|
||||
|
@ -1139,9 +1115,6 @@ static void raycast_obj_fn(SnapObjectContext *sctx,
|
|||
* \param r_hit_list: List of #SnapObjectHitDepth (caller must free).
|
||||
*/
|
||||
static bool raycastObjects(SnapObjectContext *sctx,
|
||||
Depsgraph *depsgraph,
|
||||
const View3D *v3d,
|
||||
const struct SnapObjectParams *params,
|
||||
const float ray_start[3],
|
||||
const float ray_dir[3],
|
||||
/* read/write args */
|
||||
|
@ -1156,6 +1129,8 @@ static bool raycastObjects(SnapObjectContext *sctx,
|
|||
float r_obmat[4][4],
|
||||
ListBase *r_hit_list)
|
||||
{
|
||||
const struct SnapObjectParams *params = sctx->runtime.params;
|
||||
const View3D *v3d = sctx->runtime.v3d;
|
||||
if (params->use_occlusion_test && v3d && XRAY_FLAG_ENABLED(v3d)) {
|
||||
/* General testing of occlusion geometry is disabled if the snap is not intended for the edit
|
||||
* cage. */
|
||||
|
@ -1164,9 +1139,6 @@ static bool raycastObjects(SnapObjectContext *sctx,
|
|||
}
|
||||
}
|
||||
|
||||
sctx->runtime.depsgraph = depsgraph;
|
||||
sctx->runtime.v3d = v3d;
|
||||
|
||||
struct RaycastObjUserData data = {
|
||||
.ray_start = ray_start,
|
||||
.ray_dir = ray_dir,
|
||||
|
@ -1182,7 +1154,7 @@ static bool raycastObjects(SnapObjectContext *sctx,
|
|||
.ret = false,
|
||||
};
|
||||
|
||||
iter_snap_objects(sctx, params, raycast_obj_fn, &data);
|
||||
iter_snap_objects(sctx, raycast_obj_fn, &data);
|
||||
|
||||
return data.ret;
|
||||
}
|
||||
|
@ -1561,7 +1533,6 @@ static void cb_snap_tri_verts(void *userdata,
|
|||
static short snap_mesh_polygon(SnapObjectContext *sctx,
|
||||
Object *ob_eval,
|
||||
const float obmat[4][4],
|
||||
bool use_backface_culling,
|
||||
/* read/write args */
|
||||
float *dist_px,
|
||||
/* return args */
|
||||
|
@ -1593,8 +1564,10 @@ static short snap_mesh_polygon(SnapObjectContext *sctx,
|
|||
BLI_assert(sod != NULL);
|
||||
|
||||
Nearest2dUserData nearest2d;
|
||||
nearest2d_data_init(
|
||||
sod, sctx->runtime.view_proj == VIEW_PROJ_PERSP, use_backface_culling, &nearest2d);
|
||||
nearest2d_data_init(sod,
|
||||
sctx->runtime.view_proj == VIEW_PROJ_PERSP,
|
||||
sctx->runtime.params->use_backface_culling,
|
||||
&nearest2d);
|
||||
|
||||
if (sod->type == SNAP_MESH) {
|
||||
BVHTreeFromMesh *treedata = &sod->treedata_mesh;
|
||||
|
@ -1688,7 +1661,6 @@ static short snap_mesh_edge_verts_mixed(SnapObjectContext *sctx,
|
|||
const float obmat[4][4],
|
||||
float original_dist_px,
|
||||
const float prev_co[3],
|
||||
bool use_backface_culling,
|
||||
/* read/write args */
|
||||
float *dist_px,
|
||||
/* return args */
|
||||
|
@ -1706,8 +1678,10 @@ static short snap_mesh_edge_verts_mixed(SnapObjectContext *sctx,
|
|||
BLI_assert(sod != NULL);
|
||||
|
||||
Nearest2dUserData nearest2d;
|
||||
nearest2d_data_init(
|
||||
sod, sctx->runtime.view_proj == VIEW_PROJ_PERSP, use_backface_culling, &nearest2d);
|
||||
nearest2d_data_init(sod,
|
||||
sctx->runtime.view_proj == VIEW_PROJ_PERSP,
|
||||
sctx->runtime.params->use_backface_culling,
|
||||
&nearest2d);
|
||||
|
||||
int vindex[2];
|
||||
nearest2d.get_edge_verts_index(*r_index, nearest2d.userdata, vindex);
|
||||
|
@ -1982,7 +1956,6 @@ static short snapArmature(SnapObjectContext *sctx,
|
|||
static short snapCurve(SnapObjectContext *sctx,
|
||||
Object *ob_eval,
|
||||
const float obmat[4][4],
|
||||
bool use_obedit,
|
||||
/* read/write args */
|
||||
float *dist_px,
|
||||
/* return args */
|
||||
|
@ -2007,7 +1980,8 @@ static short snapCurve(SnapObjectContext *sctx,
|
|||
dist_squared_to_projected_aabb_precalc(
|
||||
&neasrest_precalc, lpmat, sctx->runtime.win_size, sctx->runtime.mval);
|
||||
|
||||
use_obedit = use_obedit && BKE_object_is_in_editmode(ob_eval);
|
||||
const bool use_obedit = (sctx->runtime.params->edit_mode_type == SNAP_GEOM_EDIT) &&
|
||||
BKE_object_is_in_editmode(ob_eval);
|
||||
|
||||
if (use_obedit == false) {
|
||||
/* Test BoundBox */
|
||||
|
@ -2291,7 +2265,6 @@ static short snapMesh(SnapObjectContext *sctx,
|
|||
Mesh *me_eval,
|
||||
const float obmat[4][4],
|
||||
bool use_hide,
|
||||
bool use_backface_culling,
|
||||
/* read/write args */
|
||||
float *dist_px,
|
||||
/* return args */
|
||||
|
@ -2362,8 +2335,10 @@ static short snapMesh(SnapObjectContext *sctx,
|
|||
}
|
||||
|
||||
Nearest2dUserData nearest2d;
|
||||
nearest2d_data_init(
|
||||
sod, sctx->runtime.view_proj == VIEW_PROJ_PERSP, use_backface_culling, &nearest2d);
|
||||
nearest2d_data_init(sod,
|
||||
sctx->runtime.view_proj == VIEW_PROJ_PERSP,
|
||||
sctx->runtime.params->use_backface_culling,
|
||||
&nearest2d);
|
||||
|
||||
BVHTreeNearest nearest = {
|
||||
.index = -1,
|
||||
|
@ -2481,7 +2456,6 @@ static short snapEditMesh(SnapObjectContext *sctx,
|
|||
Object *ob_eval,
|
||||
BMEditMesh *em,
|
||||
const float obmat[4][4],
|
||||
bool use_backface_culling,
|
||||
/* read/write args */
|
||||
float *dist_px,
|
||||
/* return args */
|
||||
|
@ -2582,8 +2556,10 @@ static short snapEditMesh(SnapObjectContext *sctx,
|
|||
}
|
||||
|
||||
Nearest2dUserData nearest2d;
|
||||
nearest2d_data_init(
|
||||
sod, sctx->runtime.view_proj == VIEW_PROJ_PERSP, use_backface_culling, &nearest2d);
|
||||
nearest2d_data_init(sod,
|
||||
sctx->runtime.view_proj == VIEW_PROJ_PERSP,
|
||||
sctx->runtime.params->use_backface_culling,
|
||||
&nearest2d);
|
||||
|
||||
BVHTreeNearest nearest = {
|
||||
.index = -1,
|
||||
|
@ -2678,8 +2654,6 @@ struct SnapObjUserData {
|
|||
static void snap_obj_fn(SnapObjectContext *sctx,
|
||||
Object *ob_eval,
|
||||
float obmat[4][4],
|
||||
eSnapEditType edit_mode_type,
|
||||
bool use_backface_culling,
|
||||
bool UNUSED(is_object_active),
|
||||
void *data)
|
||||
{
|
||||
|
@ -2688,20 +2662,14 @@ static void snap_obj_fn(SnapObjectContext *sctx,
|
|||
|
||||
switch (ob_eval->type) {
|
||||
case OB_MESH: {
|
||||
const eSnapEditType edit_mode_type = sctx->runtime.params->edit_mode_type;
|
||||
bool use_hide;
|
||||
Mesh *me_eval = mesh_for_snap(ob_eval, edit_mode_type, &use_hide);
|
||||
if (me_eval == NULL) {
|
||||
/* Operators only update the editmesh looptris of the original mesh. */
|
||||
BMEditMesh *em_orig = BKE_editmesh_from_object(DEG_get_original_object(ob_eval));
|
||||
retval = snapEditMesh(sctx,
|
||||
ob_eval,
|
||||
em_orig,
|
||||
obmat,
|
||||
use_backface_culling,
|
||||
dt->dist_px,
|
||||
dt->r_loc,
|
||||
dt->r_no,
|
||||
dt->r_index);
|
||||
retval = snapEditMesh(
|
||||
sctx, ob_eval, em_orig, obmat, dt->dist_px, dt->r_loc, dt->r_no, dt->r_index);
|
||||
break;
|
||||
}
|
||||
if (ob_eval->dt == OB_BOUNDBOX) {
|
||||
|
@ -2709,45 +2677,22 @@ static void snap_obj_fn(SnapObjectContext *sctx,
|
|||
return;
|
||||
}
|
||||
|
||||
retval = snapMesh(sctx,
|
||||
ob_eval,
|
||||
me_eval,
|
||||
obmat,
|
||||
use_hide,
|
||||
use_backface_culling,
|
||||
dt->dist_px,
|
||||
dt->r_loc,
|
||||
dt->r_no,
|
||||
dt->r_index);
|
||||
retval = snapMesh(
|
||||
sctx, ob_eval, me_eval, obmat, use_hide, dt->dist_px, dt->r_loc, dt->r_no, dt->r_index);
|
||||
break;
|
||||
}
|
||||
case OB_ARMATURE:
|
||||
retval = snapArmature(sctx, ob_eval, obmat, dt->dist_px, dt->r_loc, dt->r_no, dt->r_index);
|
||||
break;
|
||||
case OB_CURVE:
|
||||
retval = snapCurve(sctx,
|
||||
ob_eval,
|
||||
obmat,
|
||||
edit_mode_type == SNAP_GEOM_EDIT,
|
||||
dt->dist_px,
|
||||
dt->r_loc,
|
||||
dt->r_no,
|
||||
dt->r_index);
|
||||
retval = snapCurve(sctx, ob_eval, obmat, dt->dist_px, dt->r_loc, dt->r_no, dt->r_index);
|
||||
break; /* Use ATTR_FALLTHROUGH if we want to snap to the generated mesh. */
|
||||
case OB_SURF:
|
||||
case OB_FONT: {
|
||||
Mesh *mesh_eval = BKE_object_get_evaluated_mesh(ob_eval);
|
||||
if (mesh_eval) {
|
||||
retval |= snapMesh(sctx,
|
||||
ob_eval,
|
||||
mesh_eval,
|
||||
obmat,
|
||||
false,
|
||||
use_backface_culling,
|
||||
dt->dist_px,
|
||||
dt->r_loc,
|
||||
dt->r_no,
|
||||
dt->r_index);
|
||||
retval |= snapMesh(
|
||||
sctx, ob_eval, mesh_eval, obmat, false, dt->dist_px, dt->r_loc, dt->r_no, dt->r_index);
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
@ -2780,8 +2725,6 @@ static void snap_obj_fn(SnapObjectContext *sctx,
|
|||
* Walks through all objects in the scene to find the closest snap element ray.
|
||||
*
|
||||
* \param sctx: Snap context to store data.
|
||||
* \param snapdata: struct generated in `get_snapdata`.
|
||||
* \param params: Parameters for control snap behavior.
|
||||
*
|
||||
* Read/Write Args
|
||||
* ---------------
|
||||
|
@ -2799,7 +2742,6 @@ static void snap_obj_fn(SnapObjectContext *sctx,
|
|||
* \param r_obmat: Object matrix (may not be #Object.obmat with dupli-instances).
|
||||
*/
|
||||
static short snapObjectsRay(SnapObjectContext *sctx,
|
||||
const struct SnapObjectParams *params,
|
||||
/* read/write args */
|
||||
/* Parameters below cannot be const, because they are assigned to a
|
||||
* non-const variable (readability-non-const-parameter). */
|
||||
|
@ -2821,7 +2763,7 @@ static short snapObjectsRay(SnapObjectContext *sctx,
|
|||
.ret = 0,
|
||||
};
|
||||
|
||||
iter_snap_objects(sctx, params, snap_obj_fn, &data);
|
||||
iter_snap_objects(sctx, snap_obj_fn, &data);
|
||||
|
||||
return data.ret;
|
||||
}
|
||||
|
@ -2892,19 +2834,12 @@ bool ED_transform_snap_object_project_ray_ex(SnapObjectContext *sctx,
|
|||
Object **r_ob,
|
||||
float r_obmat[4][4])
|
||||
{
|
||||
return raycastObjects(sctx,
|
||||
depsgraph,
|
||||
v3d,
|
||||
params,
|
||||
ray_start,
|
||||
ray_normal,
|
||||
ray_depth,
|
||||
r_loc,
|
||||
r_no,
|
||||
r_index,
|
||||
r_ob,
|
||||
r_obmat,
|
||||
NULL);
|
||||
sctx->runtime.params = params;
|
||||
sctx->runtime.depsgraph = depsgraph;
|
||||
sctx->runtime.v3d = v3d;
|
||||
|
||||
return raycastObjects(
|
||||
sctx, ray_start, ray_normal, ray_depth, r_loc, r_no, r_index, r_ob, r_obmat, NULL);
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -2924,6 +2859,10 @@ bool ED_transform_snap_object_project_ray_all(SnapObjectContext *sctx,
|
|||
bool sort,
|
||||
ListBase *r_hit_list)
|
||||
{
|
||||
sctx->runtime.params = params;
|
||||
sctx->runtime.depsgraph = depsgraph;
|
||||
sctx->runtime.v3d = v3d;
|
||||
|
||||
if (ray_depth == -1.0f) {
|
||||
ray_depth = BVH_RAYCAST_DIST_MAX;
|
||||
}
|
||||
|
@ -2932,19 +2871,8 @@ bool ED_transform_snap_object_project_ray_all(SnapObjectContext *sctx,
|
|||
float ray_depth_prev = ray_depth;
|
||||
#endif
|
||||
|
||||
bool retval = raycastObjects(sctx,
|
||||
depsgraph,
|
||||
v3d,
|
||||
params,
|
||||
ray_start,
|
||||
ray_normal,
|
||||
&ray_depth,
|
||||
NULL,
|
||||
NULL,
|
||||
NULL,
|
||||
NULL,
|
||||
NULL,
|
||||
r_hit_list);
|
||||
bool retval = raycastObjects(
|
||||
sctx, ray_start, ray_normal, &ray_depth, NULL, NULL, NULL, NULL, NULL, r_hit_list);
|
||||
|
||||
/* meant to be readonly for 'all' hits, ensure it is */
|
||||
#ifdef DEBUG
|
||||
|
@ -3031,6 +2959,11 @@ static short transform_snap_context_project_view3d_mixed_impl(
|
|||
float r_obmat[4][4],
|
||||
float r_face_nor[3])
|
||||
{
|
||||
sctx->runtime.params = params;
|
||||
sctx->runtime.depsgraph = depsgraph;
|
||||
sctx->runtime.region = region;
|
||||
sctx->runtime.v3d = v3d;
|
||||
|
||||
BLI_assert((snap_to_flag & (SCE_SNAP_MODE_VERTEX | SCE_SNAP_MODE_EDGE | SCE_SNAP_MODE_FACE |
|
||||
SCE_SNAP_MODE_EDGE_MIDPOINT | SCE_SNAP_MODE_EDGE_PERPENDICULAR)) !=
|
||||
0);
|
||||
|
@ -3050,10 +2983,6 @@ static short transform_snap_context_project_view3d_mixed_impl(
|
|||
|
||||
bool use_occlusion_test = params->use_occlusion_test && !XRAY_ENABLED(v3d);
|
||||
|
||||
sctx->runtime.depsgraph = depsgraph;
|
||||
sctx->runtime.region = region;
|
||||
sctx->runtime.v3d = v3d;
|
||||
|
||||
if (snap_to_flag & SCE_SNAP_MODE_FACE || use_occlusion_test) {
|
||||
float ray_start[3], ray_normal[3];
|
||||
if (!ED_view3d_win_to_ray_clipped_ex(
|
||||
|
@ -3063,19 +2992,9 @@ static short transform_snap_context_project_view3d_mixed_impl(
|
|||
|
||||
float dummy_ray_depth = BVH_RAYCAST_DIST_MAX;
|
||||
|
||||
has_hit = raycastObjects(sctx,
|
||||
depsgraph,
|
||||
v3d,
|
||||
params,
|
||||
ray_start,
|
||||
ray_normal,
|
||||
&dummy_ray_depth,
|
||||
loc,
|
||||
no,
|
||||
&index,
|
||||
&ob_eval,
|
||||
obmat,
|
||||
NULL);
|
||||
has_hit = raycastObjects(
|
||||
sctx, ray_start, ray_normal, &dummy_ray_depth, loc, no, &index, &ob_eval, obmat, NULL);
|
||||
|
||||
if (has_hit) {
|
||||
if (r_face_nor) {
|
||||
copy_v3_v3(r_face_nor, no);
|
||||
|
@ -3144,8 +3063,7 @@ static short transform_snap_context_project_view3d_mixed_impl(
|
|||
new_clipplane[3] += 0.01f;
|
||||
|
||||
/* Try to snap only to the polygon. */
|
||||
elem_test = snap_mesh_polygon(
|
||||
sctx, ob_eval, obmat, params->use_backface_culling, &dist_px_tmp, loc, no, &index);
|
||||
elem_test = snap_mesh_polygon(sctx, ob_eval, obmat, &dist_px_tmp, loc, no, &index);
|
||||
if (elem_test) {
|
||||
elem = elem_test;
|
||||
}
|
||||
|
@ -3159,7 +3077,7 @@ static short transform_snap_context_project_view3d_mixed_impl(
|
|||
sctx->runtime.has_occlusion_plane = true;
|
||||
}
|
||||
|
||||
elem_test = snapObjectsRay(sctx, params, &dist_px_tmp, loc, no, &index, &ob_eval, obmat);
|
||||
elem_test = snapObjectsRay(sctx, &dist_px_tmp, loc, no, &index, &ob_eval, obmat);
|
||||
if (elem_test) {
|
||||
elem = elem_test;
|
||||
}
|
||||
|
@ -3168,16 +3086,8 @@ static short transform_snap_context_project_view3d_mixed_impl(
|
|||
(snap_to_flag & (SCE_SNAP_MODE_VERTEX | SCE_SNAP_MODE_EDGE_MIDPOINT |
|
||||
SCE_SNAP_MODE_EDGE_PERPENDICULAR))) {
|
||||
sctx->runtime.snap_to_flag = snap_to_flag;
|
||||
elem = snap_mesh_edge_verts_mixed(sctx,
|
||||
ob_eval,
|
||||
obmat,
|
||||
*dist_px,
|
||||
prev_co,
|
||||
params->use_backface_culling,
|
||||
&dist_px_tmp,
|
||||
loc,
|
||||
no,
|
||||
&index);
|
||||
elem = snap_mesh_edge_verts_mixed(
|
||||
sctx, ob_eval, obmat, *dist_px, prev_co, &dist_px_tmp, loc, no, &index);
|
||||
}
|
||||
|
||||
if (elem & snap_to_flag) {
|
||||
|
|
Loading…
Reference in New Issue