[Bf-blender-cvs] [81341d1e94c] bevelv2: Update for new Mesh API for verts, etc.

Howard Trickey noreply at git.blender.org
Thu Sep 8 15:26:02 CEST 2022


Commit: 81341d1e94c0ab320e15536f93e3032ef695bffb
Author: Howard Trickey
Date:   Thu Sep 8 09:16:55 2022 -0400
Branches: bevelv2
https://developer.blender.org/rB81341d1e94c0ab320e15536f93e3032ef695bffb

Update for new Mesh API for verts, etc.

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

M	source/blender/nodes/geometry/nodes/node_geo_bevel_mesh.cc

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

diff --git a/source/blender/nodes/geometry/nodes/node_geo_bevel_mesh.cc b/source/blender/nodes/geometry/nodes/node_geo_bevel_mesh.cc
index 79ff9c168dc..eb5c2584300 100644
--- a/source/blender/nodes/geometry/nodes/node_geo_bevel_mesh.cc
+++ b/source/blender/nodes/geometry/nodes/node_geo_bevel_mesh.cc
@@ -119,17 +119,17 @@ class MeshTopology {
 
   float3 vert_co(int v) const
   {
-    return float3(mesh_.mvert[v].co);
+    return float3(mesh_.verts()[v].co);
   }
 
   int edge_v1(int e) const
   {
-    return mesh_.medge[e].v1;
+    return mesh_.edges()[e].v1;
   }
 
   int edge_v2(int e) const
   {
-    return mesh_.medge[e].v2;
+    return mesh_.edges()[e].v2;
   }
 
   float3 edge_dir_from_vert(int e, int v) const;
@@ -140,14 +140,14 @@ MeshTopology::MeshTopology(const Mesh &mesh) : mesh_(mesh)
 {
   // timeit::ScopedTimer t("MeshTopology construction");
   BKE_mesh_vert_edge_map_create(
-      &vert_edge_map_, &vert_edge_map_mem_, mesh.medge, mesh.totvert, mesh.totedge);
+      &vert_edge_map_, &vert_edge_map_mem_, BKE_mesh_edges(&mesh), mesh.totvert, mesh.totedge);
   BKE_mesh_edge_poly_map_create(&edge_poly_map_,
                                 &edge_poly_map_mem_,
-                                mesh.medge,
+                                BKE_mesh_edges(&mesh),
                                 mesh.totedge,
-                                mesh.mpoly,
+                                BKE_mesh_polys(&mesh),
                                 mesh.totpoly,
-                                mesh.mloop,
+                                BKE_mesh_loops(&mesh),
                                 mesh.totloop);
 }
 
