Fix T41902: Flipped persp/ortho region_2d_to_vector_3d

- Ortho result from view3d_utils.region_2d_to_vector_3d was flipped.
- Persp result wasn't normalized.
- operator_modal_view3d_raycast.py failed for ortho views.

Thanks to Philipp Oeser for the initial fix.
This commit is contained in:
Campbell Barton 2014-09-22 11:01:59 +10:00
parent 217095f622
commit 61baf6e813
2 changed files with 12 additions and 3 deletions

@ -54,9 +54,13 @@ def region_2d_to_vector_3d(region, rv3d, coord):
w = out.dot(persinv[3].xyz) + persinv[3][3]
return ((persinv * out) / w) - viewinv.translation
view_vector = ((persinv * out) / w) - viewinv.translation
else:
return viewinv.col[2].xyz.normalized()
view_vector = -viewinv.col[2].xyz
view_vector.normalize()
return view_vector
def region_2d_to_origin_3d(region, rv3d, coord):

@ -2,7 +2,7 @@ import bpy
from bpy_extras import view3d_utils
def main(context, event, ray_max=10000.0):
def main(context, event, ray_max=1000.0):
"""Run this function on left mouse, execute the ray cast"""
# get the context arguments
scene = context.scene
@ -13,6 +13,11 @@ def main(context, event, ray_max=10000.0):
# get the ray from the viewport and mouse
view_vector = view3d_utils.region_2d_to_vector_3d(region, rv3d, coord)
ray_origin = view3d_utils.region_2d_to_origin_3d(region, rv3d, coord)
if rv3d.view_perspective == 'ORTHO':
# move ortho origin back
ray_origin = ray_origin - (view_vector * (ray_max / 2.0))
ray_target = ray_origin + (view_vector * ray_max)
def visible_objects_and_duplis():