[Bf-blender-cvs] [4f6d6f982ff] master: python templates: update operator_modal_view3d_raycast to 2.8
Philipp Oeser
noreply at git.blender.org
Tue May 21 16:48:56 CEST 2019
Commit: 4f6d6f982ff5e81bcd5a8828f88fbbde2b3c7d22
Author: Philipp Oeser
Date: Tue May 21 15:21:33 2019 +0200
Branches: master
https://developer.blender.org/rB4f6d6f982ff5e81bcd5a8828f88fbbde2b3c7d22
python templates: update operator_modal_view3d_raycast to 2.8
Reviewers: JacquesLucke, sergey
Differential Revision: https://developer.blender.org/D4914
===================================================================
M release/scripts/templates_py/operator_modal_view3d_raycast.py
===================================================================
diff --git a/release/scripts/templates_py/operator_modal_view3d_raycast.py b/release/scripts/templates_py/operator_modal_view3d_raycast.py
index 2c596b3b356..7569477af68 100644
--- a/release/scripts/templates_py/operator_modal_view3d_raycast.py
+++ b/release/scripts/templates_py/operator_modal_view3d_raycast.py
@@ -19,19 +19,15 @@ def main(context, event):
def visible_objects_and_duplis():
"""Loop over (object, matrix) pairs (mesh only)"""
- for obj in context.visible_objects:
- if obj.type == 'MESH':
+ depsgraph = bpy.context.evaluated_depsgraph_get()
+ for dup in depsgraph.object_instances:
+ if dup.is_instance: # Real dupli instance
+ obj = dup.instance_object
+ yield (obj, dup.matrix_world.copy())
+ else: # Usual object
+ obj = dup.object
yield (obj, obj.matrix_world.copy())
- if obj.instance_type != 'NONE':
- obj.dupli_list_create(scene)
- for dob in obj.dupli_list:
- obj_dupli = dob.object
- if obj_dupli.type == 'MESH':
- yield (obj_dupli, dob.matrix.copy())
-
- obj.dupli_list_clear()
-
def obj_ray_cast(obj, matrix):
"""Wrapper for ray casting that moves the ray into object space"""
@@ -67,8 +63,11 @@ def main(context, event):
# now we have the object under the mouse cursor,
# we could do lots of stuff but for the example just select.
if best_obj is not None:
- best_obj.select_set(True)
- context.view_layer.objects.active = best_obj
+ # for selection etc. we need the original object,
+ # evaluated objects are not in viewlayer
+ best_original = best_obj.original
+ best_original.select_set(True)
+ context.view_layer.objects.active = best_original
class ViewOperatorRayCast(bpy.types.Operator):
More information about the Bf-blender-cvs
mailing list