[Bf-blender-cvs] [d18be66a54f] master: Fix T86871: Mesh.mesh_from_object creates empty mesh from curve

Campbell Barton noreply at git.blender.org
Wed May 5 00:09:17 CEST 2021


Commit: d18be66a54f977426013bcd5c5c541f698c675fe
Author: Campbell Barton
Date:   Wed May 5 08:05:10 2021 +1000
Branches: master
https://developer.blender.org/rBd18be66a54f977426013bcd5c5c541f698c675fe

Fix T86871: Mesh.mesh_from_object creates empty mesh from curve

Regression in 2b723abea02c868d94623f4dd9e9b6775cb3aaab

===================================================================

M	source/blender/blenkernel/intern/mesh_convert.c

===================================================================

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);



More information about the Bf-blender-cvs mailing list