@@ -172,20 +172,21 @@ int MeshTopology::edge_other_manifold_face(int e, int f) const
 
 int MeshTopology::face_other_edge_at_vert(int f, int v, int e) const
 {
-  const MPoly &mpoly = mesh_.mpoly[f];
+  const MPoly &mpoly = mesh_.polys()[f];
+  Span<MLoop> loops = mesh_.loops();
   const int loopstart = mpoly.loopstart;
   const int loopend = mpoly.loopstart + mpoly.totloop - 1;
   for (int l = loopstart; l <= loopend; l++) {
-    const MLoop &mloop = mesh_.mloop[l];
+    const MLoop &mloop = loops[l];
     if (mloop.e == e) {
       if (mloop.v == v) {
         /* The other edge with vertex v is the preceding (incoming) edge. */
-        MLoop &mloop_prev = l == loopstart ? mesh_.mloop[loopend] : mesh_.mloop[l - 1];
+        const MLoop &mloop_prev = l == loopstart ? loops[loopend] : loops[l - 1];
         return mloop_prev.e;
       }
       else {
         /* The other edge with vertex v is the next (outgoing) edge, which should have vertex v. */
-        MLoop &mloop_next = l == loopend ? mesh_.mloop[loopstart] : mesh_.mloop[l + 1];
+        const MLoop &mloop_next = l == loopend ? loops[loopstart] : loops[l + 1];
         BLI_assert(mloop_next.v == v);
         return mloop_next.e;
       }
@@ -198,13 +199,14 @@ int MeshTopology::face_other_edge_at_vert(int f, int v, int e) const
 
 bool MeshTopology::edge_is_successor_in_face(const int e0, const int e1, const int f) const
 {
-  const MPoly &mpoly = mesh_.mpoly[f];
+  const MPoly &mpoly = mesh_.polys()[f];
   const int loopstart = mpoly.loopstart;
   const int loopend = mpoly.loopstart + mpoly.totloop - 1;
+  Span<MLoop> loops = mesh_.loops();
   for (int l = loopstart; l <= loopend; l++) {
-    const MLoop &mloop = mesh_.mloop[l];
+    const MLoop &mloop = loops[l];
     if (mloop.e == e0) {
-      const MLoop &mloop_next = l == loopend ? mesh_.mloop[loopstart] : mesh_.mloop[l + 1];
+      const MLoop &mloop_next = l == loopend ? loops[loopstart] : loops[l + 1];
       return mloop_next.e == e1;
     }
   }
@@ -213,7 +215,7 @@ bool MeshTopology::edge_is_successor_in_face(const int e0, const int e1, const i
 
 float3 MeshTopology::edge_dir_from_vert(int e, int v) const
 {
-  const MEdge &medge = mesh_.medge[e];
+  const MEdge &medge = mesh_.edges()[e];
   if (medge.v1 == v) {
     return vert_co(medge.v2) - vert_co(medge.v1);
   }
@@ -880,7 +882,6 @@ int MeshDelta::new_face(int loopstart, int totloop, int rep)
   MPoly mpoly;
   mpoly.loopstart = loopstart;
   mpoly.totloop = totloop;
-  mpoly.mat_nr = 0;
   mpoly.flag = 0;
   new_polys_.append(mpoly);
   new_poly_rep_.append(rep);
@@ -894,7 +895,7 @@ void MeshDelta::delete_face(int f)
 {
   poly_deletes_.add(f);
   BLI_assert(f >= 0 && f < mesh_.totpoly);
-  const MPoly &mpoly = mesh_.mpoly[f];
+  const MPoly &mpoly = mesh_.polys()[f];
   for (int l = mpoly.loopstart; l < mpoly.loopstart + mpoly.totloop; l++) {
     loop_deletes_.add(l);
   }
@@ -907,18 +908,18 @@ static std::ostream &operator<<(std::ostream &os, const Mesh *mesh)
   os << "Mesh, totvert=" << mesh->totvert << " totedge=" << mesh->totedge
      << " totpoly=" << mesh->totpoly << " totloop=" << mesh->totloop << "\n";
   for (int v : IndexRange(mesh->totvert)) {
-    os << "v" << v << " at (" << mesh->mvert[v].co[0] << "," << mesh->mvert[v].co[1] << ","
-       << mesh->mvert[v].co[2] << ")\n";
+    os << "v" << v << " at (" << mesh->verts()[v].co[0] << "," << mesh->verts()[v].co[1] << ","
+       << mesh->verts()[v].co[2] << ")\n";
   }
   for (int e : IndexRange(mesh->totedge)) {
-    os << "e" << e << " = (v" << mesh->medge[e].v1 << ", v" << mesh->medge[e].v2 << ")\n";
+    os << "e" << e << " = (v" << mesh->edges()[e].v1 << ", v" << mesh->edges()[e].v2 << ")\n";
   }
   for (int p : IndexRange(mesh->totpoly)) {
-    os << "p" << p << " at loopstart l" << mesh->mpoly[p].loopstart << " with "
-       << mesh->mpoly[p].totloop << " loops\n";
+    os << "p" << p << " at loopstart l" << mesh->polys()[p].loopstart << " with "
+       << mesh->polys()[p].totloop << " loops\n";
   }
   for (int l : IndexRange(mesh->totloop)) {
-    os << "l" << l << " = (v" << mesh->mloop[l].v << ", e" << mesh->mloop[l].e << ")\n";
+    os << "l" << l << " = (v" << mesh->loops()[l].v << ", e" << mesh->loops()[l].e << ")\n";
   }
   return os;
 }
@@ -1191,10 +1192,10 @@ Mesh *MeshDelta::apply_delta_to_mesh(GeometrySet &geometry_set, const MeshCompon
   int out_totpoly = keep_polys.size() + new_polys_.size();
   int out_totloop = keep_loops.size() + new_loops_.size();
 
-  Span<MVert> mesh_verts(mesh_.mvert, mesh_.totvert);
-  Span<MEdge> mesh_edges(mesh_.medge, mesh_.totedge);
-  Span<MLoop> mesh_loops(mesh_.mloop, mesh_.totloop);
-  Span<MPoly> mesh_polys(mesh_.mpoly, mesh_.totpoly);
+  Span<MVert> mesh_verts = mesh_.verts();
+  Span<MEdge> mesh_edges = mesh_.edges();
+  Span<MLoop> mesh_loops = mesh_.loops();
+  Span<MPoly> mesh_polys = mesh_.polys();
 
   Mesh *mesh_out = BKE_mesh_new_nomain_from_template(
       &mesh_, out_totvert, out_totedge, 0, out_totloop, out_totpoly);
@@ -1202,10 +1203,10 @@ Mesh *MeshDelta::apply_delta_to_mesh(GeometrySet &geometry_set, const MeshCompon
   MeshComponent out_component;
   out_component.replace(mesh_out, GeometryOwnershipType::Editable);
 
-  MutableSpan<MVert> mesh_out_verts(mesh_out->mvert, out_totvert);
-  MutableSpan<MEdge> mesh_out_edges(mesh_out->medge, out_totedge);
-  MutableSpan<MLoop> mesh_out_loops(mesh_out->mloop, out_totloop);
-  MutableSpan<MPoly> mesh_out_polys(mesh_out->mpoly, out_totpoly);
+  MutableSpan<MVert> mesh_out_verts = mesh_out->verts_for_write();
+  MutableSpan<MEdge> mesh_out_edges = mesh_out->edges_for_write();
+  MutableSpan<MLoop> mesh_out_loops = mesh_out->loops_for_write();
+  MutableSpan<MPoly> mesh_out_polys = mesh_out->polys_for_write();
 
   /* Copy the kept elements to the new mesh, mapping the internal vertex, edge, and loop
    * indices in each of those elements to their new positions.
@@ -1300,7 +1301,7 @@ Mesh *MeshDelta::apply_delta_to_mesh(GeometrySet &geometry_set, const MeshCompon
 
   /* Fix coordinates of new vertices. */
   for (const int v : new_verts_.index_range()) {
-    copy_v3_v3(mesh_out->mvert[v + keep_vertices.size()].co, new_verts_[v].co);
+    copy_v3_v3(mesh_out->verts_for_write()[v + keep_vertices.size()].co, new_verts_[v].co);
   }
 
   BKE_mesh_calc_edges_loose(mesh_out);
@@ -1447,13 +1448,15 @@ static Mesh *finish_vertex_bevel(BevelData &bd,
    * For now, go through all faces to see which ones are affected.
    * TODO: gather affected faces via connections to beveled vertices.
    */
+  Span<MPoly> polys = mesh.polys();
+  Span<MLoop> loops = mesh.loops();
   for (int f : IndexRange(mesh.totpoly)) {
-    const MPoly &mpoly = mesh.mpoly[f];
+    const MPoly &mpoly = polys[f];
 
     /* Are there any beveled vertices in f? */
     int any_affected_vert = false;
     for (int l = mpoly.loopstart; l < mpoly.loopstart + mpoly.totloop; l++) {
-      const int v = mesh.mloop[l].v;
+      const int v = loops[l].v;
       const BevelVertexData *bvd = bd.bevel_vertex_data(v);
       if (bvd != nullptr) {
         any_affected_vert = true;
@@ -1467,9 +1470,9 @@ static Mesh *finish_vertex_bevel(BevelData &bd,
       int lfirst = -1;
       int totloop = 0;
       for (int l = mpoly.loopstart; l < mpoly.loopstart + mpoly.totloop; l++) {
-        const MLoop &mloop = mesh.mloop[l];
+        const MLoop &mloop = loops[l];
         const MLoop &mloop_next =
-            mesh.mloop[l == mpoly.loopstart + mpoly.totloop - 1 ? mpoly.loopstart : l + 1];
+            loops[l == mpoly.loopstart + mpoly.totloop - 1 ? mpoly.loopstart : l + 1];
         int v1 = mloop.v;
         int v2 = mloop_next.v;
         int e = mloop.e;



More information about the Bf-blender-cvs mailing list