Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'source/blender/blenkernel')
-rw-r--r--source/blender/blenkernel/BKE_layer.h103
-rw-r--r--source/blender/blenkernel/BKE_object.h12
-rw-r--r--source/blender/blenkernel/intern/layer.c89
-rw-r--r--source/blender/blenkernel/intern/layer_utils.c10
-rw-r--r--source/blender/blenkernel/intern/object.c24
-rw-r--r--source/blender/blenkernel/intern/object_update.c1
6 files changed, 161 insertions, 78 deletions
diff --git a/source/blender/blenkernel/BKE_layer.h b/source/blender/blenkernel/BKE_layer.h
index 2d736b41d1a..e98fa189379 100644
--- a/source/blender/blenkernel/BKE_layer.h
+++ b/source/blender/blenkernel/BKE_layer.h
@@ -53,6 +53,7 @@ struct Main;
struct Object;
struct RenderEngine;
struct Scene;
+struct View3D;
struct ViewLayer;
struct WorkSpace;
@@ -140,6 +141,11 @@ void BKE_layer_eval_view_layer_indexed(
/* iterators */
+typedef struct ObjectsVisibleIteratorData {
+ struct ViewLayer *view_layer;
+ struct View3D *v3d;
+} ObjectsVisibleIteratorData;
+
void BKE_view_layer_selected_objects_iterator_begin(BLI_Iterator *iter, void *data_in);
void BKE_view_layer_selected_objects_iterator_next(BLI_Iterator *iter);
void BKE_view_layer_selected_objects_iterator_end(BLI_Iterator *iter);
@@ -155,6 +161,7 @@ void BKE_view_layer_selected_editable_objects_iterator_end(BLI_Iterator *iter);
struct ObjectsInModeIteratorData {
int object_mode;
struct ViewLayer *view_layer;
+ struct View3D *v3d;
struct Base *base_active;
};
@@ -174,39 +181,57 @@ void BKE_view_layer_visible_bases_iterator_begin(BLI_Iterator *iter, void *data_
void BKE_view_layer_visible_bases_iterator_next(BLI_Iterator *iter);
void BKE_view_layer_visible_bases_iterator_end(BLI_Iterator *iter);
-#define FOREACH_SELECTED_OBJECT_BEGIN(view_layer, _instance) \
+#define FOREACH_SELECTED_OBJECT_BEGIN(_view_layer, _v3d, _instance) \
+{ \
+ struct ObjectsVisibleIteratorData data_ = { \
+ .view_layer = _view_layer, \
+ .v3d = _v3d, \
+ }; \
ITER_BEGIN(BKE_view_layer_selected_objects_iterator_begin, \
BKE_view_layer_selected_objects_iterator_next, \
BKE_view_layer_selected_objects_iterator_end, \
- view_layer, Object *, _instance)
+ &data_, Object *, _instance)
#define FOREACH_SELECTED_OBJECT_END \
- ITER_END
+ ITER_END; \
+} ((void)0)
-#define FOREACH_SELECTED_EDITABLE_OBJECT_BEGIN(view_layer, _instance) \
+#define FOREACH_SELECTED_EDITABLE_OBJECT_BEGIN(_view_layer, _v3d, _instance) \
+{ \
+ struct ObjectsVisibleIteratorData data_ = { \
+ .view_layer = _view_layer, \
+ .v3d = _v3d, \
+ }; \
ITER_BEGIN(BKE_view_layer_selected_editable_objects_iterator_begin, \
BKE_view_layer_selected_editable_objects_iterator_next, \
BKE_view_layer_selected_editable_objects_iterator_end, \
- view_layer, Object *, _instance)
+ &data_, Object *, _instance)
#define FOREACH_SELECTED_EDITABLE_OBJECT_END \
- ITER_END
+ ITER_END; \
+} ((void)0)
-#define FOREACH_VISIBLE_OBJECT_BEGIN(view_layer, _instance) \
+#define FOREACH_VISIBLE_OBJECT_BEGIN(_view_layer, _v3d, _instance) \
+{ \
+ struct ObjectsVisibleIteratorData data_ = { \
+ .view_layer = _view_layer, \
+ .v3d = _v3d, \
+ }; \
ITER_BEGIN(BKE_view_layer_visible_objects_iterator_begin, \
BKE_view_layer_visible_objects_iterator_next, \
BKE_view_layer_visible_objects_iterator_end, \
- view_layer, Object *, _instance)
+ &data_, Object *, _instance)
#define FOREACH_VISIBLE_OBJECT_END \
- ITER_END
-
+ ITER_END; \
+} ((void)0)
-#define FOREACH_BASE_IN_MODE_BEGIN(_view_layer, _object_mode, _instance) \
+#define FOREACH_BASE_IN_MODE_BEGIN(_view_layer, _v3d, _object_mode, _instance) \
{ \
struct ObjectsInModeIteratorData data_ = { \
.object_mode = _object_mode, \
.view_layer = _view_layer, \
+ .v3d = _v3d, \
.base_active = _view_layer->basact, \
}; \
ITER_BEGIN(BKE_view_layer_bases_in_mode_iterator_begin, \
@@ -218,14 +243,14 @@ void BKE_view_layer_visible_bases_iterator_end(BLI_Iterator *iter);
ITER_END; \
} ((void)0)
-#define FOREACH_BASE_IN_EDIT_MODE_BEGIN(_view_layer, _instance) \
- FOREACH_BASE_IN_MODE_BEGIN(_view_layer, OB_MODE_EDIT, _instance)
+#define FOREACH_BASE_IN_EDIT_MODE_BEGIN(_view_layer, _v3d, _instance) \
+ FOREACH_BASE_IN_MODE_BEGIN(_view_layer, _v3d, OB_MODE_EDIT, _instance)
#define FOREACH_BASE_IN_EDIT_MODE_END \
FOREACH_BASE_IN_MODE_END
-#define FOREACH_OBJECT_IN_MODE_BEGIN(_view_layer, _object_mode, _instance) \
- FOREACH_BASE_IN_MODE_BEGIN(_view_layer, _object_mode, _base) { \
+#define FOREACH_OBJECT_IN_MODE_BEGIN(_view_layer, _v3d, _object_mode, _instance) \
+ FOREACH_BASE_IN_MODE_BEGIN(_view_layer, _v3d, _object_mode, _base) { \
Object *_instance = _base->object;
#define FOREACH_OBJECT_IN_MODE_END \
@@ -247,14 +272,20 @@ void BKE_view_layer_visible_bases_iterator_end(BLI_Iterator *iter);
#define FOREACH_SELECTED_BASE_END \
ITER_END
-#define FOREACH_VISIBLE_BASE_BEGIN(view_layer, _instance) \
+#define FOREACH_VISIBLE_BASE_BEGIN(_view_layer, _v3d, _instance) \
+{ \
+ struct ObjectsVisibleIteratorData data_ = { \
+ .view_layer = _view_layer, \
+ .v3d = _v3d, \
+ }; \
ITER_BEGIN(BKE_view_layer_visible_bases_iterator_begin, \
BKE_view_layer_visible_bases_iterator_next, \
BKE_view_layer_visible_bases_iterator_end, \
- view_layer, Base *, _instance)
+ &data_, Base *, _instance)
#define FOREACH_VISIBLE_BASE_END \
- ITER_END
+ ITER_END; \
+} ((void)0)
#define FOREACH_OBJECT_BEGIN(view_layer, _instance) \
@@ -332,21 +363,21 @@ struct ObjectsInModeParams {
};
Base **BKE_view_layer_array_from_bases_in_mode_params(
- struct ViewLayer *view_layer, uint *r_len,
+ struct ViewLayer *view_layer, struct View3D *v3d, uint *r_len,
const struct ObjectsInModeParams *params);
struct Object **BKE_view_layer_array_from_objects_in_mode_params(
- struct ViewLayer *view_layer, uint *len,
+ struct ViewLayer *view_layer, struct View3D *v3d, uint *len,
const struct ObjectsInModeParams *params);
-#define BKE_view_layer_array_from_objects_in_mode(view_layer, r_len, ...) \
+#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, r_len, \
+ view_layer, v3d, r_len, \
&(const struct ObjectsInModeParams)__VA_ARGS__)
-#define BKE_view_layer_array_from_bases_in_mode(view_layer, r_len, ...) \
+#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, r_len, \
+ view_layer, v3d, r_len, \
&(const struct ObjectsInModeParams)__VA_ARGS__)
bool BKE_view_layer_filter_edit_mesh_has_uvs(struct Object *ob, void *user_data);
@@ -354,38 +385,38 @@ bool BKE_view_layer_filter_edit_mesh_has_edges(struct Object *ob, void *user_dat
/* Utility macros that wrap common args (add more as needed). */
-#define BKE_view_layer_array_from_objects_in_edit_mode(view_layer, r_len) \
+#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, r_len, { \
+ view_layer, v3d, r_len, { \
.object_mode = OB_MODE_EDIT});
-#define BKE_view_layer_array_from_bases_in_edit_mode(view_layer, 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, r_len, { \
+ view_layer, v3d, r_len, { \
.object_mode = OB_MODE_EDIT});
-#define BKE_view_layer_array_from_objects_in_edit_mode_unique_data(view_layer, r_len) \
+#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, r_len, { \
+ 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, r_len) \
+#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, r_len, { \
+ 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, r_len) \
+#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, r_len, { \
+ 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, r_len, mode) \
+#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, r_len, { \
+ view_layer, v3d, r_len, { \
.object_mode = mode, \
.no_dup_data = true});
diff --git a/source/blender/blenkernel/BKE_object.h b/source/blender/blenkernel/BKE_object.h
index e763c58efd3..35de1501494 100644
--- a/source/blender/blenkernel/BKE_object.h
+++ b/source/blender/blenkernel/BKE_object.h
@@ -148,13 +148,13 @@ bool BKE_object_pose_context_check(const struct Object *ob);
struct Object *BKE_object_pose_armature_get(struct Object *ob);
struct Object *BKE_object_pose_armature_get_visible(struct Object *ob, struct ViewLayer *view_layer, struct View3D *v3d);
-struct Object **BKE_object_pose_array_get_ex(struct ViewLayer *view_layer, unsigned int *r_objects_len, bool unique);
-struct Object **BKE_object_pose_array_get_unique(struct ViewLayer *view_layer, unsigned int *r_objects_len);
-struct Object **BKE_object_pose_array_get(struct ViewLayer *view_layer, unsigned int *r_objects_len);
+struct Object **BKE_object_pose_array_get_ex(struct ViewLayer *view_layer, struct View3D *v3d, unsigned int *r_objects_len, bool unique);
+struct Object **BKE_object_pose_array_get_unique(struct ViewLayer *view_layer, struct View3D *v3d, unsigned int *r_objects_len);
+struct Object **BKE_object_pose_array_get(struct ViewLayer *view_layer, struct View3D *v3d, unsigned int *r_objects_len);
-struct Base **BKE_object_pose_base_array_get_ex(struct ViewLayer *view_layer, unsigned int *r_bases_len, bool unique);
-struct Base **BKE_object_pose_base_array_get_unique(struct ViewLayer *view_layer, unsigned int *r_bases_len);
-struct Base **BKE_object_pose_base_array_get(struct ViewLayer *view_layer, unsigned int *r_bases_len);
+struct Base **BKE_object_pose_base_array_get_ex(struct ViewLayer *view_layer, struct View3D *v3d, unsigned int *r_bases_len, bool unique);
+struct Base **BKE_object_pose_base_array_get_unique(struct ViewLayer *view_layer, struct View3D *v3d, unsigned int *r_bases_len);
+struct Base **BKE_object_pose_base_array_get(struct ViewLayer *view_layer, struct View3D *v3d, unsigned int *r_bases_len);
void BKE_object_get_parent_matrix(
struct Depsgraph *depsgraph, struct Scene *scene, struct Object *ob,
diff --git a/source/blender/blenkernel/intern/layer.c b/source/blender/blenkernel/intern/layer.c
index 2f9c818934f..4405255b874 100644
--- a/source/blender/blenkernel/intern/layer.c
+++ b/source/blender/blenkernel/intern/layer.c
@@ -1096,9 +1096,40 @@ void BKE_override_layer_collection_boolean_add(
/** \name Private Iterator Helpers
* \{ */
-static void object_bases_iterator_begin(BLI_Iterator *iter, void *data_in, const int flag)
+typedef struct LayerObjectBaseIteratorData {
+ View3D *v3d;
+ Base *base;
+} LayerObjectBaseIteratorData;
+
+static bool object_bases_iterator_is_valid_ex(View3D *v3d, Base *base, const int flag)
+{
+ if (v3d != NULL) {
+ if ((v3d->object_type_exclude_viewport & (1 << base->object->type)) != 0) {
+ return false;
+ }
+
+ if (v3d->localvd && ((base->local_view_bits & v3d->local_view_uuid) == 0)) {
+ return false;
+ }
+ }
+
+ if ((base->flag & flag) == 0) {
+ return false;
+ }
+
+ return true;
+}
+
+static bool object_bases_iterator_is_valid(View3D *v3d, Base *base)
+{
+ return object_bases_iterator_is_valid_ex(v3d, base, ~(0));
+}
+
+static void object_bases_iterator_begin(BLI_Iterator *iter, void *data_in_v, const int flag)
{
- ViewLayer *view_layer = data_in;
+ ObjectsVisibleIteratorData *data_in = data_in_v;
+ ViewLayer *view_layer = data_in->view_layer;
+ View3D *v3d = data_in->v3d;
Base *base = view_layer->object_bases.first;
/* when there are no objects */
@@ -1107,9 +1138,13 @@ static void object_bases_iterator_begin(BLI_Iterator *iter, void *data_in, const
return;
}
- iter->data = base;
+ LayerObjectBaseIteratorData *data = MEM_callocN(sizeof(LayerObjectBaseIteratorData), __func__);
+ iter->data = data;
- if ((base->flag & flag) == 0) {
+ data->v3d = v3d;
+ data->base = base;
+
+ if (object_bases_iterator_is_valid_ex(v3d, base, flag) == false) {
object_bases_iterator_next(iter, flag);
}
else {
@@ -1119,12 +1154,13 @@ static void object_bases_iterator_begin(BLI_Iterator *iter, void *data_in, const
static void object_bases_iterator_next(BLI_Iterator *iter, const int flag)
{
- Base *base = ((Base *)iter->data)->next;
+ LayerObjectBaseIteratorData *data = iter->data;
+ Base *base = data->base->next;
while (base) {
- if ((base->flag & flag) != 0) {
+ if (object_bases_iterator_is_valid_ex(data->v3d, base, flag)) {
iter->current = base;
- iter->data = base;
+ data->base = base;
return;
}
base = base->next;
@@ -1133,6 +1169,11 @@ static void object_bases_iterator_next(BLI_Iterator *iter, const int flag)
iter->valid = false;
}
+static void object_bases_iterator_end(BLI_Iterator *iter)
+{
+ MEM_SAFE_FREE(iter->data);
+}
+
static void objects_iterator_begin(BLI_Iterator *iter, void *data_in, const int flag)
{
object_bases_iterator_begin(iter, data_in, flag);
@@ -1151,6 +1192,11 @@ static void objects_iterator_next(BLI_Iterator *iter, const int flag)
}
}
+static void objects_iterator_end(BLI_Iterator *iter)
+{
+ object_bases_iterator_end(iter);
+}
+
/* -------------------------------------------------------------------- */
/** \name BKE_view_layer_selected_objects_iterator
* See: #FOREACH_SELECTED_OBJECT_BEGIN
@@ -1166,9 +1212,9 @@ void BKE_view_layer_selected_objects_iterator_next(BLI_Iterator *iter)
objects_iterator_next(iter, BASE_SELECTED);
}
-void BKE_view_layer_selected_objects_iterator_end(BLI_Iterator *UNUSED(iter))
+void BKE_view_layer_selected_objects_iterator_end(BLI_Iterator *iter)
{
- /* do nothing */
+ objects_iterator_end(iter);
}
/** \} */
@@ -1187,9 +1233,9 @@ void BKE_view_layer_visible_objects_iterator_next(BLI_Iterator *iter)
objects_iterator_next(iter, BASE_VISIBLE);
}
-void BKE_view_layer_visible_objects_iterator_end(BLI_Iterator *UNUSED(iter))
+void BKE_view_layer_visible_objects_iterator_end(BLI_Iterator *iter)
{
- /* do nothing */
+ objects_iterator_end(iter);
}
/** \} */
@@ -1221,9 +1267,9 @@ void BKE_view_layer_selected_editable_objects_iterator_next(BLI_Iterator *iter)
} while (iter->valid && BKE_object_is_libdata((Object *)iter->current) != false);
}
-void BKE_view_layer_selected_editable_objects_iterator_end(BLI_Iterator *UNUSED(iter))
+void BKE_view_layer_selected_editable_objects_iterator_end(BLI_Iterator *iter)
{
- /* do nothing */
+ objects_iterator_end(iter);
}
/** \} */
@@ -1234,7 +1280,7 @@ void BKE_view_layer_selected_editable_objects_iterator_end(BLI_Iterator *UNUSED(
void BKE_view_layer_selected_bases_iterator_begin(BLI_Iterator *iter, void *data_in)
{
- object_bases_iterator_begin(iter, data_in, BASE_SELECTED);
+ objects_iterator_begin(iter, data_in, BASE_SELECTED);
}
void BKE_view_layer_selected_bases_iterator_next(BLI_Iterator *iter)
@@ -1242,9 +1288,9 @@ void BKE_view_layer_selected_bases_iterator_next(BLI_Iterator *iter)
object_bases_iterator_next(iter, BASE_SELECTED);
}
-void BKE_view_layer_selected_bases_iterator_end(BLI_Iterator *UNUSED(iter))
+void BKE_view_layer_selected_bases_iterator_end(BLI_Iterator *iter)
{
- /* do nothing */
+ object_bases_iterator_end(iter);
}
/** \} */
@@ -1263,9 +1309,9 @@ void BKE_view_layer_visible_bases_iterator_next(BLI_Iterator *iter)
object_bases_iterator_next(iter, BASE_VISIBLE);
}
-void BKE_view_layer_visible_bases_iterator_end(BLI_Iterator *UNUSED(iter))
+void BKE_view_layer_visible_bases_iterator_end(BLI_Iterator *iter)
{
- /* do nothing */
+ object_bases_iterator_end(iter);
}
/** \} */
@@ -1377,6 +1423,10 @@ void BKE_view_layer_bases_in_mode_iterator_begin(BLI_Iterator *iter, void *data_
}
iter->data = data_in;
iter->current = base;
+
+ if (object_bases_iterator_is_valid(data->v3d, base) == false) {
+ BKE_view_layer_bases_in_mode_iterator_next(iter);
+ }
}
void BKE_view_layer_bases_in_mode_iterator_next(BLI_Iterator *iter)
@@ -1398,7 +1448,8 @@ void BKE_view_layer_bases_in_mode_iterator_next(BLI_Iterator *iter)
while (base) {
if ((base->object->type == data->base_active->object->type) &&
(base != data->base_active) &&
- (base->object->mode & data->object_mode))
+ (base->object->mode & data->object_mode) &&
+ object_bases_iterator_is_valid(data->v3d, base))
{
iter->current = base;
return;
diff --git a/source/blender/blenkernel/intern/layer_utils.c b/source/blender/blenkernel/intern/layer_utils.c
index 94bac8a33d6..556ccdd3f92 100644
--- a/source/blender/blenkernel/intern/layer_utils.c
+++ b/source/blender/blenkernel/intern/layer_utils.c
@@ -40,11 +40,11 @@
#include "MEM_guardedalloc.h"
Base **BKE_view_layer_array_from_bases_in_mode_params(
- ViewLayer *view_layer, uint *r_len,
+ ViewLayer *view_layer, View3D *v3d, uint *r_len,
const struct ObjectsInModeParams *params)
{
if (params->no_dup_data) {
- FOREACH_BASE_IN_MODE_BEGIN(view_layer, params->object_mode, base_iter) {
+ FOREACH_BASE_IN_MODE_BEGIN(view_layer, v3d, params->object_mode, base_iter) {
ID *id = base_iter->object->data;
if (id) {
id->tag |= LIB_TAG_DOIT;
@@ -55,7 +55,7 @@ Base **BKE_view_layer_array_from_bases_in_mode_params(
Base **base_array = NULL;
BLI_array_declare(base_array);
- FOREACH_BASE_IN_MODE_BEGIN(view_layer, params->object_mode, base_iter) {
+ FOREACH_BASE_IN_MODE_BEGIN(view_layer, v3d, params->object_mode, base_iter) {
if (params->filter_fn) {
if (!params->filter_fn(base_iter->object, params->filter_userdata)) {
continue;
@@ -83,11 +83,11 @@ Base **BKE_view_layer_array_from_bases_in_mode_params(
}
Object **BKE_view_layer_array_from_objects_in_mode_params(
- ViewLayer *view_layer, uint *r_len,
+ ViewLayer *view_layer, View3D *v3d, uint *r_len,
const struct ObjectsInModeParams *params)
{
Base **base_array = BKE_view_layer_array_from_bases_in_mode_params(
- view_layer, r_len, params);
+ view_layer, v3d, r_len, params);
if (base_array != NULL) {
for (uint i = 0; i < *r_len; i++) {
((Object **)base_array)[i] = base_array[i]->object;
diff --git a/source/blender/blenkernel/intern/object.c b/source/blender/blenkernel/intern/object.c
index 70a912929e6..87aa99f5d40 100644
--- a/source/blender/blenkernel/intern/object.c
+++ b/source/blender/blenkernel/intern/object.c
@@ -1224,14 +1224,14 @@ Object *BKE_object_pose_armature_get_visible(Object *ob, ViewLayer *view_layer,
/**
* Access pose array with special check to get pose object when in weight paint mode.
*/
-Object **BKE_object_pose_array_get_ex(ViewLayer *view_layer, uint *r_objects_len, bool unique)
+Object **BKE_object_pose_array_get_ex(ViewLayer *view_layer, View3D *v3d, uint *r_objects_len, bool unique)
{
Object *ob_active = OBACT(view_layer);
Object *ob_pose = BKE_object_pose_armature_get(ob_active);
Object **objects = NULL;
if (ob_pose == ob_active) {
objects = BKE_view_layer_array_from_objects_in_mode(
- view_layer, r_objects_len, {
+ view_layer, v3d, r_objects_len, {
.object_mode = OB_MODE_POSE,
.no_dup_data = unique});
}
@@ -1246,16 +1246,16 @@ Object **BKE_object_pose_array_get_ex(ViewLayer *view_layer, uint *r_objects_len
}
return objects;
}
-Object **BKE_object_pose_array_get_unique(ViewLayer *view_layer, uint *r_objects_len)
+Object **BKE_object_pose_array_get_unique(ViewLayer *view_layer, View3D *v3d, uint *r_objects_len)
{
- return BKE_object_pose_array_get_ex(view_layer, r_objects_len, true);
+ return BKE_object_pose_array_get_ex(view_layer, v3d, r_objects_len, true);
}
-Object **BKE_object_pose_array_get(ViewLayer *view_layer, uint *r_objects_len)
+Object **BKE_object_pose_array_get(ViewLayer *view_layer, View3D *v3d, uint *r_objects_len)
{
- return BKE_object_pose_array_get_ex(view_layer, r_objects_len, false);
+ return BKE_object_pose_array_get_ex(view_layer, v3d, r_objects_len, false);
}
-Base **BKE_object_pose_base_array_get_ex(ViewLayer *view_layer, uint *r_bases_len, bool unique)
+Base **BKE_object_pose_base_array_get_ex(ViewLayer *view_layer, View3D *v3d, uint *r_bases_len, bool unique)
{
Base *base_active = BASACT(view_layer);
Object *ob_pose = base_active ? BKE_object_pose_armature_get(base_active->object) : NULL;
@@ -1273,7 +1273,7 @@ Base **BKE_object_pose_base_array_get_ex(ViewLayer *view_layer, uint *r_bases_le
if (base_active && (base_pose == base_active)) {
bases = BKE_view_layer_array_from_bases_in_mode(
- view_layer, r_bases_len, {
+ view_layer, v3d, r_bases_len, {
.object_mode = OB_MODE_POSE,
.no_dup_data = unique});
}
@@ -1288,13 +1288,13 @@ Base **BKE_object_pose_base_array_get_ex(ViewLayer *view_layer, uint *r_bases_le
}
return bases;
}
-Base **BKE_object_pose_base_array_get_unique(ViewLayer *view_layer, uint *r_bases_len)
+Base **BKE_object_pose_base_array_get_unique(ViewLayer *view_layer, View3D *v3d, uint *r_bases_len)
{
- return BKE_object_pose_base_array_get_ex(view_layer, r_bases_len, true);
+ return BKE_object_pose_base_array_get_ex(view_layer, v3d, r_bases_len, true);
}
-Base **BKE_object_pose_base_array_get(ViewLayer *view_layer, uint *r_bases_len)
+Base **BKE_object_pose_base_array_get(ViewLayer *view_layer, View3D *v3d, uint *r_bases_len)
{
- return BKE_object_pose_base_array_get_ex(view_layer, r_bases_len, false);
+ return BKE_object_pose_base_array_get_ex(view_layer, v3d, r_bases_len, false);
}
void BKE_object_transform_copy(Object *ob_tar, const Object *ob_src)
diff --git a/source/blender/blenkernel/intern/object_update.c b/source/blender/blenkernel/intern/object_update.c
index dc144f48b05..f88747908b0 100644
--- a/source/blender/blenkernel/intern/object_update.c
+++ b/source/blender/blenkernel/intern/object_update.c
@@ -428,6 +428,7 @@ void BKE_object_eval_flush_base_flags(Depsgraph *depsgraph,
object->base_flag |= BASE_FROM_SET;
object->base_flag &= ~(BASE_SELECTED | BASE_SELECTABLE);
}
+ object->base_local_view_bits = base->local_view_bits;
/* Copy to original object datablock if needed. */
if (DEG_is_active(depsgraph)) {