[Bf-blender-cvs] [c4a08df49e6] soc-2021-adaptive-cloth: adaptive_cloth: AdaptiveMesh: get_splittable_edge_indices_set()

ishbosamiya noreply at git.blender.org
Mon Jul 26 08:17:40 CEST 2021


Commit: c4a08df49e6d821fcf6580d9826db9f09bb3f24e
Author: ishbosamiya
Date:   Mon Jul 19 22:01:38 2021 +0530
Branches: soc-2021-adaptive-cloth
https://developer.blender.org/rBc4a08df49e6d821fcf6580d9826db9f09bb3f24e

adaptive_cloth: AdaptiveMesh: get_splittable_edge_indices_set()

Gets the maximal independent set of splittable edge indices in the
`AdaptiveMesh`.

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

M	source/blender/blenkernel/intern/cloth_remesh.cc

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

diff --git a/source/blender/blenkernel/intern/cloth_remesh.cc b/source/blender/blenkernel/intern/cloth_remesh.cc
index 9215c2bb910..081ab14fe51 100644
--- a/source/blender/blenkernel/intern/cloth_remesh.cc
+++ b/source/blender/blenkernel/intern/cloth_remesh.cc
@@ -268,6 +268,47 @@ class AdaptiveMesh : public Mesh<NodeData, VertData, EdgeData, internal::EmptyEx
       }
     }
   }
+
+ private:
+  /**
+   * Gets the maximal independent set of splittable edge indices in
+   * the `AdaptiveMesh`.
+   *
+   * Reference [1]
+   */
+  blender::Vector<EdgeIndex> get_splittable_edge_indices_set()
+  {
+    /* Deselect all verts */
+    for (auto &vert : this->get_verts_mut()) {
+      auto &vert_data = vert.get_checked_extra_data_mut();
+      auto &flag = vert_data.get_flag_mut();
+      flag &= ~VERT_SELECTED;
+    }
+
+    blender::Vector<EdgeIndex> splittable_edge_indices;
+    /* It is assumed that the edges sizes have been computed earlier
+     * and stored in the extra data of the edges */
+    for (const auto &edge : this->get_edges()) {
+      auto [v1, v2] = this->get_checked_verts_of_edge(edge, false);
+      if (v1.get_checked_extra_data().get_flag() & VERT_SELECTED ||
+          v2.get_checked_extra_data().get_flag() & VERT_SELECTED) {
+        continue;
+      }
+      const auto &edge_data = edge.get_checked_extra_data();
+      auto edge_size = edge_data.get_size();
+      if (edge_size > 1.0) {
+        splittable_edge_indices.append(edge.get_self_index());
+        auto &v1_data = v1.get_checked_extra_data_mut();
+        auto &v1_flag = v1_data.get_flag_mut();
+        v1_flag |= VERT_SELECTED;
+        auto &v2_data = v2.get_checked_extra_data_mut();
+        auto &v2_flag = v2_data.get_flag_mut();
+        v2_flag |= VERT_SELECTED;
+      }
+    }
+
+    return splittable_edge_indices;
+  }
 };
 
 static void cloth_delete_verts(Cloth &cloth)



More information about the Bf-blender-cvs mailing list