diff options
author | Sybren A. Stüvel <sybren@blender.org> | 2019-07-30 19:38:31 +0300 |
---|---|---|
committer | Sybren A. Stüvel <sybren@blender.org> | 2019-07-31 13:23:56 +0300 |
commit | 6d2f9b1dfa98502e9e9f1a73e3dded2ded1f1ce6 (patch) | |
tree | d973e0855450fd71f968e548e6fe7eac594c7f32 /source/blender/makesrna/intern/rna_mesh_api.c | |
parent | e51067505b63892420e5be09be2f24c6add3b2ba (diff) |
Added BKE_mesh_clear_geometry() function
This function makes it possible to clear/remove/nuke all the geometry in
a mesh, allowing functions like `Mesh.from_python()` to construct a new
mesh in its place. Without this function, code like in T67627 have to
allocate a new Mesh datablock, fill that, and swap out the old Mesh for
the new one. This introduces issues when exporting, as the new mesh
could be seen by an exporter as unrelated to the old one.
Shape keys are not freed by this function. Freeing those would require
tagging the depsgraph for relations update, which is an expensive
operation. They should be removed explicitly if necessary.
Material slots are also not cleared by this function, in the same way
that they are not cleared when manually removing all geometry from a
mesh.
The `BKE_mesh_clear_geometry()` function is available in Python as
`mesh.clear_geometry()`.
Reviewed by: mont29, brecht
Differential Revision: https://developer.blender.org/D5373
Diffstat (limited to 'source/blender/makesrna/intern/rna_mesh_api.c')
-rw-r--r-- | source/blender/makesrna/intern/rna_mesh_api.c | 13 |
1 files changed, 13 insertions, 0 deletions
diff --git a/source/blender/makesrna/intern/rna_mesh_api.c b/source/blender/makesrna/intern/rna_mesh_api.c index d647c647136..283590fc529 100644 --- a/source/blender/makesrna/intern/rna_mesh_api.c +++ b/source/blender/makesrna/intern/rna_mesh_api.c @@ -202,6 +202,14 @@ static void rna_Mesh_count_selected_items(Mesh *mesh, int r_count[3]) BKE_mesh_count_selected_items(mesh, r_count); } +static void rna_Mesh_clear_geometry(Mesh *mesh) +{ + BKE_mesh_clear_geometry(mesh); + + DEG_id_tag_update(&mesh->id, ID_RECALC_GEOMETRY); + WM_main_add_notifier(NC_GEOM | ND_DATA, mesh); +} + #else void RNA_api_mesh(StructRNA *srna) @@ -319,6 +327,11 @@ void RNA_api_mesh(StructRNA *srna) func, "result", "nothing", 64, "Return value", "String description of result of comparison"); RNA_def_function_return(func, parm); + func = RNA_def_function(srna, "clear_geometry", "rna_Mesh_clear_geometry"); + RNA_def_function_ui_description( + func, + "Remove all geometry from the mesh. Note that this does not free shape keys or materials"); + func = RNA_def_function(srna, "validate", "BKE_mesh_validate"); RNA_def_function_ui_description(func, "Validate geometry, return True when the mesh has had " |