[Bf-blender-cvs] [3b28d1486ec] soc-2021-adaptive-cloth: adaptive_cloth: mesh: abstract out read over MeshReader and fix compiler errors

ishbosamiya noreply at git.blender.org
Mon Jun 28 08:28:23 CEST 2021


Commit: 3b28d1486ecc7601fe76129dd12ac90c4c9625b3
Author: ishbosamiya
Date:   Wed Jun 23 13:32:41 2021 +0530
Branches: soc-2021-adaptive-cloth
https://developer.blender.org/rB3b28d1486ecc7601fe76129dd12ac90c4c9625b3

adaptive_cloth: mesh: abstract out read over MeshReader and fix compiler errors

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

M	source/blender/blenkernel/BKE_cloth_remesh.hh

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

diff --git a/source/blender/blenkernel/BKE_cloth_remesh.hh b/source/blender/blenkernel/BKE_cloth_remesh.hh
index 8a4d739f465..1d97503a147 100644
--- a/source/blender/blenkernel/BKE_cloth_remesh.hh
+++ b/source/blender/blenkernel/BKE_cloth_remesh.hh
@@ -464,21 +464,45 @@ template<typename END, typename EVD, typename EED, typename EFD> class Mesh {
 
   /* all public static methods */
   /* all public non-static methods */
+  const auto &get_nodes() const
+  {
+    return this->nodes;
+  }
+
+  const auto &get_verts() const
+  {
+    return this->verts;
+  }
+
+  const auto &get_edges() const
+  {
+    return this->edges;
+  }
+
+  const auto &get_faces() const
+  {
+    return this->faces;
+  }
+
   std::optional<EdgeIndex> get_connecting_edge_index(VertIndex vert_1_index,
                                                      VertIndex vert_2_index)
   {
-    auto vert_1 = this->verts.get(vert_1_index);
-    if (vert_1 == std::nullopt) {
+    auto op_vert_1 = this->verts.get(vert_1_index);
+    if (op_vert_1 == std::nullopt) {
       return std::nullopt;
     }
 
+    auto vert_1 = op_vert_1.value().get();
+
     for (const auto &edge_index : vert_1.edges) {
-      auto edge = this->edges.get(edge_index);
+      auto op_edge = this->edges.get(edge_index);
 
-      if (edge == std::nullopt) {
+      if (op_edge == std::nullopt) {
         return std::nullopt;
       }
 
+      auto edge = op_edge.value().get();
+
       if (edge.has_vert(vert_2_index)) {
         return edge_index;
       }
@@ -487,12 +511,8 @@ template<typename END, typename EVD, typename EED, typename EFD> class Mesh {
     return std::nullopt;
   }
 
-  void read_obj(const fs::path &filepath)
+  void read(const MeshReader &reader)
   {
-    MeshReader reader;
-    const auto reader_success = reader.read(filepath, MeshReader::FILETYPE_OBJ);
-    BLI_assert(reader_success); /* must successfully load obj */
-
     const auto positions = reader.get_positions();
     const auto uvs = reader.get_uvs();
     const auto normals = reader.get_normals();
@@ -521,9 +541,12 @@ template<typename END, typename EVD, typename EED, typename EFD> class Mesh {
 
       /* update verts and nodes */
       for (const auto &[pos_index, uv_index, normal_index] : face_index_data) {
-        auto vert = this->verts.get_no_gen(uv_index);
-        auto node = this->node.get_no_gen(pos_index);
-        BLI_assert(vert && node);
+        auto op_vert = this->verts.get_no_gen(uv_index);
+        auto op_node = this->nodes.get_no_gen(pos_index);
+        BLI_assert(op_vert && op_node);
+
+        auto vert = op_vert.value().get();
+        auto node = op_node.value().get();
 
         vert.node = node.self_index;
         node.verts.append(vert.self_index);
@@ -535,35 +558,38 @@ template<typename END, typename EVD, typename EED, typename EFD> class Mesh {
       }
 
       /* update edges */
-      auto vert_1_i = face_index_data[0];
-      auto vert_2_i = face_index_data[0];
+      auto vert_1_i = std::get<1>(face_index_data[0]);
+      auto vert_2_i = std::get<1>(face_index_data[0]);
       blender::Vector<VertIndex> face_verts;
       blender::Vector<EdgeIndex> face_edges;
       for (auto i = 1; i <= face_index_data.size(); i++) {
         vert_1_i = vert_2_i;
         if (i == face_index_data.size()) {
-          vert_2_i = face_index_data[0];
+          vert_2_i = std::get<1>(face_index_data[0]);
         }
         else {
-          vert_2_i = face_index_data[i];
+          vert_2_i = std::get<1>(face_index_data[i]);
         }
 
-        auto vert_1_index = this->verts.get_no_gen_index(vert_1_i);
-        auto vert_2_index = this->verts.get_no_gen_index(vert_2_i);
-        BLI_assert(vert_1_index && vert_2_index);
+        auto op_vert_1_index = this->verts.get_no_gen_index(vert_1_i);
+        auto op_vert_2_index = this->verts.get_no_gen_index(vert_2_i);
+        BLI_assert(op_vert_1_index && op_vert_2_index);
+
+        auto vert_1_index = op_vert_1_index.value();
+        auto vert_2_index = op_vert_2_index.value();
 
-        if (auto edge_index = this->get_connecting_edge_index(vert_1_index, vert_2_index)) {
-          face_edges.append(edge_index);
+        if (auto op_edge_index = this->get_connecting_edge_index(vert_1_index, vert_2_index)) {
+          face_edges.append(op_edge_index.value());
         }
         else {
           auto edge = this->add_empty_edge();
 
           edge.verts = std::make_tuple(vert_1_index, vert_2_index);
 
-          auto vert_1 = this->verts.get(vert_1_index);
+          auto vert_1 = this->verts.get(vert_1_index).value().get();
           vert_1.edges.append(edge.self_index);
 
-          auto vert_2 = this->verts.get(vert_2_index);
+          auto vert_2 = this->verts.get(vert_2_index).value().get();
           vert_2.edges.append(edge.self_index);
 
           face_edges.append(edge.self_index);
@@ -577,10 +603,12 @@ template<typename END, typename EVD, typename EED, typename EFD> class Mesh {
         face.verts = face_verts;
 
         for (const auto &edge_index : face_edges) {
-          auto edge = this->edges.get(edge_index);
-          BLI_assert(edge);
+          auto op_edge = this->edges.get(edge_index);
+          BLI_assert(op_edge);
 
-          edge.faces.push(face.self_index);
+          auto edge = op_edge.value().get();
+
+          edge.faces.append(face.self_index);
         }
       }
     }
@@ -588,6 +616,15 @@ template<typename END, typename EVD, typename EED, typename EFD> class Mesh {
     /* TODO(ish): add support for lines */
   }
 
+  void read_obj(const fs::path &filepath)
+  {
+    MeshReader reader;
+    const auto reader_success = reader.read(filepath, MeshReader::FILETYPE_OBJ);
+    BLI_assert(reader_success); /* must successfully load obj */
+
+    this->read(reader);
+  }
+
  protected:
   /* all protected static methods */
   /* all protected non-static methods */
@@ -610,7 +647,7 @@ template<typename END, typename EVD, typename EED, typename EFD> class Mesh {
     auto node_index = this->nodes.insert_with(
         [=](NodeIndex index) { return Node<END>(index, pos, normal); });
 
-    return this->nodes.get(node_index);
+    return this->nodes.get(node_index).value().get();
   }
 
   Vert<EVD> &add_empty_vert(float2 uv)
@@ -618,14 +655,14 @@ template<typename END, typename EVD, typename EED, typename EFD> class Mesh {
     auto vert_index = this->verts.insert_with(
         [=](VertIndex index) { return Vert<EVD>(index, uv); });
 
-    return this->verts.get(vert_index);
+    return this->verts.get(vert_index).value().get();
   }
 
   Edge<EED> &add_empty_edge()
   {
     auto edge_index = this->edges.insert_with([=](EdgeIndex index) { return Edge<EED>(index); });
 
-    return this->edges.get(edge_index);
+    return this->edges.get(edge_index).value().get();
   }
 
   Face<EFD> &add_empty_face(float3 normal)
@@ -633,7 +670,7 @@ template<typename END, typename EVD, typename EED, typename EFD> class Mesh {
     auto face_index = this->faces.insert_with(
         [=](FaceIndex index) { return Face<EFD>(index, normal); });
 
-    return this->faces.get(face_index);
+    return this->faces.get(face_index).value().get();
   }
 };



More information about the Bf-blender-cvs mailing list