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
path: root/source
diff options
context:
space:
mode:
authorCampbell Barton <ideasman42@gmail.com>2021-05-05 01:05:10 +0300
committerCampbell Barton <ideasman42@gmail.com>2021-05-05 01:08:33 +0300
commitd18be66a54f977426013bcd5c5c541f698c675fe (patch)
tree618dc828d9333766694c2c871f7d603030406349 /source
parent7ab7ae80c5a32be2cf4003f818e09fa3f1759fc4 (diff)
Fix T86871: Mesh.mesh_from_object creates empty mesh from curve
Regression in 2b723abea02c868d94623f4dd9e9b6775cb3aaab
Diffstat (limited to 'source')
-rw-r--r--source/blender/blenkernel/intern/mesh_convert.c13
1 files changed, 11 insertions, 2 deletions
diff --git a/source/blender/blenkernel/intern/mesh_convert.c b/source/blender/blenkernel/intern/mesh_convert.c
index 5892dc49fd6..098d9c420aa 100644
--- a/source/blender/blenkernel/intern/mesh_convert.c
+++ b/source/blender/blenkernel/intern/mesh_convert.c
@@ -1061,6 +1061,9 @@ static Object *object_for_curve_to_mesh_create(Object *object)
return temp_object;
}
+/**
+ * Populate `object->runtime.curve_cache` which is then used to create the mesh.
+ */
static void curve_to_mesh_eval_ensure(Object *object)
{
Curve *curve = (Curve *)object->data;
@@ -1070,10 +1073,13 @@ static void curve_to_mesh_eval_ensure(Object *object)
remapped_object.data = &remapped_curve;
- if (remapped_object.runtime.curve_cache == NULL) {
- remapped_object.runtime.curve_cache = MEM_callocN(sizeof(CurveCache), "CurveCache for Curve");
+ if (object->runtime.curve_cache == NULL) {
+ object->runtime.curve_cache = MEM_callocN(sizeof(CurveCache), "CurveCache for Curve");
}
+ /* Temporarily share the curve-cache with the temporary object, owned by `object`. */
+ remapped_object.runtime.curve_cache = object->runtime.curve_cache;
+
/* Clear all modifiers for the bevel object.
*
* This is because they can not be reliably evaluated for an original object (at least because
@@ -1116,6 +1122,9 @@ static void curve_to_mesh_eval_ensure(Object *object)
BKE_object_eval_assign_data(&remapped_object, &mesh_eval->id, true);
}
+ /* Owned by `object` & needed by the caller to create the mesh. */
+ remapped_object.runtime.curve_cache = NULL;
+
BKE_object_runtime_free_data(&remapped_object);
BKE_object_runtime_free_data(&taper_object);
BKE_object_runtime_free_data(&taper_object);