[Bf-blender-cvs] [e6be2af061b] master: Cleanup: remove cddm_from_bmesh

Campbell Barton noreply at git.blender.org
Tue Feb 25 11:32:16 CET 2020


Commit: e6be2af061ba154ec633fcaf3e4caecacec521c6
Author: Campbell Barton
Date:   Tue Feb 25 21:30:23 2020 +1100
Branches: master
https://developer.blender.org/rBe6be2af061ba154ec633fcaf3e4caecacec521c6

Cleanup: remove cddm_from_bmesh

Use BKE_mesh_from_bmesh_for_eval_nomain instead.

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

M	source/blender/blenkernel/BKE_cdderivedmesh.h
M	source/blender/blenkernel/intern/cdderivedmesh.c
M	source/blender/editors/uvedit/uvedit_unwrap_ops.c

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

diff --git a/source/blender/blenkernel/BKE_cdderivedmesh.h b/source/blender/blenkernel/BKE_cdderivedmesh.h
index 50af6c876b4..d39850a162b 100644
--- a/source/blender/blenkernel/BKE_cdderivedmesh.h
+++ b/source/blender/blenkernel/BKE_cdderivedmesh.h
@@ -49,9 +49,6 @@ struct DerivedMesh *CDDM_from_mesh_ex(struct Mesh *mesh,
                                       eCDAllocType alloctype,
                                       const struct CustomData_MeshMasks *mask);
 
-/* creates a CDDerivedMesh from the given BMEditMesh */
-DerivedMesh *CDDM_from_editbmesh(struct BMEditMesh *em, const bool use_mdisps);
-
 /* Copies the given DerivedMesh with verts, faces & edges stored as
  * custom element data.
  */
diff --git a/source/blender/blenkernel/intern/cdderivedmesh.c b/source/blender/blenkernel/intern/cdderivedmesh.c
index a55b5dc7817..5fc4e909fac 100644
--- a/source/blender/blenkernel/intern/cdderivedmesh.c
+++ b/source/blender/blenkernel/intern/cdderivedmesh.c
@@ -370,150 +370,6 @@ DerivedMesh *CDDM_from_mesh_ex(Mesh *mesh,
   return dm;
 }
 
