diff options
Diffstat (limited to 'source/blender/blenkernel')
-rw-r--r-- | source/blender/blenkernel/BKE_layer.h | 5 | ||||
-rw-r--r-- | source/blender/blenkernel/intern/layer_utils.c | 23 |
2 files changed, 20 insertions, 8 deletions
diff --git a/source/blender/blenkernel/BKE_layer.h b/source/blender/blenkernel/BKE_layer.h index 5682e3b9815..7091a060243 100644 --- a/source/blender/blenkernel/BKE_layer.h +++ b/source/blender/blenkernel/BKE_layer.h @@ -377,9 +377,8 @@ struct Object **BKE_view_layer_array_selected_objects_params( uint *r_len, const struct ObjectsInViewLayerParams *params); -struct Object *BKE_view_layer_first_selected_object_by_type(struct ViewLayer *view_layer, - const struct View3D *v3d, - const short ob_type); +struct Object *BKE_view_layer_non_active_selected_object(struct ViewLayer *view_layer, + const struct View3D *v3d); #define BKE_view_layer_array_selected_objects(view_layer, v3d, r_len, ...) \ BKE_view_layer_array_selected_objects_params( \ diff --git a/source/blender/blenkernel/intern/layer_utils.c b/source/blender/blenkernel/intern/layer_utils.c index b48aef2d05e..974a5a24e8a 100644 --- a/source/blender/blenkernel/intern/layer_utils.c +++ b/source/blender/blenkernel/intern/layer_utils.c @@ -192,15 +192,28 @@ bool BKE_view_layer_filter_edit_mesh_has_edges(Object *ob, void *UNUSED(user_dat return false; } -/** Select first selected object of the type specified. */ -Object *BKE_view_layer_first_selected_object_by_type(struct ViewLayer *view_layer, - const struct View3D *v3d, - const short ob_type) +/** + * Use this in rare cases we need to detect a pair of objects (active, selected). + * This returns the other non-active selected object. + * + * Returns NULL with it finds multiple other selected objects + * as behavior in this case would be random from the user perspective. + */ +Object *BKE_view_layer_non_active_selected_object(struct ViewLayer *view_layer, + const struct View3D *v3d) { + Object *ob_active = OBACT(view_layer); Object *ob_result = NULL; FOREACH_SELECTED_OBJECT_BEGIN (view_layer, v3d, ob_iter) { - if (ob_iter->type == ob_type) { + if (ob_iter == ob_active) { + continue; + } + + if (ob_result == NULL) { ob_result = ob_iter; + } + else { + ob_result = NULL; break; } } |