python templates: update operator_modal_view3d_raycast to 2.8
authorPhilipp Oeser <info@graphics-engineer.com>
Tue, 21 May 2019 13:21:33 +0000 (15:21 +0200)
committerPhilipp Oeser <info@graphics-engineer.com>
Tue, 21 May 2019 14:39:48 +0000 (16:39 +0200)
Reviewers: JacquesLucke, sergey

Differential Revision: https://developer.blender.org/D4914

release/scripts/templates_py/operator_modal_view3d_raycast.py

index 2c596b3..7569477 100644 (file)
@@ -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):