diff options
author | Germano Cavalcante <germano.costa@ig.com.br> | 2020-03-09 16:02:11 +0300 |
---|---|---|
committer | Germano Cavalcante <germano.costa@ig.com.br> | 2020-03-09 16:02:11 +0300 |
commit | a922a097ef5c453bf4bc515494a3ab5f402946e2 (patch) | |
tree | 892f229d05ed6e88afc7d107bf58147f6031dd16 /source/blender | |
parent | 3a10c61a7d088712e66ae6cc775f8260dc91518b (diff) |
Transform Snap Object: Remove depsgraph when creating context
Currently, this change does not bring functional changes.
But it is necessary to extend the use of the snap system for gizmos,
since, after a Undo, the `depsgraph` pointed by the `snap_context`
has its memory invalidated.
Reviewed By: campbellbarton
Differential Revision: https://developer.blender.org/D7013
Diffstat (limited to 'source/blender')
12 files changed, 140 insertions, 91 deletions
diff --git a/source/blender/editors/curve/editcurve.c b/source/blender/editors/curve/editcurve.c index ee1a48e9f1e..6fdf76bfb75 100644 --- a/source/blender/editors/curve/editcurve.c +++ b/source/blender/editors/curve/editcurve.c @@ -5677,10 +5677,11 @@ static int add_vertex_invoke(bContext *C, wmOperator *op, const wmEvent *event) const float mval[2] = {UNPACK2(event->mval)}; struct SnapObjectContext *snap_context = ED_transform_snap_object_context_create_view3d( - vc.bmain, vc.scene, vc.depsgraph, 0, vc.region, vc.v3d); + vc.bmain, vc.scene, 0, vc.region, vc.v3d); ED_transform_snap_object_project_view3d( snap_context, + vc.depsgraph, SCE_SNAP_MODE_FACE, &(const struct SnapObjectParams){ .snap_select = (vc.obedit != NULL) ? SNAP_NOT_ACTIVE : SNAP_ALL, diff --git a/source/blender/editors/gizmo_library/gizmo_types/move3d_gizmo.c b/source/blender/editors/gizmo_library/gizmo_types/move3d_gizmo.c index f7b51a7a0cb..d8cd4d20579 100644 --- a/source/blender/editors/gizmo_library/gizmo_types/move3d_gizmo.c +++ b/source/blender/editors/gizmo_library/gizmo_types/move3d_gizmo.c @@ -276,6 +276,7 @@ static int gizmo_move_modal(bContext *C, float co[3]; if (ED_transform_snap_object_project_view3d( inter->snap_context_v3d, + CTX_data_ensure_evaluated_depsgraph(C), (SCE_SNAP_MODE_VERTEX | SCE_SNAP_MODE_EDGE | SCE_SNAP_MODE_FACE), &(const struct SnapObjectParams){ .snap_select = SNAP_ALL, @@ -369,12 +370,7 @@ static int gizmo_move_invoke(bContext *C, wmGizmo *gz, const wmEvent *event) switch (sa->spacetype) { case SPACE_VIEW3D: { inter->snap_context_v3d = ED_transform_snap_object_context_create_view3d( - CTX_data_main(C), - CTX_data_scene(C), - CTX_data_ensure_evaluated_depsgraph(C), - 0, - CTX_wm_region(C), - CTX_wm_view3d(C)); + CTX_data_main(C), CTX_data_scene(C), 0, CTX_wm_region(C), CTX_wm_view3d(C)); break; } default: diff --git a/source/blender/editors/gpencil/gpencil_edit.c b/source/blender/editors/gpencil/gpencil_edit.c index a7e28fe1f87..420c2907c82 100644 --- a/source/blender/editors/gpencil/gpencil_edit.c +++ b/source/blender/editors/gpencil/gpencil_edit.c @@ -3426,7 +3426,7 @@ static int gp_strokes_reproject_exec(bContext *C, wmOperator *op) int cfra_prv = INT_MIN; /* init snap context for geometry projection */ sctx = ED_transform_snap_object_context_create_view3d( - bmain, scene, depsgraph, 0, region, CTX_wm_view3d(C)); + bmain, scene, 0, region, CTX_wm_view3d(C)); /* Go through each editable + selected stroke, adjusting each of its points one by one... */ GP_EDITABLE_STROKES_BEGIN (gpstroke_iter, C, gpl, gps) { @@ -3517,6 +3517,7 @@ static int gp_strokes_reproject_exec(bContext *C, wmOperator *op) ED_view3d_win_to_ray(region, xy, &ray_start[0], &ray_normal[0]); if (ED_transform_snap_object_project_ray(sctx, + depsgraph, &(const struct SnapObjectParams){ .snap_select = SNAP_ALL, }, diff --git a/source/blender/editors/include/ED_transform_snap_object_context.h b/source/blender/editors/include/ED_transform_snap_object_context.h index 34f2bf8361a..b998ac87819 100644 --- a/source/blender/editors/include/ED_transform_snap_object_context.h +++ b/source/blender/editors/include/ED_transform_snap_object_context.h @@ -79,11 +79,9 @@ struct SnapObjectParams { typedef struct SnapObjectContext SnapObjectContext; SnapObjectContext *ED_transform_snap_object_context_create(struct Main *bmain, struct Scene *scene, - struct Depsgraph *depsgraph, int flag); SnapObjectContext *ED_transform_snap_object_context_create_view3d(struct Main *bmain, struct Scene *scene, - struct Depsgraph *depsgraph, int flag, /* extra args for view3d */ const struct ARegion *region, @@ -99,6 +97,7 @@ void ED_transform_snap_object_context_set_editmesh_callbacks( void *user_data); bool ED_transform_snap_object_project_ray_ex(struct SnapObjectContext *sctx, + struct Depsgraph *depsgraph, const struct SnapObjectParams *params, const float ray_start[3], const float ray_normal[3], @@ -110,6 +109,7 @@ bool ED_transform_snap_object_project_ray_ex(struct SnapObjectContext *sctx, struct Object **r_ob, float r_obmat[4][4]); bool ED_transform_snap_object_project_ray(SnapObjectContext *sctx, + struct Depsgraph *depsgraph, const struct SnapObjectParams *params, const float ray_origin[3], const float ray_direction[3], @@ -118,6 +118,7 @@ bool ED_transform_snap_object_project_ray(SnapObjectContext *sctx, float r_no[3]); bool ED_transform_snap_object_project_ray_all(SnapObjectContext *sctx, + struct Depsgraph *depsgraph, const struct SnapObjectParams *params, const float ray_start[3], const float ray_normal[3], @@ -126,6 +127,7 @@ bool ED_transform_snap_object_project_ray_all(SnapObjectContext *sctx, struct ListBase *r_hit_list); short ED_transform_snap_object_project_view3d_ex(struct SnapObjectContext *sctx, + struct Depsgraph *depsgraph, const unsigned short snap_to, const struct SnapObjectParams *params, const float mval[2], @@ -137,6 +139,7 @@ short ED_transform_snap_object_project_view3d_ex(struct SnapObjectContext *sctx, struct Object **r_ob, float r_obmat[4][4]); bool ED_transform_snap_object_project_view3d(struct SnapObjectContext *sctx, + struct Depsgraph *depsgraph, const unsigned short snap_to, const struct SnapObjectParams *params, const float mval[2], @@ -147,6 +150,7 @@ bool ED_transform_snap_object_project_view3d(struct SnapObjectContext *sctx, float r_no[3]); bool ED_transform_snap_object_project_all_view3d_ex(SnapObjectContext *sctx, + struct Depsgraph *depsgraph, const struct SnapObjectParams *params, const float mval[2], float ray_depth, diff --git a/source/blender/editors/mesh/editmesh_tools.c b/source/blender/editors/mesh/editmesh_tools.c index e38bb90fd08..a4546780dd9 100644 --- a/source/blender/editors/mesh/editmesh_tools.c +++ b/source/blender/editors/mesh/editmesh_tools.c @@ -420,7 +420,7 @@ void EDBM_project_snap_verts( ED_view3d_init_mats_rv3d(obedit, region->regiondata); struct SnapObjectContext *snap_context = ED_transform_snap_object_context_create_view3d( - bmain, CTX_data_scene(C), depsgraph, 0, region, CTX_wm_view3d(C)); + bmain, CTX_data_scene(C), 0, region, CTX_wm_view3d(C)); BM_ITER_MESH (eve, &iter, em->bm, BM_VERTS_OF_MESH) { if (BM_elem_flag_test(eve, BM_ELEM_SELECT)) { @@ -428,6 +428,7 @@ void EDBM_project_snap_verts( if (ED_view3d_project_float_object(region, eve->co, mval, V3D_PROJ_TEST_NOP) == V3D_PROJ_RET_OK) { if (ED_transform_snap_object_project_view3d(snap_context, + depsgraph, SCE_SNAP_MODE_FACE, &(const struct SnapObjectParams){ .snap_select = SNAP_NOT_ACTIVE, diff --git a/source/blender/editors/space_view3d/view3d_edit.c b/source/blender/editors/space_view3d/view3d_edit.c index 00b696da756..415c275090d 100644 --- a/source/blender/editors/space_view3d/view3d_edit.c +++ b/source/blender/editors/space_view3d/view3d_edit.c @@ -5028,12 +5028,13 @@ void ED_view3d_cursor3d_position_rotation(bContext *C, float ray_co[3]; struct SnapObjectContext *snap_context = ED_transform_snap_object_context_create_view3d( - bmain, scene, CTX_data_ensure_evaluated_depsgraph(C), 0, region, v3d); + bmain, scene, 0, region, v3d); float obmat[4][4]; Object *ob_dummy = NULL; float dist_px = 0; if (ED_transform_snap_object_project_view3d_ex(snap_context, + CTX_data_ensure_evaluated_depsgraph(C), SCE_SNAP_MODE_FACE, &(const struct SnapObjectParams){ .snap_select = SNAP_ALL, diff --git a/source/blender/editors/space_view3d/view3d_gizmo_ruler.c b/source/blender/editors/space_view3d/view3d_gizmo_ruler.c index 99789a512d3..6fbae1d8cb1 100644 --- a/source/blender/editors/space_view3d/view3d_gizmo_ruler.c +++ b/source/blender/editors/space_view3d/view3d_gizmo_ruler.c @@ -288,12 +288,7 @@ static void ruler_state_set(bContext *C, RulerInfo *ruler_info, int state) else if (state == RULER_STATE_DRAG) { memset(&ruler_info->drag_state_prev, 0x0, sizeof(ruler_info->drag_state_prev)); ruler_info->snap_context = ED_transform_snap_object_context_create_view3d( - bmain, - CTX_data_scene(C), - CTX_data_ensure_evaluated_depsgraph(C), - 0, - ruler_info->region, - CTX_wm_view3d(C)); + bmain, CTX_data_scene(C), 0, ruler_info->region, CTX_wm_view3d(C)); } else { BLI_assert(0); @@ -308,7 +303,8 @@ static void view3d_ruler_item_project(RulerInfo *ruler_info, float r_co[3], cons } /* use for mousemove events */ -static bool view3d_ruler_item_mousemove(RulerInfo *ruler_info, +static bool view3d_ruler_item_mousemove(struct Depsgraph *depsgraph, + RulerInfo *ruler_info, RulerItem *ruler_item, const int mval[2], const bool do_thickness, @@ -336,6 +332,7 @@ static bool view3d_ruler_item_mousemove(RulerInfo *ruler_info, co_other = ruler_item->co[inter->co_index == 0 ? 2 : 0]; if (ED_transform_snap_object_project_view3d(ruler_info->snap_context, + depsgraph, SCE_SNAP_MODE_FACE, &(const struct SnapObjectParams){ .snap_select = SNAP_ALL, @@ -350,6 +347,7 @@ static bool view3d_ruler_item_mousemove(RulerInfo *ruler_info, /* add some bias */ madd_v3_v3v3fl(ray_start, co, ray_normal, eps_bias); ED_transform_snap_object_project_ray(ruler_info->snap_context, + depsgraph, &(const struct SnapObjectParams){ .snap_select = SNAP_ALL, .use_object_edit_cage = true, @@ -379,6 +377,7 @@ static bool view3d_ruler_item_mousemove(RulerInfo *ruler_info, if (ED_transform_snap_object_project_view3d( ruler_info->snap_context, + depsgraph, (SCE_SNAP_MODE_VERTEX | SCE_SNAP_MODE_EDGE | SCE_SNAP_MODE_FACE | SCE_SNAP_MODE_EDGE_MIDPOINT | SCE_SNAP_MODE_EDGE_PERPENDICULAR), &(const struct SnapObjectParams){ @@ -922,8 +921,9 @@ static int gizmo_ruler_modal(bContext *C, if (do_cursor_update) { if (ruler_info->state == RULER_STATE_DRAG) { + struct Depsgraph *depsgraph = CTX_data_ensure_evaluated_depsgraph(C); if (view3d_ruler_item_mousemove( - ruler_info, ruler_item, event->mval, do_thickness, do_snap)) { + depsgraph, ruler_info, ruler_item, event->mval, do_thickness, do_snap)) { do_draw = true; } } @@ -976,7 +976,9 @@ static int gizmo_ruler_invoke(bContext *C, wmGizmo *gz, const wmEvent *event) } /* update the new location */ - view3d_ruler_item_mousemove(ruler_info, ruler_item_pick, event->mval, false, false); + struct Depsgraph *depsgraph = CTX_data_ensure_evaluated_depsgraph(C); + view3d_ruler_item_mousemove( + depsgraph, ruler_info, ruler_item_pick, event->mval, false, false); } } else { @@ -1126,9 +1128,10 @@ static int view3d_ruler_add_invoke(bContext *C, wmOperator *op, const wmEvent *e RulerInfo *ruler_info = gzgroup->customdata; RulerInteraction *inter = ruler_item->gz.interaction_data; if (use_depth) { + struct Depsgraph *depsgraph = CTX_data_ensure_evaluated_depsgraph(C); /* snap the first point added, not essential but handy */ inter->co_index = 0; - view3d_ruler_item_mousemove(ruler_info, ruler_item, event->mval, false, true); + view3d_ruler_item_mousemove(depsgraph, ruler_info, ruler_item, event->mval, false, true); copy_v3_v3(inter->drag_start_co, ruler_item->co[inter->co_index]); } else { diff --git a/source/blender/editors/space_view3d/view3d_walk.c b/source/blender/editors/space_view3d/view3d_walk.c index fcacc24b0c8..9f488a1ef78 100644 --- a/source/blender/editors/space_view3d/view3d_walk.c +++ b/source/blender/editors/space_view3d/view3d_walk.c @@ -375,6 +375,7 @@ static bool walk_floor_distance_get(RegionView3D *rv3d, add_v3_v3(ray_start, dvec_tmp); ret = ED_transform_snap_object_project_ray(walk->snap_context, + walk->depsgraph, &(const struct SnapObjectParams){ .snap_select = SNAP_ALL, }, @@ -413,6 +414,7 @@ static bool walk_ray_cast(RegionView3D *rv3d, normalize_v3(ray_normal); ret = ED_transform_snap_object_project_ray(walk->snap_context, + walk->depsgraph, &(const struct SnapObjectParams){ .snap_select = SNAP_ALL, }, @@ -551,7 +553,7 @@ static bool initWalkInfo(bContext *C, WalkInfo *walk, wmOperator *op) walk->rv3d->rflag |= RV3D_NAVIGATING; walk->snap_context = ED_transform_snap_object_context_create_view3d( - bmain, walk->scene, CTX_data_ensure_evaluated_depsgraph(C), 0, walk->region, walk->v3d); + bmain, walk->scene, 0, walk->region, walk->v3d); walk->v3d_camera_control = ED_view3d_cameracontrol_acquire( walk->depsgraph, diff --git a/source/blender/editors/transform/transform_snap.c b/source/blender/editors/transform/transform_snap.c index 8336fd7890b..0a0a6ffd62f 100644 --- a/source/blender/editors/transform/transform_snap.c +++ b/source/blender/editors/transform/transform_snap.c @@ -377,6 +377,7 @@ void applyProject(TransInfo *t) V3D_PROJ_RET_OK) { if (ED_transform_snap_object_project_view3d( t->tsnap.object_context, + t->depsgraph, SCE_SNAP_MODE_FACE, &(const struct SnapObjectParams){ .snap_select = t->tsnap.modeSelect, @@ -686,7 +687,7 @@ static void initSnappingMode(TransInfo *t) if (t->spacetype == SPACE_VIEW3D) { if (t->tsnap.object_context == NULL) { t->tsnap.object_context = ED_transform_snap_object_context_create_view3d( - bmain, t->scene, t->depsgraph, 0, t->region, t->view); + bmain, t->scene, 0, t->region, t->view); ED_transform_snap_object_context_set_editmesh_callbacks( t->tsnap.object_context, @@ -1365,6 +1366,7 @@ short snapObjectsTransform( float *target = (t->tsnap.status & TARGET_INIT) ? t->tsnap.snapTarget : t->center_global; return ED_transform_snap_object_project_view3d_ex( t->tsnap.object_context, + t->depsgraph, t->scene->toolsettings->snap_mode, &(const struct SnapObjectParams){ .snap_select = t->tsnap.modeSelect, @@ -1389,17 +1391,26 @@ short snapObjectsTransform( /** \name Peeling * \{ */ -bool peelObjectsSnapContext(SnapObjectContext *sctx, - const float mval[2], - const struct SnapObjectParams *params, - const bool use_peel_object, - /* return args */ - float r_loc[3], - float r_no[3], - float *r_thickness) +bool peelObjectsTransform(TransInfo *t, + const float mval[2], + const bool use_peel_object, + /* return args */ + float r_loc[3], + float r_no[3], + float *r_thickness) { ListBase depths_peel = {0}; - ED_transform_snap_object_project_all_view3d_ex(sctx, params, mval, -1.0f, false, &depths_peel); + ED_transform_snap_object_project_all_view3d_ex( + t->tsnap.object_context, + t->depsgraph, + &(const struct SnapObjectParams){ + .snap_select = t->tsnap.modeSelect, + .use_object_edit_cage = (t->flag & T_EDIT) != 0, + }, + mval, + -1.0f, + false, + &depths_peel); if (!BLI_listbase_is_empty(&depths_peel)) { /* At the moment we only use the hits of the first object */ @@ -1455,26 +1466,6 @@ bool peelObjectsSnapContext(SnapObjectContext *sctx, return false; } -bool peelObjectsTransform(TransInfo *t, - const float mval[2], - const bool use_peel_object, - /* return args */ - float r_loc[3], - float r_no[3], - float *r_thickness) -{ - return peelObjectsSnapContext(t->tsnap.object_context, - mval, - &(const struct SnapObjectParams){ - .snap_select = t->tsnap.modeSelect, - .use_object_edit_cage = (t->flag & T_EDIT) != 0, - }, - use_peel_object, - r_loc, - r_no, - r_thickness); -} - /** \} */ /* -------------------------------------------------------------------- */ diff --git a/source/blender/editors/transform/transform_snap.h b/source/blender/editors/transform/transform_snap.h index a188e2eb829..c088cf80f0d 100644 --- a/source/blender/editors/transform/transform_snap.h +++ b/source/blender/editors/transform/transform_snap.h @@ -35,14 +35,6 @@ bool peelObjectsTransform(struct TransInfo *t, float r_loc[3], float r_no[3], float *r_thickness); -bool peelObjectsSnapContext(struct SnapObjectContext *sctx, - const float mval[2], - const struct SnapObjectParams *params, - const bool use_peel_object, - /* return args */ - float r_loc[3], - float r_no[3], - float *r_thickness); short snapObjectsTransform(struct TransInfo *t, const float mval[2], diff --git a/source/blender/editors/transform/transform_snap_object.c b/source/blender/editors/transform/transform_snap_object.c index c9970e7e49c..841bc11edf1 100644 --- a/source/blender/editors/transform/transform_snap_object.c +++ b/source/blender/editors/transform/transform_snap_object.c @@ -112,7 +112,6 @@ typedef struct SnapObjectData { struct SnapObjectContext { Main *bmain; Scene *scene; - Depsgraph *depsgraph; int flag; @@ -373,11 +372,12 @@ typedef void (*IterSnapObjsCallback)(SnapObjectContext *sctx, * \param snap_select: from enum #eSnapSelect. */ static void iter_snap_objects(SnapObjectContext *sctx, + Depsgraph *depsgraph, const struct SnapObjectParams *params, IterSnapObjsCallback sob_callback, void *data) { - ViewLayer *view_layer = DEG_get_input_view_layer(sctx->depsgraph); + ViewLayer *view_layer = DEG_get_input_view_layer(depsgraph); const View3D *v3d = sctx->v3d_data.v3d; const eSnapSelect snap_select = params->snap_select; const bool use_object_edit_cage = params->use_object_edit_cage; @@ -408,10 +408,10 @@ static void iter_snap_objects(SnapObjectContext *sctx, } } - Object *obj_eval = DEG_get_evaluated_object(sctx->depsgraph, base->object); + Object *obj_eval = DEG_get_evaluated_object(depsgraph, base->object); if (obj_eval->transflag & OB_DUPLI) { DupliObject *dupli_ob; - ListBase *lb = object_duplilist(sctx->depsgraph, sctx->scene, obj_eval); + ListBase *lb = object_duplilist(depsgraph, sctx->scene, obj_eval); for (dupli_ob = lb->first; dupli_ob; dupli_ob = dupli_ob->next) { sob_callback( sctx, use_object_edit_cage, use_backface_culling, dupli_ob->ob, dupli_ob->mat, data); @@ -1113,6 +1113,7 @@ static void raycast_obj_cb(SnapObjectContext *sctx, * \param r_hit_list: List of #SnapObjectHitDepth (caller must free). */ static bool raycastObjects(SnapObjectContext *sctx, + Depsgraph *depsgraph, const struct SnapObjectParams *params, const float ray_start[3], const float ray_dir[3], @@ -1141,7 +1142,7 @@ static bool raycastObjects(SnapObjectContext *sctx, .ret = false, }; - iter_snap_objects(sctx, params, raycast_obj_cb, &data); + iter_snap_objects(sctx, depsgraph, params, raycast_obj_cb, &data); return data.ret; } @@ -2813,6 +2814,7 @@ static void sanp_obj_cb(SnapObjectContext *sctx, * \param r_obmat: Object matrix (may not be #Object.obmat with dupli-instances). */ static short snapObjectsRay(SnapObjectContext *sctx, + Depsgraph *depsgraph, SnapData *snapdata, const struct SnapObjectParams *params, /* read/write args */ @@ -2835,7 +2837,7 @@ static short snapObjectsRay(SnapObjectContext *sctx, .ret = 0, }; - iter_snap_objects(sctx, params, sanp_obj_cb, &data); + iter_snap_objects(sctx, depsgraph, params, sanp_obj_cb, &data); return data.ret; } @@ -2846,10 +2848,7 @@ static short snapObjectsRay(SnapObjectContext *sctx, /** \name Public Object Snapping API * \{ */ -SnapObjectContext *ED_transform_snap_object_context_create(Main *bmain, - Scene *scene, - Depsgraph *depsgraph, - int flag) +SnapObjectContext *ED_transform_snap_object_context_create(Main *bmain, Scene *scene, int flag) { SnapObjectContext *sctx = MEM_callocN(sizeof(*sctx), __func__); @@ -2857,7 +2856,6 @@ SnapObjectContext *ED_transform_snap_object_context_create(Main *bmain, sctx->bmain = bmain; sctx->scene = scene; - sctx->depsgraph = depsgraph; sctx->cache.object_map = BLI_ghash_ptr_new(__func__); /* Initialize as needed (edit-mode only). */ @@ -2869,13 +2867,12 @@ SnapObjectContext *ED_transform_snap_object_context_create(Main *bmain, SnapObjectContext *ED_transform_snap_object_context_create_view3d(Main *bmain, Scene *scene, - Depsgraph *depsgraph, int flag, /* extra args for view3d */ const ARegion *region, const View3D *v3d) { - SnapObjectContext *sctx = ED_transform_snap_object_context_create(bmain, scene, depsgraph, flag); + SnapObjectContext *sctx = ED_transform_snap_object_context_create(bmain, scene, flag); sctx->use_v3d = true; sctx->v3d_data.region = region; @@ -2916,6 +2913,7 @@ void ED_transform_snap_object_context_set_editmesh_callbacks( } bool ED_transform_snap_object_project_ray_ex(SnapObjectContext *sctx, + Depsgraph *depsgraph, const struct SnapObjectParams *params, const float ray_start[3], const float ray_normal[3], @@ -2926,8 +2924,18 @@ bool ED_transform_snap_object_project_ray_ex(SnapObjectContext *sctx, Object **r_ob, float r_obmat[4][4]) { - return raycastObjects( - sctx, params, ray_start, ray_normal, ray_depth, r_loc, r_no, r_index, r_ob, r_obmat, NULL); + return raycastObjects(sctx, + depsgraph, + params, + ray_start, + ray_normal, + ray_depth, + r_loc, + r_no, + r_index, + r_ob, + r_obmat, + NULL); } /** @@ -2938,6 +2946,7 @@ bool ED_transform_snap_object_project_ray_ex(SnapObjectContext *sctx, * \param r_hit_list: List of #SnapObjectHitDepth (caller must free). */ bool ED_transform_snap_object_project_ray_all(SnapObjectContext *sctx, + Depsgraph *depsgraph, const struct SnapObjectParams *params, const float ray_start[3], const float ray_normal[3], @@ -2953,8 +2962,18 @@ bool ED_transform_snap_object_project_ray_all(SnapObjectContext *sctx, float ray_depth_prev = ray_depth; #endif - bool retval = raycastObjects( - sctx, params, ray_start, ray_normal, &ray_depth, NULL, NULL, NULL, NULL, NULL, r_hit_list); + bool retval = raycastObjects(sctx, + depsgraph, + params, + 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 @@ -2976,6 +2995,7 @@ bool ED_transform_snap_object_project_ray_all(SnapObjectContext *sctx, * \return Snap success */ static bool transform_snap_context_project_ray_impl(SnapObjectContext *sctx, + Depsgraph *depsgraph, const struct SnapObjectParams *params, const float ray_start[3], const float ray_normal[3], @@ -2987,12 +3007,13 @@ static bool transform_snap_context_project_ray_impl(SnapObjectContext *sctx, /* try snap edge, then face if it fails */ ret = ED_transform_snap_object_project_ray_ex( - sctx, params, ray_start, ray_normal, ray_depth, r_co, r_no, NULL, NULL, NULL); + sctx, depsgraph, params, ray_start, ray_normal, ray_depth, r_co, r_no, NULL, NULL, NULL); return ret; } bool ED_transform_snap_object_project_ray(SnapObjectContext *sctx, + Depsgraph *depsgraph, const struct SnapObjectParams *params, const float ray_origin[3], const float ray_direction[3], @@ -3007,11 +3028,12 @@ bool ED_transform_snap_object_project_ray(SnapObjectContext *sctx, } return transform_snap_context_project_ray_impl( - sctx, params, ray_origin, ray_direction, ray_depth, r_co, r_no); + sctx, depsgraph, params, ray_origin, ray_direction, ray_depth, r_co, r_no); } static short transform_snap_context_project_view3d_mixed_impl( SnapObjectContext *sctx, + Depsgraph *depsgraph, const unsigned short snap_to_flag, const struct SnapObjectParams *params, const float mval[2], @@ -3041,7 +3063,7 @@ static short transform_snap_context_project_view3d_mixed_impl( 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(sctx->depsgraph, + if (!ED_view3d_win_to_ray_clipped_ex(depsgraph, sctx->v3d_data.region, sctx->v3d_data.v3d, mval, @@ -3054,8 +3076,18 @@ static short transform_snap_context_project_view3d_mixed_impl( float dummy_ray_depth = BVH_RAYCAST_DIST_MAX; - has_hit = raycastObjects( - sctx, params, ray_start, ray_normal, &dummy_ray_depth, loc, no, &index, &ob, obmat, NULL); + has_hit = raycastObjects(sctx, + depsgraph, + params, + ray_start, + ray_normal, + &dummy_ray_depth, + loc, + no, + &index, + &ob, + obmat, + NULL); if (has_hit && (snap_to_flag & SCE_SNAP_MODE_FACE)) { retval = SCE_SNAP_MODE_FACE; @@ -3129,7 +3161,8 @@ static short transform_snap_context_project_view3d_mixed_impl( snapdata.has_occlusion_plane = true; } - elem_test = snapObjectsRay(sctx, &snapdata, params, &dist_px_tmp, loc, no, &index, &ob, obmat); + elem_test = snapObjectsRay( + sctx, depsgraph, &snapdata, params, &dist_px_tmp, loc, no, &index, &ob, obmat); if (elem_test) { elem = elem_test; } @@ -3176,6 +3209,7 @@ static short transform_snap_context_project_view3d_mixed_impl( } short ED_transform_snap_object_project_view3d_ex(SnapObjectContext *sctx, + Depsgraph *depsgraph, const unsigned short snap_to, const struct SnapObjectParams *params, const float mval[2], @@ -3187,8 +3221,18 @@ short ED_transform_snap_object_project_view3d_ex(SnapObjectContext *sctx, Object **r_ob, float r_obmat[4][4]) { - return transform_snap_context_project_view3d_mixed_impl( - sctx, snap_to, params, mval, prev_co, dist_px, r_loc, r_no, r_index, r_ob, r_obmat); + return transform_snap_context_project_view3d_mixed_impl(sctx, + depsgraph, + snap_to, + params, + mval, + prev_co, + dist_px, + r_loc, + r_no, + r_index, + r_ob, + r_obmat); } /** @@ -3205,6 +3249,7 @@ short ED_transform_snap_object_project_view3d_ex(SnapObjectContext *sctx, * \return Snap success */ bool ED_transform_snap_object_project_view3d(SnapObjectContext *sctx, + Depsgraph *depsgraph, const unsigned short snap_to, const struct SnapObjectParams *params, const float mval[2], @@ -3213,14 +3258,25 @@ bool ED_transform_snap_object_project_view3d(SnapObjectContext *sctx, float r_loc[3], float r_no[3]) { - return ED_transform_snap_object_project_view3d_ex( - sctx, snap_to, params, mval, prev_co, dist_px, r_loc, r_no, NULL, NULL, NULL) != 0; + return ED_transform_snap_object_project_view3d_ex(sctx, + depsgraph, + snap_to, + params, + mval, + prev_co, + dist_px, + r_loc, + r_no, + NULL, + NULL, + NULL) != 0; } /** * see: #ED_transform_snap_object_project_ray_all */ bool ED_transform_snap_object_project_all_view3d_ex(SnapObjectContext *sctx, + Depsgraph *depsgraph, const struct SnapObjectParams *params, const float mval[2], float ray_depth, @@ -3229,7 +3285,7 @@ bool ED_transform_snap_object_project_all_view3d_ex(SnapObjectContext *sctx, { float ray_start[3], ray_normal[3]; - if (!ED_view3d_win_to_ray_clipped_ex(sctx->depsgraph, + if (!ED_view3d_win_to_ray_clipped_ex(depsgraph, sctx->v3d_data.region, sctx->v3d_data.v3d, mval, @@ -3241,7 +3297,7 @@ bool ED_transform_snap_object_project_all_view3d_ex(SnapObjectContext *sctx, } return ED_transform_snap_object_project_ray_all( - sctx, params, ray_start, ray_normal, ray_depth, sort, r_hit_list); + sctx, depsgraph, params, ray_start, ray_normal, ray_depth, sort, r_hit_list); } /** \} */ diff --git a/source/blender/makesrna/intern/rna_scene_api.c b/source/blender/makesrna/intern/rna_scene_api.c index 1b5077899f5..03032ac413e 100644 --- a/source/blender/makesrna/intern/rna_scene_api.c +++ b/source/blender/makesrna/intern/rna_scene_api.c @@ -161,9 +161,10 @@ static void rna_Scene_ray_cast(Scene *scene, normalize_v3(direction); Depsgraph *depsgraph = BKE_scene_get_depsgraph(bmain, scene, view_layer, true); - SnapObjectContext *sctx = ED_transform_snap_object_context_create(bmain, scene, depsgraph, 0); + SnapObjectContext *sctx = ED_transform_snap_object_context_create(bmain, scene, 0); bool ret = ED_transform_snap_object_project_ray_ex(sctx, + depsgraph, &(const struct SnapObjectParams){ .snap_select = SNAP_ALL, }, |