[Bf-blender-cvs] [5567ceea92c] soc-2021-adaptive-cloth: adaptive_cloth: AdaptiveMesh: set edge size after splitting edge

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


Commit: 5567ceea92c4ab3b52aeafe0adcc6373e52e3108
Author: ishbosamiya
Date:   Wed Jul 21 18:30:21 2021 +0530
Branches: soc-2021-adaptive-cloth
https://developer.blender.org/rB5567ceea92c4ab3b52aeafe0adcc6373e52e3108

adaptive_cloth: AdaptiveMesh: set edge size after splitting edge

Need to set the edge size for all edges effected by the split operation.

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

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 31a0cf9210e..623fcc1f420 100644
--- a/source/blender/blenkernel/intern/cloth_remesh.cc
+++ b/source/blender/blenkernel/intern/cloth_remesh.cc
@@ -226,6 +226,11 @@ class EdgeData {
   }
 };
 
+using AdaptiveNode = Node<NodeData>;
+using AdaptiveVert = Vert<VertData>;
+using AdaptiveEdge = Edge<EdgeData>;
+using AdaptiveFace = Face<internal::EmptyExtraData>;
+
 class AdaptiveMesh : public Mesh<NodeData, VertData, EdgeData, internal::EmptyExtraData> {
  public:
   void set_nodes_extra_data(const Cloth &cloth)
@@ -241,6 +246,25 @@ class AdaptiveMesh : public Mesh<NodeData, VertData, EdgeData, internal::EmptyEx
     }
   }
 
+  void edge_set_size(AdaptiveEdge &edge)
+  {
+    const auto [v1, v2] = this->get_checked_verts_of_edge(edge, false);
+    const auto &v1_uv = v1.get_uv();
+    const auto &v2_uv = v2.get_uv();
+    const auto v1_sizing = v1.get_checked_extra_data().get_sizing();
+    const auto v2_sizing = v2.get_checked_extra_data().get_sizing();
+
+    auto edge_size = v1_sizing.get_edge_size_sq(v2_sizing, v1_uv, v2_uv);
+    auto op_edge_data = edge.get_extra_data_mut();
+    if (op_edge_data) {
+      auto &edge_data = edge.get_checked_extra_data_mut();
+      edge_data.set_sizing(edge_size);
+    }
+    else {
+      edge.set_extra_data(EdgeData(edge_size));
+    }
+  }
+
   /**
    * Sets the "size" of the `Edge`s of the mesh by running
    * `get_edge_size_sq()` on the `Sizing` stored in the `Vert`s of the
@@ -251,21 +275,7 @@ class AdaptiveMesh : public Mesh<NodeData, VertData, EdgeData, internal::EmptyEx
   void set_edge_sizes()
   {
     for (auto &edge : this->get_edges_mut()) {
-      const auto [v1, v2] = this->get_checked_verts_of_edge(edge, false);
-      const auto &v1_uv = v1.get_uv();
-      const auto &v2_uv = v2.get_uv();
-      const auto v1_sizing = v1.get_checked_extra_data().get_sizing();
-      const auto v2_sizing = v2.get_checked_extra_data().get_sizing();
-
-      auto edge_size = v1_sizing.get_edge_size_sq(v2_sizing, v1_uv, v2_uv);
-      auto op_edge_data = edge.get_extra_data_mut();
-      if (op_edge_data) {
-        auto &edge_data = edge.get_checked_extra_data_mut();
-        edge_data.set_sizing(edge_size);
-      }
-      else {
-        edge.set_extra_data(EdgeData(edge_size));
-      }
+      this->edge_set_size(edge);
     }
   }
 
@@ -283,14 +293,21 @@ class AdaptiveMesh : public Mesh<NodeData, VertData, EdgeData, internal::EmptyEx
     do {
       for (const auto &edge_index : splittable_edges_set) {
         auto &edge = this->get_checked_edge(edge_index);
-        this->split_edge_triangulate(edge.get_self_index(), true);
+        auto mesh_diff = this->split_edge_triangulate(edge.get_self_index(), true);
+
+
+        /* For each new edge added, set it's sizing */
+        for (const auto &edge_index : mesh_diff.get_added_edges()) {
+          auto &edge = this->get_checked_edge(edge_index);
+          this->edge_set_size(edge);
+        }
 
         /* TODO(ish): Need to flip edges of those faces that have been
          * affected by the split edge operation. */
       }
 
       splittable_edges_set = this->get_splittable_edge_indices_set();
-    } while (splittable_edges_set.size() == 0);
+    } while (splittable_edges_set.size() != 0);
   }
 
  private:



More information about the Bf-blender-cvs mailing list