-/* TODO(campbell): remove, use BKE_mesh_from_bmesh_for_eval_nomain instead. */
-
-/* used for both editbmesh and bmesh */
-static DerivedMesh *cddm_from_bmesh_ex(struct BMesh *bm, const bool use_mdisps)
-{
-  DerivedMesh *dm = CDDM_new(bm->totvert, bm->totedge, 0, bm->totloop, bm->totface);
-
-  CDDerivedMesh *cddm = (CDDerivedMesh *)dm;
-  BMIter iter;
-  BMVert *eve;
-  BMEdge *eed;
-  BMFace *efa;
-  MVert *mvert = cddm->mvert;
-  MEdge *medge = cddm->medge;
-  MLoop *mloop = cddm->mloop;
-  MPoly *mpoly = cddm->mpoly;
-  int *index, add_orig;
-  CustomData_MeshMasks mask = {0};
-  unsigned int i, j;
-
-  const int cd_vert_bweight_offset = CustomData_get_offset(&bm->vdata, CD_BWEIGHT);
-  const int cd_edge_bweight_offset = CustomData_get_offset(&bm->edata, CD_BWEIGHT);
-  const int cd_edge_crease_offset = CustomData_get_offset(&bm->edata, CD_CREASE);
-
-  dm->deformedOnly = 1;
-
-  /* don't add origindex layer if one already exists */
-  add_orig = !CustomData_has_layer(&bm->pdata, CD_ORIGINDEX);
-
-  mask = CD_MASK_DERIVEDMESH;
-  if (use_mdisps) {
-    mask.lmask |= CD_MASK_MDISPS;
-  }
-
-  /* don't process shapekeys, we only feed them through the modifier stack as needed,
-   * e.g. for applying modifiers or the like*/
-  mask.vmask &= ~CD_MASK_SHAPEKEY;
-  CustomData_merge(&bm->vdata, &dm->vertData, mask.vmask, CD_CALLOC, dm->numVertData);
-  CustomData_merge(&bm->edata, &dm->edgeData, mask.emask, CD_CALLOC, dm->numEdgeData);
-  CustomData_merge(&bm->ldata, &dm->loopData, mask.lmask, CD_CALLOC, dm->numLoopData);
-  CustomData_merge(&bm->pdata, &dm->polyData, mask.pmask, CD_CALLOC, dm->numPolyData);
-
-  index = dm->getVertDataArray(dm, CD_ORIGINDEX);
-
-  BM_ITER_MESH_INDEX (eve, &iter, bm, BM_VERTS_OF_MESH, i) {
-    MVert *mv = &mvert[i];
-
-    copy_v3_v3(mv->co, eve->co);
-
-    BM_elem_index_set(eve, i); /* set_inline */
-
-    normal_float_to_short_v3(mv->no, eve->no);
-
-    mv->flag = BM_vert_flag_to_mflag(eve);
-
-    if (cd_vert_bweight_offset != -1) {
-      mv->bweight = BM_ELEM_CD_GET_FLOAT_AS_UCHAR(eve, cd_vert_bweight_offset);
-    }
-
-    if (add_orig) {
-      *index++ = i;
-    }
-
-    CustomData_from_bmesh_block(&bm->vdata, &dm->vertData, eve->head.data, i);
-  }
-  bm->elem_index_dirty &= ~BM_VERT;
-
-  index = dm->getEdgeDataArray(dm, CD_ORIGINDEX);
-  BM_ITER_MESH_INDEX (eed, &iter, bm, BM_EDGES_OF_MESH, i) {
-    MEdge *med = &medge[i];
-
-    BM_elem_index_set(eed, i); /* set_inline */
-
-    med->v1 = BM_elem_index_get(eed->v1);
-    med->v2 = BM_elem_index_get(eed->v2);
-
-    med->flag = BM_edge_flag_to_mflag(eed);
-
-    /* handle this differently to editmode switching,
-     * only enable draw for single user edges rather then calculating angle */
-    if ((med->flag & ME_EDGEDRAW) == 0) {
-      if (eed->l && eed->l == eed->l->radial_next) {
-        med->flag |= ME_EDGEDRAW;
-      }
-    }
-
-    if (cd_edge_crease_offset != -1) {
-      med->crease = BM_ELEM_CD_GET_FLOAT_AS_UCHAR(eed, cd_edge_crease_offset);
-    }
-    if (cd_edge_bweight_offset != -1) {
-      med->bweight = BM_ELEM_CD_GET_FLOAT_AS_UCHAR(eed, cd_edge_bweight_offset);
-    }
-
-    CustomData_from_bmesh_block(&bm->edata, &dm->edgeData, eed->head.data, i);
-    if (add_orig) {
-      *index++ = i;
-    }
-  }
-  bm->elem_index_dirty &= ~BM_EDGE;
-
-  index = CustomData_get_layer(&dm->polyData, CD_ORIGINDEX);
-  j = 0;
-  BM_ITER_MESH_INDEX (efa, &iter, bm, BM_FACES_OF_MESH, i) {
-    BMLoop *l_iter;
-    BMLoop *l_first;
-    MPoly *mp = &mpoly[i];
-
-    BM_elem_index_set(efa, i); /* set_inline */
-
-    mp->totloop = efa->len;
-    mp->flag = BM_face_flag_to_mflag(efa);
-    mp->loopstart = j;
-    mp->mat_nr = efa->mat_nr;
-
-    l_iter = l_first = BM_FACE_FIRST_LOOP(efa);
-    do {
-      mloop->v = BM_elem_index_get(l_iter->v);
-      mloop->e = BM_elem_index_get(l_iter->e);
-      CustomData_from_bmesh_block(&bm->ldata, &dm->loopData, l_iter->head.data, j);
-
-      BM_elem_index_set(l_iter, j); /* set_inline */
-
-      j++;
-      mloop++;
-    } while ((l_iter = l_iter->next) != l_first);
-
-    CustomData_from_bmesh_block(&bm->pdata, &dm->polyData, efa->head.data, i);
-
-    if (add_orig) {
-      *index++ = i;
-    }
-  }
-  bm->elem_index_dirty &= ~(BM_FACE | BM_LOOP);
-
-  dm->cd_flag = BM_mesh_cd_flag_from_bmesh(bm);
-
-  return dm;
-}
-
-DerivedMesh *CDDM_from_editbmesh(BMEditMesh *em, const bool use_mdisps)
-{
-  return cddm_from_bmesh_ex(em->bm, use_mdisps);
-}
-
 DerivedMesh *CDDM_copy(DerivedMesh *source)
 {
   CDDerivedMesh *cddm = cdDM_create("CDDM_copy cddm");
diff --git a/source/blender/editors/uvedit/uvedit_unwrap_ops.c b/source/blender/editors/uvedit/uvedit_unwrap_ops.c
index 1e758771f6a..49acf0ca3a4 100644
--- a/source/blender/editors/uvedit/uvedit_unwrap_ops.c
+++ b/source/blender/editors/uvedit/uvedit_unwrap_ops.c
@@ -53,6 +53,8 @@
 #include "BKE_scene.h"
 #include "BKE_editmesh.h"
 #include "BKE_layer.h"
+#include "BKE_lib_id.h"
+#include "BKE_mesh.h"
 
 #include "DEG_depsgraph.h"
 
@@ -500,11 +502,15 @@ static ParamHandle *construct_param_handle_subsurfed(const Scene *scene,
   smd.levels = smd_real->levels;
   smd.subdivType = smd_real->subdivType;
 
-  initialDerived = CDDM_from_editbmesh(em, false);
-  derivedMesh = subsurf_make_derived_from_derived(
-      initialDerived, &smd, scene, NULL, SUBSURF_IN_EDIT_MODE);
+  {
+    Mesh *me_from_em = BKE_mesh_from_bmesh_for_eval_nomain(em->bm, NULL, ob->data);
+    initialDerived = CDDM_from_mesh_ex(me_from_em, CD_REFERENCE, &CD_MASK_MESH);
+    derivedMesh = subsurf_make_derived_from_derived(
+        initialDerived, &smd, scene, NULL, SUBSURF_IN_EDIT_MODE);
 
-  initialDerived->release(initialDerived);
+    initialDerived->release(initialDerived);
+    BKE_id_free(NULL, me_from_em);
+  }
 
   /* get the derived data */
   subsurfedVerts = derivedMesh->getVertArray(derivedMesh);



More information about the Bf-blender-cvs mailing list