@@ -360,15 +360,6 @@ def select_plane_method():
360360 plane_normal = tool .Polyline .use_transform_orientations (plane_normal )
361361 return plane_origin , plane_normal
362362
363- def handle_snap_points_in_xray_mode (closest_snaps , detected_snaps , snap_obj , is_xray ):
364- for snap in closest_snaps :
365- if snap_obj .obj == snap ["object" ]:
366- if "face_index" in snap and snap ["face_index" ]:
367- points = tool .Raycast .ray_cast_by_proximity_2d (context , event , snap_obj )
368- for point in points :
369- point ["group" ] = "Object"
370- detected_snaps .append (point )
371- return detected_snaps
372363
373364 # Polyline
374365 polyline_props = tool .Model .get_polyline_props ()
@@ -401,17 +392,28 @@ def handle_snap_points_in_xray_mode(closest_snaps, detected_snaps, snap_obj, is_
401392 closest_snaps = tool .Raycast .ray_cast_and_get_closest_to_camera_snaps (context , event , objs_to_raycast )
402393 detected_snaps .extend (closest_snaps )
403394
404- xray_conditions = (space .shading .type == "SOLID" and space .shading .show_xray ) or (space .shading .type == "WIREFRAME" and space .shading .show_xray_wireframe )
395+ xray_mode = (space .shading .type == "SOLID" and space .shading .show_xray ) or (space .shading .type == "WIREFRAME" and space .shading .show_xray_wireframe )
405396
406- if xray_conditions :
407- for snap_obj in objs_to_raycast :
408- detected_snaps = handle_snap_points_in_xray_mode (closest_snaps , detected_snaps , snap_obj , is_xray = True )
409- else :
410- for snap_obj in objs_to_raycast :
411- for snap in closest_snaps :
412- if "is_closest_to_camera" in snap and snap ["is_closest_to_camera" ]:
413- detected_snaps = handle_snap_points_in_xray_mode ([snap ], detected_snaps , snap_obj , is_xray = False )
414-
397+ for snap_obj in objs_to_raycast :
398+ for snap in closest_snaps :
399+ if snap_obj .obj == snap ["object" ]:
400+ if xray_mode :
401+ if "face_index" in snap and snap ["face_index" ]:
402+ snap_points = tool .Raycast .ray_cast_by_proximity_2d (context , event , snap_obj )
403+ for point in snap_points :
404+ point ["group" ] = "Object"
405+ detected_snaps .append (point )
406+ else :
407+ # If it is a solid object that is closest to camera it ignores all the rest
408+ if "is_closest_to_camera" in snap and snap ["is_closest_to_camera" ] and snap ["group" ] == "Object" :
409+ closest_snap = [snap ] # discards objects that aren't the closest
410+ if "face_index" in snap and snap ["face_index" ]:
411+ snap_points = tool .Raycast .ray_cast_by_proximity_2d (context , event , snap_obj )
412+ for point in snap_points :
413+ point ["group" ] = "Object"
414+ closest_snap .append (point )
415+ detected_snaps = closest_snap
416+
415417 # snap to cut geometry (e.g. in plan view)
416418 if CutDecorator .installed :
417419 cut_snaps = []
0 commit comments