Fix: Clear mesh runtime cache when adding elements
Currently the RNA functions to add mesh elements like vertices don't clear the runtime cache of things like triangulation, BVH trees, etc. This is important, since they might be accessed with incorrect sizes. This is split from a fix for T95839.
This commit is contained in:
parent
ca991e3012
commit
353fe610ed
Notes:
blender-bot
2024-04-17 14:24:09 +02:00
Referenced by pull request #120737, Fix #120721: Collada: Import with loose edges not immediately show them
Referenced by commit 0bda626ba3
, Fix #120721: Collada: Import with loose edges not immediately show them
|
@ -37,6 +37,7 @@
|
|||
#include "BKE_customdata.h"
|
||||
#include "BKE_editmesh.h"
|
||||
#include "BKE_mesh.h"
|
||||
#include "BKE_mesh_runtime.h"
|
||||
#include "BKE_report.h"
|
||||
|
||||
#include "DEG_depsgraph.h"
|
||||
|
@ -1126,6 +1127,8 @@ static void mesh_add_verts(Mesh *mesh, int len)
|
|||
mesh->vdata = vdata;
|
||||
BKE_mesh_update_customdata_pointers(mesh, false);
|
||||
|
||||
BKE_mesh_runtime_clear_cache(mesh);
|
||||
|
||||
/* scan the input list and insert the new vertices */
|
||||
|
||||
/* set default flags */
|
||||
|
@ -1162,6 +1165,8 @@ static void mesh_add_edges(Mesh *mesh, int len)
|
|||
mesh->edata = edata;
|
||||
BKE_mesh_update_customdata_pointers(mesh, false); /* new edges don't change tessellation */
|
||||
|
||||
BKE_mesh_runtime_clear_cache(mesh);
|
||||
|
||||
/* set default flags */
|
||||
medge = &mesh->medge[mesh->totedge];
|
||||
for (i = 0; i < len; i++, medge++) {
|
||||
|
@ -1190,6 +1195,8 @@ static void mesh_add_loops(Mesh *mesh, int len)
|
|||
CustomData_add_layer(&ldata, CD_MLOOP, CD_CALLOC, NULL, totloop);
|
||||
}
|
||||
|
||||
BKE_mesh_runtime_clear_cache(mesh);
|
||||
|
||||
CustomData_free(&mesh->ldata, mesh->totloop);
|
||||
mesh->ldata = ldata;
|
||||
BKE_mesh_update_customdata_pointers(mesh, true);
|
||||
|
@ -1221,6 +1228,8 @@ static void mesh_add_polys(Mesh *mesh, int len)
|
|||
mesh->pdata = pdata;
|
||||
BKE_mesh_update_customdata_pointers(mesh, true);
|
||||
|
||||
BKE_mesh_runtime_clear_cache(mesh);
|
||||
|
||||
/* set default flags */
|
||||
mpoly = &mesh->mpoly[mesh->totpoly];
|
||||
for (i = 0; i < len; i++, mpoly++) {
|
||||
|
|
Loading…
Reference in New Issue