Cleanup: Move view layer array utils from macros to functions
These macros don't compile in C++ because of taking an address of a temporary and use of designated initializers. Besides that, using functions can improve debugging and type safety. Differentil Revision: https://developer.blender.org/D15693
This commit is contained in:
parent
d39abb74a0
commit
413c399ab8
|
@ -10,6 +10,7 @@
|
|||
|
||||
#include "DNA_layer_types.h"
|
||||
#include "DNA_listBase.h"
|
||||
#include "DNA_object_enums.h"
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
|
@ -520,46 +521,28 @@ struct Object **BKE_view_layer_array_from_objects_in_mode_params(
|
|||
uint *len,
|
||||
const struct ObjectsInModeParams *params);
|
||||
|
||||
#define BKE_view_layer_array_from_objects_in_mode(view_layer, v3d, r_len, ...) \
|
||||
BKE_view_layer_array_from_objects_in_mode_params( \
|
||||
view_layer, v3d, r_len, &(const struct ObjectsInModeParams)__VA_ARGS__)
|
||||
|
||||
#define BKE_view_layer_array_from_bases_in_mode(view_layer, v3d, r_len, ...) \
|
||||
BKE_view_layer_array_from_bases_in_mode_params( \
|
||||
view_layer, v3d, r_len, &(const struct ObjectsInModeParams)__VA_ARGS__)
|
||||
|
||||
bool BKE_view_layer_filter_edit_mesh_has_uvs(const struct Object *ob, void *user_data);
|
||||
bool BKE_view_layer_filter_edit_mesh_has_edges(const struct Object *ob, void *user_data);
|
||||
|
||||
/* Utility macros that wrap common args (add more as needed). */
|
||||
/* Utility functions that wrap common arguments (add more as needed). */
|
||||
|
||||
#define BKE_view_layer_array_from_objects_in_edit_mode(view_layer, v3d, r_len) \
|
||||
BKE_view_layer_array_from_objects_in_mode(view_layer, v3d, r_len, {.object_mode = OB_MODE_EDIT})
|
||||
struct Object **BKE_view_layer_array_from_objects_in_edit_mode(struct ViewLayer *view_layer,
|
||||
const struct View3D *v3d,
|
||||
uint *r_len);
|
||||
struct Base **BKE_view_layer_array_from_bases_in_edit_mode(struct ViewLayer *view_layer,
|
||||
const struct View3D *v3d,
|
||||
uint *r_len);
|
||||
struct Object **BKE_view_layer_array_from_objects_in_edit_mode_unique_data(
|
||||
struct ViewLayer *view_layer, const struct View3D *v3d, uint *r_len);
|
||||
|
||||
#define BKE_view_layer_array_from_bases_in_edit_mode(view_layer, v3d, r_len) \
|
||||
BKE_view_layer_array_from_bases_in_mode(view_layer, v3d, r_len, {.object_mode = OB_MODE_EDIT})
|
||||
|
||||
#define BKE_view_layer_array_from_objects_in_edit_mode_unique_data(view_layer, v3d, r_len) \
|
||||
BKE_view_layer_array_from_objects_in_mode( \
|
||||
view_layer, v3d, r_len, {.object_mode = OB_MODE_EDIT, .no_dup_data = true})
|
||||
|
||||
#define BKE_view_layer_array_from_bases_in_edit_mode_unique_data(view_layer, v3d, r_len) \
|
||||
BKE_view_layer_array_from_bases_in_mode( \
|
||||
view_layer, v3d, r_len, {.object_mode = OB_MODE_EDIT, .no_dup_data = true})
|
||||
|
||||
#define BKE_view_layer_array_from_objects_in_edit_mode_unique_data_with_uvs( \
|
||||
view_layer, v3d, r_len) \
|
||||
BKE_view_layer_array_from_objects_in_mode( \
|
||||
view_layer, \
|
||||
v3d, \
|
||||
r_len, \
|
||||
{.object_mode = OB_MODE_EDIT, \
|
||||
.no_dup_data = true, \
|
||||
.filter_fn = BKE_view_layer_filter_edit_mesh_has_uvs})
|
||||
|
||||
#define BKE_view_layer_array_from_objects_in_mode_unique_data(view_layer, v3d, r_len, mode) \
|
||||
BKE_view_layer_array_from_objects_in_mode( \
|
||||
view_layer, v3d, r_len, {.object_mode = mode, .no_dup_data = true})
|
||||
struct Base **BKE_view_layer_array_from_bases_in_edit_mode_unique_data(
|
||||
struct ViewLayer *view_layer, const struct View3D *v3d, uint *r_len);
|
||||
struct Object **BKE_view_layer_array_from_objects_in_edit_mode_unique_data_with_uvs(
|
||||
struct ViewLayer *view_layer, const struct View3D *v3d, uint *r_len);
|
||||
struct Object **BKE_view_layer_array_from_objects_in_mode_unique_data(struct ViewLayer *view_layer,
|
||||
const struct View3D *v3d,
|
||||
uint *r_len,
|
||||
eObjectMode mode);
|
||||
|
||||
struct ViewLayerAOV *BKE_view_layer_add_aov(struct ViewLayer *view_layer);
|
||||
void BKE_view_layer_remove_aov(struct ViewLayer *view_layer, struct ViewLayerAOV *aov);
|
||||
|
|
|
@ -149,6 +149,65 @@ Object **BKE_view_layer_array_from_objects_in_mode_params(ViewLayer *view_layer,
|
|||
return (Object **)base_array;
|
||||
}
|
||||
|
||||
struct Object **BKE_view_layer_array_from_objects_in_edit_mode(ViewLayer *view_layer,
|
||||
const View3D *v3d,
|
||||
uint *r_len)
|
||||
{
|
||||
struct ObjectsInModeParams params = {0};
|
||||
params.object_mode = OB_MODE_EDIT;
|
||||
return BKE_view_layer_array_from_objects_in_mode_params(view_layer, v3d, r_len, ¶ms);
|
||||
}
|
||||
|
||||
struct Base **BKE_view_layer_array_from_bases_in_edit_mode(ViewLayer *view_layer,
|
||||
const View3D *v3d,
|
||||
uint *r_len)
|
||||
{
|
||||
struct ObjectsInModeParams params = {0};
|
||||
params.object_mode = OB_MODE_EDIT;
|
||||
return BKE_view_layer_array_from_bases_in_mode_params(view_layer, v3d, r_len, ¶ms);
|
||||
}
|
||||
|
||||
struct Object **BKE_view_layer_array_from_objects_in_edit_mode_unique_data(ViewLayer *view_layer,
|
||||
const View3D *v3d,
|
||||
uint *r_len)
|
||||
{
|
||||
struct ObjectsInModeParams params = {0};
|
||||
params.object_mode = OB_MODE_EDIT;
|
||||
params.no_dup_data = true;
|
||||
return BKE_view_layer_array_from_objects_in_mode_params(view_layer, v3d, r_len, ¶ms);
|
||||
}
|
||||
|
||||
struct Base **BKE_view_layer_array_from_bases_in_edit_mode_unique_data(ViewLayer *view_layer,
|
||||
const View3D *v3d,
|
||||
uint *r_len)
|
||||
{
|
||||
struct ObjectsInModeParams params = {0};
|
||||
params.object_mode = OB_MODE_EDIT;
|
||||
params.no_dup_data = true;
|
||||
return BKE_view_layer_array_from_bases_in_mode_params(view_layer, v3d, r_len, ¶ms);
|
||||
}
|
||||
|
||||
struct Object **BKE_view_layer_array_from_objects_in_edit_mode_unique_data_with_uvs(
|
||||
ViewLayer *view_layer, const View3D *v3d, uint *r_len)
|
||||
{
|
||||
struct ObjectsInModeParams params = {0};
|
||||
params.object_mode = OB_MODE_EDIT;
|
||||
params.no_dup_data = true;
|
||||
params.filter_fn = BKE_view_layer_filter_edit_mesh_has_uvs;
|
||||
return BKE_view_layer_array_from_objects_in_mode_params(view_layer, v3d, r_len, ¶ms);
|
||||
}
|
||||
|
||||
struct Object **BKE_view_layer_array_from_objects_in_mode_unique_data(ViewLayer *view_layer,
|
||||
const View3D *v3d,
|
||||
uint *r_len,
|
||||
const eObjectMode mode)
|
||||
{
|
||||
struct ObjectsInModeParams params = {0};
|
||||
params.object_mode = mode;
|
||||
params.no_dup_data = true;
|
||||
return BKE_view_layer_array_from_objects_in_mode_params(view_layer, v3d, r_len, ¶ms);
|
||||
}
|
||||
|
||||
/** \} */
|
||||
|
||||
/* -------------------------------------------------------------------- */
|
||||
|
|
|
@ -339,12 +339,7 @@ static void *ed_armature_pick_bone_impl(
|
|||
Base **bases;
|
||||
|
||||
if (vc.obedit != NULL) {
|
||||
bases = BKE_view_layer_array_from_bases_in_mode(vc.view_layer,
|
||||
vc.v3d,
|
||||
&bases_len,
|
||||
{
|
||||
.object_mode = OB_MODE_EDIT,
|
||||
});
|
||||
bases = BKE_view_layer_array_from_bases_in_edit_mode(vc.view_layer, vc.v3d, &bases_len);
|
||||
}
|
||||
else {
|
||||
bases = BKE_object_pose_base_array_get(vc.view_layer, vc.v3d, &bases_len);
|
||||
|
|
|
@ -194,13 +194,13 @@ Object **ED_object_array_in_mode_or_selected(bContext *C,
|
|||
/* When in a mode that supports multiple active objects, use "objects in mode"
|
||||
* instead of the object's selection. */
|
||||
if (use_objects_in_mode) {
|
||||
objects = BKE_view_layer_array_from_objects_in_mode(view_layer,
|
||||
v3d,
|
||||
r_objects_len,
|
||||
{.object_mode = ob_active->mode,
|
||||
.no_dup_data = true,
|
||||
.filter_fn = filter_fn,
|
||||
.filter_userdata = filter_user_data});
|
||||
struct ObjectsInModeParams params = {0};
|
||||
params.object_mode = ob_active->mode;
|
||||
params.no_dup_data = true;
|
||||
params.filter_fn = filter_fn;
|
||||
params.filter_userdata = filter_user_data;
|
||||
objects = BKE_view_layer_array_from_objects_in_mode_params(
|
||||
view_layer, v3d, r_objects_len, ¶ms);
|
||||
}
|
||||
else {
|
||||
objects = BKE_view_layer_array_selected_objects(
|
||||
|
|
|
@ -940,15 +940,12 @@ static void init_TransDataContainers(TransInfo *t,
|
|||
|
||||
bool free_objects = false;
|
||||
if (objects == NULL) {
|
||||
objects = BKE_view_layer_array_from_objects_in_mode(
|
||||
t->view_layer,
|
||||
(t->spacetype == SPACE_VIEW3D) ? t->view : NULL,
|
||||
&objects_len,
|
||||
{
|
||||
.object_mode = object_mode,
|
||||
/* Pose transform operates on `ob->pose` so don't skip duplicate object-data. */
|
||||
.no_dup_data = (object_mode & OB_MODE_POSE) == 0,
|
||||
});
|
||||
struct ObjectsInModeParams params = {0};
|
||||
params.object_mode = object_mode;
|
||||
/* Pose transform operates on `ob->pose` so don't skip duplicate object-data. */
|
||||
params.no_dup_data = (object_mode & OB_MODE_POSE) == 0;
|
||||
objects = BKE_view_layer_array_from_objects_in_mode_params(
|
||||
t->view_layer, (t->spacetype == SPACE_VIEW3D) ? t->view : NULL, &objects_len, ¶ms);
|
||||
free_objects = true;
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue