diff options
author | Campbell Barton <ideasman42@gmail.com> | 2018-09-20 05:00:02 +0300 |
---|---|---|
committer | Campbell Barton <ideasman42@gmail.com> | 2018-09-20 05:00:02 +0300 |
commit | c9df0ea1474781e97f9e5fdaa84c6643f14cd889 (patch) | |
tree | 75f3e3b9b6bb375989097f3b5f09abfee487c7d6 /source/blender | |
parent | de32dc6b275f253348d316077ab8c5f86a85908a (diff) |
3D View: add a simple un-clipped win_to_ray
Diffstat (limited to 'source/blender')
-rw-r--r-- | source/blender/editors/curve/editcurve_paint.c | 3 | ||||
-rw-r--r-- | source/blender/editors/include/ED_view3d.h | 3 | ||||
-rw-r--r-- | source/blender/editors/space_view3d/view3d_project.c | 18 |
3 files changed, 22 insertions, 2 deletions
diff --git a/source/blender/editors/curve/editcurve_paint.c b/source/blender/editors/curve/editcurve_paint.c index b4880e628df..80231a1261a 100644 --- a/source/blender/editors/curve/editcurve_paint.c +++ b/source/blender/editors/curve/editcurve_paint.c @@ -186,7 +186,6 @@ static bool stroke_elem_project( float surface_offset, const float radius, float r_location_world[3], float r_normal_world[3]) { - View3D *v3d = cdd->vc.v3d; ARegion *ar = cdd->vc.ar; RegionView3D *rv3d = cdd->vc.rv3d; @@ -196,7 +195,7 @@ static bool stroke_elem_project( if (cdd->project.use_plane) { /* get the view vector to 'location' */ float ray_origin[3], ray_direction[3]; - ED_view3d_win_to_ray_clipped(cdd->vc.ar, v3d, mval_fl, ray_origin, ray_direction, false); + ED_view3d_win_to_ray(ar, mval_fl, ray_origin, ray_direction); float lambda; if (isect_ray_plane_v3(ray_origin, ray_direction, cdd->project.plane, &lambda, true)) { diff --git a/source/blender/editors/include/ED_view3d.h b/source/blender/editors/include/ED_view3d.h index 96047b30694..0f8cd7260fd 100644 --- a/source/blender/editors/include/ED_view3d.h +++ b/source/blender/editors/include/ED_view3d.h @@ -227,6 +227,9 @@ bool ED_view3d_win_to_ray_clipped( bool ED_view3d_win_to_ray_clipped_ex( const struct ARegion *ar, 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); +void ED_view3d_win_to_ray( + const struct ARegion *ar, const float mval[2], + float r_ray_start[3], float r_ray_normal[3]); void ED_view3d_global_to_vector(const struct RegionView3D *rv3d, const float coord[3], float vec[3]); void ED_view3d_win_to_3d( const struct View3D *v3d, const struct ARegion *ar, diff --git a/source/blender/editors/space_view3d/view3d_project.c b/source/blender/editors/space_view3d/view3d_project.c index 63057e01f20..fa166cbaaab 100644 --- a/source/blender/editors/space_view3d/view3d_project.c +++ b/source/blender/editors/space_view3d/view3d_project.c @@ -407,6 +407,24 @@ bool ED_view3d_win_to_ray_clipped( } /** + * Calculate a 3d viewpoint and direction vector from 2d window coordinates. + * This ray_start is located at the viewpoint, ray_normal is the direction towards mval. + * \param ar The region (used for the window width and height). + * \param mval The area relative 2d location (such as event->mval, converted into float[2]). + * \param r_ray_start The world-space point where the ray intersects the window plane. + * \param r_ray_normal The normalized world-space direction of towards mval. + * + * \note Ignores view near/far clipping, to take this into account use #ED_view3d_win_to_ray_clipped. + */ +void ED_view3d_win_to_ray( + const ARegion *ar, const float mval[2], + float r_ray_start[3], float r_ray_normal[3]) +{ + ED_view3d_win_to_origin(ar, mval, r_ray_start); + ED_view3d_win_to_vector(ar, mval, r_ray_normal); +} + +/** * Calculate a normalized 3d direction vector from the viewpoint towards a global location. * In orthographic view the resulting vector will match the view vector. * \param rv3d The region (used for the window width and height). |