[Bf-blender-cvs] [28732a6ee1d] soc-2021-adaptive-cloth: adaptive_cloth: AdaptiveMesh: setting EdgeData flags after split

ishbosamiya noreply at git.blender.org
Mon Aug 30 09:15:10 CEST 2021


Commit: 28732a6ee1d96bc62518053eea398ea47f625837
Author: ishbosamiya
Date:   Sun Aug 29 20:22:00 2021 +0530
Branches: soc-2021-adaptive-cloth
https://developer.blender.org/rB28732a6ee1d96bc62518053eea398ea47f625837

adaptive_cloth: AdaptiveMesh: setting EdgeData flags after split

Edges that had EDGE_BETWEEN_SEWING_EDGES when split, the new edges
should also be EDGE_BETWEEN_SEWING_EDGES.

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

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 d88ec1076cd..2f041cb3691 100644
--- a/source/blender/blenkernel/intern/cloth_remesh.cc
+++ b/source/blender/blenkernel/intern/cloth_remesh.cc
@@ -754,6 +754,29 @@ class AdaptiveMesh : public Mesh<NodeData<END>, VertData, EdgeData, internal::Em
     const auto added_verts = mesh_diff.get_added_verts();
 
     if (sewing_enabled) {
+      /* Edges that were split and had `EDGE_BETWEEN_SEWING_EDGES`,
+       * the new edges formed from the edge split should also have
+       * `EDGE_BETWEEN_SEWING_EDGES` */
+      {
+        blender::Vector<VertIndex> verts_with_edge_between_sewing_edges;
+        for (const auto &deleted_edge : mesh_diff.get_deleted_edges()) {
+          const auto &edge_verts = deleted_edge.get_checked_verts();
+          verts_with_edge_between_sewing_edges.append_non_duplicates(std::get<0>(edge_verts));
+          verts_with_edge_between_sewing_edges.append_non_duplicates(std::get<1>(edge_verts));
+        }
+
+        for (const auto &added_edge_index : mesh_diff.get_added_edges()) {
+          auto &added_edge = this->get_checked_edge(added_edge_index);
+          for (const auto &vert_with_edge_between_sewing_edges :
+               verts_with_edge_between_sewing_edges) {
+            if (added_edge.has_vert(vert_with_edge_between_sewing_edges)) {
+              auto &added_edge_flags = added_edge.get_checked_extra_data_mut().get_flags_mut();
+              added_edge_flags |= EDGE_BETWEEN_SEWING_EDGES;
+            }
+          }
+        }
+      }
+
       BLI_assert(mesh_diff.get_added_nodes().size() == 1);
       std::cout << "mesh_diff.get_added_verts().size(): " << mesh_diff.get_added_verts().size()
                 << std::endl;



More information about the Bf-blender-cvs mailing list