[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