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
diff options
context:
space:
mode:
authorCampbell Barton <ideasman42@gmail.com>2018-06-01 14:48:39 +0300
committerCampbell Barton <ideasman42@gmail.com>2018-06-01 15:01:44 +0300
commitbe8016908db2caa5055351ff6b257fd69c18b5cf (patch)
treefda5c41d566f90d89383818eaac898f278094c8b /source/blender/blenkernel/intern/mesh_convert.c
parent4faf9bfbe9d1502d32a62738ebb488710a43c27a (diff)
Mesh: Replace DM for mesh -> curve conversion
Diffstat (limited to 'source/blender/blenkernel/intern/mesh_convert.c')
-rw-r--r--source/blender/blenkernel/intern/mesh_convert.c33
1 files changed, 21 insertions, 12 deletions
diff --git a/source/blender/blenkernel/intern/mesh_convert.c b/source/blender/blenkernel/intern/mesh_convert.c
index 14f563d6053..4af97048faa 100644
--- a/source/blender/blenkernel/intern/mesh_convert.c
+++ b/source/blender/blenkernel/intern/mesh_convert.c
@@ -669,15 +669,15 @@ static void appendPolyLineVert(ListBase *lb, unsigned int index)
BLI_addtail(lb, vl);
}
-void BKE_mesh_to_curve_nurblist(DerivedMesh *dm, ListBase *nurblist, const int edge_users_test)
+void BKE_mesh_to_curve_nurblist(const Mesh *me, ListBase *nurblist, const int edge_users_test)
{
- MVert *mvert = dm->getVertArray(dm);
- MEdge *med, *medge = dm->getEdgeArray(dm);
- MPoly *mp, *mpoly = dm->getPolyArray(dm);
- MLoop *mloop = dm->getLoopArray(dm);
+ MVert *mvert = me->mvert;
+ MEdge *med, *medge = me->medge;
+ MPoly *mp, *mpoly = me->mpoly;
+ MLoop *mloop = me->mloop;
- int dm_totedge = dm->getNumEdges(dm);
- int dm_totpoly = dm->getNumPolys(dm);
+ int dm_totedge = me->totedge;
+ int dm_totpoly = me->totpoly;
int totedges = 0;
int i;
@@ -805,12 +805,12 @@ void BKE_mesh_to_curve_nurblist(DerivedMesh *dm, ListBase *nurblist, const int e
void BKE_mesh_to_curve(Depsgraph *depsgraph, Scene *scene, Object *ob)
{
/* make new mesh data from the original copy */
- DerivedMesh *dm = mesh_get_derived_final(depsgraph, scene, ob, CD_MASK_MESH);
+ Mesh *me_eval = mesh_get_eval_final(depsgraph, scene, ob, CD_MASK_MESH);
ListBase nurblist = {NULL, NULL};
bool needsFree = false;
- BKE_mesh_to_curve_nurblist(dm, &nurblist, 0);
- BKE_mesh_to_curve_nurblist(dm, &nurblist, 1);
+ BKE_mesh_to_curve_nurblist(me_eval, &nurblist, 0);
+ BKE_mesh_to_curve_nurblist(me_eval, &nurblist, 1);
if (nurblist.first) {
Curve *cu = BKE_curve_add(G.main, ob->id.name + 2, OB_CURVE);
@@ -826,11 +826,20 @@ void BKE_mesh_to_curve(Depsgraph *depsgraph, Scene *scene, Object *ob)
needsFree = true;
}
- dm->needsFree = needsFree;
- dm->release(dm);
+ /* Just to avoid dangling pointer, dm will be removed. */
+ {
+ DerivedMesh *dm = ob->derivedFinal;
+ if (dm != NULL) {
+ dm->needsFree = needsFree;
+ dm->release(dm);
+ }
+ }
if (needsFree) {
+ BKE_mesh_free(me_eval);
+
ob->derivedFinal = NULL;
+ ob->runtime.mesh_eval = NULL;
/* curve object could have got bounding box only in special cases */
if (ob->bb) {