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:
@@ -54,9 +54,13 @@ def region_2d_to_vector_3d(region, rv3d, coord):
|
|||||||
|
|
||||||
w = out.dot(persinv[3].xyz) + persinv[3][3]
|
w = out.dot(persinv[3].xyz) + persinv[3][3]
|
||||||
|
|
||||||
return ((persinv * out) / w) - viewinv.translation
|
view_vector = ((persinv * out) / w) - viewinv.translation
|
||||||
else:
|
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):
|
def region_2d_to_origin_3d(region, rv3d, coord):
|
||||||
|
@@ -2,7 +2,7 @@ import bpy
|
|||||||
from bpy_extras import view3d_utils
|
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"""
|
"""Run this function on left mouse, execute the ray cast"""
|
||||||
# get the context arguments
|
# get the context arguments
|
||||||
scene = context.scene
|
scene = context.scene
|
||||||
@@ -13,6 +13,11 @@ def main(context, event, ray_max=10000.0):
|
|||||||
# get the ray from the viewport and mouse
|
# get the ray from the viewport and mouse
|
||||||
view_vector = view3d_utils.region_2d_to_vector_3d(region, rv3d, coord)
|
view_vector = view3d_utils.region_2d_to_vector_3d(region, rv3d, coord)
|
||||||
ray_origin = view3d_utils.region_2d_to_origin_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)
|
ray_target = ray_origin + (view_vector * ray_max)
|
||||||
|
|
||||||
def visible_objects_and_duplis():
|
def visible_objects_and_duplis():
|
||||||
|
Reference in New Issue
Block a user