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:
authorHans Goudey <h.goudey@me.com>2021-01-15 17:18:52 +0300
committerHans Goudey <h.goudey@me.com>2021-01-15 17:18:52 +0300
commit6c840a2cb9df7d5784711cce3acd070f007dc3c8 (patch)
tree1b48db5a55001db9bb90a7263ee2bc4229bc331b /source/blender/editors/object
parent30dd31a7b3d85d79398c193ded77449a78568d67 (diff)
Fix "Make Instances Real" to work with nodes modifier instances
This commit changes the check at the beginning of the "Make Instances Real" operator to account for the instances created by nodes modifiers in the modifier stack. Differential Revision: https://developer.blender.org/D10059
Diffstat (limited to 'source/blender/editors/object')
-rw-r--r--source/blender/editors/object/object_add.c18
1 files changed, 16 insertions, 2 deletions
diff --git a/source/blender/editors/object/object_add.c b/source/blender/editors/object/object_add.c
index 90f9b83ba67..24157ad34a1 100644
--- a/source/blender/editors/object/object_add.c
+++ b/source/blender/editors/object/object_add.c
@@ -65,6 +65,7 @@
#include "BKE_duplilist.h"
#include "BKE_effect.h"
#include "BKE_font.h"
+#include "BKE_geometry_set.h"
#include "BKE_gpencil_curve.h"
#include "BKE_gpencil_geom.h"
#include "BKE_hair.h"
@@ -2146,6 +2147,13 @@ static bool dupliobject_instancer_cmp(const void *a_, const void *b_)
return false;
}
+static bool object_has_geometry_set_instances(const Object *object_eval)
+{
+ struct GeometrySet *geometry_set = object_eval->runtime.geometry_set_eval;
+
+ return (geometry_set != NULL) && BKE_geometry_set_has_instances(geometry_set);
+}
+
static void make_object_duplilist_real(bContext *C,
Depsgraph *depsgraph,
Scene *scene,
@@ -2157,13 +2165,19 @@ static void make_object_duplilist_real(bContext *C,
ViewLayer *view_layer = CTX_data_view_layer(C);
GHash *parent_gh = NULL, *instancer_gh = NULL;
- if (!(base->object->transflag & OB_DUPLI)) {
+ Object *object_eval = DEG_get_evaluated_object(depsgraph, base->object);
+
+ if (!(base->object->transflag & OB_DUPLI) && !object_has_geometry_set_instances(object_eval)) {
return;
}
- Object *object_eval = DEG_get_evaluated_object(depsgraph, base->object);
ListBase *lb_duplis = object_duplilist(depsgraph, scene, object_eval);
+ if (BLI_listbase_is_empty(lb_duplis)) {
+ free_object_duplilist(lb_duplis);
+ return;
+ }
+
GHash *dupli_gh = BLI_ghash_ptr_new(__func__);
if (use_hierarchy) {
parent_gh = BLI_ghash_new(dupliobject_hash, dupliobject_cmp, __func__);