[Bf-blender-cvs] [23f0f6fdf5c] soc-2019-adaptive-cloth: Cloth: don't use current method of adding verts

ishbosamiya noreply at git.blender.org
Thu Jun 20 08:25:14 CEST 2019


Commit: 23f0f6fdf5c350841942e6f4e80aa453dc6cd9da
Author: ishbosamiya
Date:   Mon Jun 17 17:01:20 2019 +0530
Branches: soc-2019-adaptive-cloth
https://developer.blender.org/rB23f0f6fdf5c350841942e6f4e80aa453dc6cd9da

Cloth: don't use current method of adding verts

The current method will not work after collapse edges is implemented, it might cause lose of information thus simulation would not be accurate.
Need to convert ClothVertex to be an array instead, and work from there.

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

M	source/blender/blenkernel/intern/cloth.c

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

diff --git a/source/blender/blenkernel/intern/cloth.c b/source/blender/blenkernel/intern/cloth.c
index d3e9d30590c..f915c914c45 100644
--- a/source/blender/blenkernel/intern/cloth.c
+++ b/source/blender/blenkernel/intern/cloth.c
@@ -611,30 +611,50 @@ static void cloth_remeshing_update_cloth_object_mesh(ClothModifierData *clmd, Me
        * finding the values for that vertex. */
       int prev_count = 0, next_count = 0;
       MVert *prev_mvert, *next_mvert;
-      for (int j = i - 1; j >= 0; j--) {
+      for (int j = mesh->totvert - 1; j >= 0; j--) {
         prev_count++;
-        if (!(mesh->mvert[j].flag & SELECT)) {
-          prev_mvert = &mesh->mvert[j];
+        if (!(mesh->mvert[(i + j) % mesh->totvert].flag & SELECT)) {
+          prev_mvert = &mesh->mvert[(i + j) % mesh->totvert];
           break;
         }
       }
-      for (int j = i; j < mesh->totvert; j++) {
+      for (int j = 0; j < mesh->totvert; j++) {
         next_count++;
-        if (!(mesh->mvert[j].flag & SELECT)) {
-          next_mvert = &mesh->mvert[j];
+        if (!(mesh->mvert[(i + j) % mesh->totvert].flag & SELECT)) {
+          next_mvert = &mesh->mvert[(i + j) % mesh->totvert];
           break;
         }
       }
       int tot_count = prev_count + next_count;
       float factor = (float)prev_count / (float)tot_count;
       /* need to find prev_mvert and next_mvert's corresponding ClothVertex */
+      ClothVertex prev_vert;
+      ClothVertex next_vert;
+      for (int j = i - 1; j >= 0; j--) {
+        /* CHECKHERE(Ish) */
+        if (equals_v3v3(prev_mvert->co, cloth->verts[j].xold)) {
+          /* cloth_copy_cloth_vertex(&prev_vert, &cloth->verts[j]); */
+          prev_vert = cloth->verts[j];
+          break;
+        }
+      }
+      for (int j = i; j < cloth->mvert_num; j++) {
+        /* CHECKHERE(Ish) */
+        if (equals_v3v3(next_mvert->co, cloth->verts[j].xold)) {
+          /* cloth_copy_cloth_vertex(&next_vert, &cloth->verts[j]); */
+          next_vert = cloth->verts[j];
+          break;
+        }
+      }
+      new_cloth->verts[i] = cloth_remeshing_mean_cloth_vert(&prev_vert, &next_vert, factor);
     }
     /* if old vert */
     else {
       for (int j = 0; j < cloth->mvert_num; j++) {
         /* CHECKHERE(Ish) */
         if (equals_v3v3(mvert->co, cloth->verts[j].xold)) {
-          cloth_copy_cloth_vertex(&new_cloth->verts[i], &cloth->verts[j]);
+          /* cloth_copy_cloth_vertex(&new_cloth->verts[i], &cloth->verts[j]); */
+          new_cloth->verts[i] = cloth->verts[j];
           break;
         }
       }
@@ -805,7 +825,6 @@ static BMVert *cloth_remeshing_split_edge_keep_triangles(BMesh *bm,
   /* split the edge */
   BMEdge *new_edge;
   BMVert *new_v = BM_edge_split(bm, e, v, &new_edge, fac);
-  BM_elem_flag_disable(new_edge, BM_ELEM_TAG);
 
   BMVert *vert;
   BMIter viter;



More information about the Bf-blender-cvs mailing list