[Bf-blender-cvs] [26d5fae2841] master: Fix T68135: Do not return NULL/None when converting an object to a mesh.
Bastien Montagne
noreply at git.blender.org
Fri Aug 2 18:25:06 CEST 2019
Commit: 26d5fae2841d098d0e3be3b02d5d09458512c3a5
Author: Bastien Montagne
Date: Fri Aug 2 17:45:32 2019 +0200
Branches: master
https://developer.blender.org/rB26d5fae2841d098d0e3be3b02d5d09458512c3a5
Fix T68135: Do not return NULL/None when converting an object to a mesh.
Does not make sense in the use-cases of that function, especially since
we don't know whether it is actually due to an error, or some glitch
(like an empty curve).
Think we always want to get a mesh when using either operator
conversion, or the `bpy.data.meshes.new_from_object` function.
Note that an assert was also added to ensure we do try to convert from a
valid 'geometry' object type.
===================================================================
M source/blender/blenkernel/BKE_mesh.h
M source/blender/blenkernel/intern/mesh_convert.c
===================================================================
diff --git a/source/blender/blenkernel/BKE_mesh.h b/source/blender/blenkernel/BKE_mesh.h
index 59812df246f..924cfad37d6 100644
--- a/source/blender/blenkernel/BKE_mesh.h
+++ b/source/blender/blenkernel/BKE_mesh.h
@@ -224,7 +224,9 @@ struct Mesh *BKE_mesh_new_from_object(struct Depsgraph *depsgraph,
struct Object *object,
bool preserve_all_data_layers);
-/* This is a version of BKE_mesh_new_from_object() which stores mesh in the given main database. */
+/* This is a version of BKE_mesh_new_from_object() which stores mesh in the given main database.
+ * However, that function enforces object type to be a geometry one, and ensures a mesh is always
+ * generated, be it empty. */
struct Mesh *BKE_mesh_new_from_object_to_bmain(struct Main *bmain,
struct Depsgraph *depsgraph,
struct Object *object,
diff --git a/source/blender/blenkernel/intern/mesh_convert.c b/source/blender/blenkernel/intern/mesh_convert.c
index ae9cf874676..ee060a117dc 100644
--- a/source/blender/blenkernel/intern/mesh_convert.c
+++ b/source/blender/blenkernel/intern/mesh_convert.c
@@ -1216,10 +1216,14 @@ Mesh *BKE_mesh_new_from_object_to_bmain(Main *bmain,
Object *object,
bool preserve_all_data_layers)
{
+ BLI_assert(ELEM(object->type, OB_FONT, OB_CURVE, OB_SURF, OB_MBALL, OB_MESH));
+
Mesh *mesh = BKE_mesh_new_from_object(depsgraph, object, preserve_all_data_layers);
if (mesh == NULL) {
- /* Unable to convert the object to a mesh. */
- return NULL;
+ /* Unable to convert the object to a mesh, return an empty one. */
+ Mesh *mesh_in_bmain = BKE_mesh_add(bmain, ((ID *)object->data)->name + 2);
+ id_us_min(&mesh_in_bmain->id);
+ return mesh_in_bmain;
}
/* Make sure mesh only points original datablocks, also increase users of materials and other
More information about the Bf-blender-cvs
mailing list