diff options
author | Campbell Barton <ideasman42@gmail.com> | 2012-10-05 05:27:28 +0400 |
---|---|---|
committer | Campbell Barton <ideasman42@gmail.com> | 2012-10-05 05:27:28 +0400 |
commit | 7339b09e7f2fa59cb672ce103036552fcbea0a72 (patch) | |
tree | cd38eda04934f2617cc9b6502c02d48b8e4ca94a /source/blender/editors/space_view3d/view3d_view.c | |
parent | 3eba19881894c17d2645f9e9723eae1be822e55a (diff) |
add ED_view3d_project_float_global, ED_view3d_project_float_object, ED_view3d_project_float_ex function calls and cleanup cursor3d set function which had some odd logic.
Diffstat (limited to 'source/blender/editors/space_view3d/view3d_view.c')
-rw-r--r-- | source/blender/editors/space_view3d/view3d_view.c | 36 |
1 files changed, 34 insertions, 2 deletions
diff --git a/source/blender/editors/space_view3d/view3d_view.c b/source/blender/editors/space_view3d/view3d_view.c index cdb75cdfa74..ac721f3ea2e 100644 --- a/source/blender/editors/space_view3d/view3d_view.c +++ b/source/blender/editors/space_view3d/view3d_view.c @@ -965,7 +965,7 @@ eV3DProjStatus ED_view3d_project_short_ex(ARegion *ar, float perspmat[4][4], con r_co[1] = (short)floor(tvec[1]); } else { - return V3D_PROJ_RET_OVERFLOW; + ret = V3D_PROJ_RET_OVERFLOW; } } return ret; @@ -984,7 +984,25 @@ eV3DProjStatus ED_view3d_project_int_ex(ARegion *ar, float perspmat[4][4], const r_co[1] = (int)floor(tvec[1]); } else { - return V3D_PROJ_RET_OVERFLOW; + ret = V3D_PROJ_RET_OVERFLOW; + } + } + return ret; +} + +eV3DProjStatus ED_view3d_project_float_ex(ARegion *ar, float perspmat[4][4], const int is_local, + const float co[3], float r_co[2], eV3DProjTest flag) +{ + float tvec[2]; + eV3DProjStatus ret = ed_view3d_project__internal(ar, perspmat, is_local, co, tvec, flag); + if (ret == V3D_PROJ_RET_SUCCESS) { + if (finite(tvec[0]) && + finite(tvec[1])) + { + copy_v2_v2(r_co, tvec); + } + else { + ret = V3D_PROJ_RET_OVERFLOW; } } return ret; @@ -1016,6 +1034,20 @@ eV3DProjStatus ED_view3d_project_int_object(ARegion *ar, const float co[3], int return ED_view3d_project_int_ex(ar, rv3d->persmatob, TRUE, co, r_co, flag); } +/* --- float --- */ +eV3DProjStatus ED_view3d_project_float_global(ARegion *ar, const float co[3], float r_co[2], eV3DProjTest flag) +{ + RegionView3D *rv3d = ar->regiondata; + return ED_view3d_project_float_ex(ar, rv3d->persmat, FALSE, co, r_co, flag); +} +/* object space, use ED_view3d_init_mats_rv3d before calling */ +eV3DProjStatus ED_view3d_project_float_object(ARegion *ar, const float co[3], float r_co[2], eV3DProjTest flag) +{ + RegionView3D *rv3d = ar->regiondata; + return ED_view3d_project_float_ex(ar, rv3d->persmatob, TRUE, co, r_co, flag); +} + + void ED_view3d_project_float(ARegion *ar, const float co[3], float r_co[2]) { RegionView3D *rv3d = ar->regiondata; |