[Bf-blender-cvs] [dc45061510e] soc-2019-adaptive-cloth: Cloth: initial steps towards creating a mapping between BMVert* and ClothVertex for improving efficiency

ishbosamiya noreply at git.blender.org
Fri Jul 26 20:19:32 CEST 2019


Commit: dc45061510e29e44d889eb3dd20fe8357b3b36cb
Author: ishbosamiya
Date:   Fri Jul 26 00:33:49 2019 +0530
Branches: soc-2019-adaptive-cloth
https://developer.blender.org/rBdc45061510e29e44d889eb3dd20fe8357b3b36cb

Cloth: initial steps towards creating a mapping between BMVert* and ClothVertex for improving efficiency

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

M	source/blender/blenkernel/BKE_cloth.h
M	source/blender/blenkernel/BKE_cloth_remeshing.h
M	source/blender/blenkernel/intern/cloth.c
M	source/blender/blenkernel/intern/cloth_remeshing.cpp

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

diff --git a/source/blender/blenkernel/BKE_cloth.h b/source/blender/blenkernel/BKE_cloth.h
index 8b344414e5c..968e69ffa70 100644
--- a/source/blender/blenkernel/BKE_cloth.h
+++ b/source/blender/blenkernel/BKE_cloth.h
@@ -34,6 +34,7 @@ struct Mesh;
 struct Object;
 struct Scene;
 struct BVHTree;
+struct ClothSizing;
 
 #define DO_INLINE MALWAYS_INLINE
 
@@ -125,8 +126,9 @@ typedef struct ClothVertex {
   float struct_stiff;
   float bend_stiff;
   float shear_stiff;
-  int spring_count;    /* how many springs attached? */
-  float shrink_factor; /* how much to shrink this cloth */
+  int spring_count;           /* how many springs attached? */
+  float shrink_factor;        /* how much to shrink this cloth */
+  struct ClothSizing *sizing; /* Sizing during adaptive remeshing */
 } ClothVertex;
 
 /**
diff --git a/source/blender/blenkernel/BKE_cloth_remeshing.h b/source/blender/blenkernel/BKE_cloth_remeshing.h
index de65a177973..c3b1c5506bb 100644
--- a/source/blender/blenkernel/BKE_cloth_remeshing.h
+++ b/source/blender/blenkernel/BKE_cloth_remeshing.h
@@ -31,6 +31,7 @@
 struct ClothModifierData;
 struct Mesh;
 struct Object;
+struct ClothSizing;
 
 #ifdef __cplusplus
 extern "C" {
@@ -40,6 +41,27 @@ Mesh *cloth_remeshing_step(Depsgraph *depsgraph, Object *ob, ClothModifierData *
 
 #ifdef __cplusplus
 }
-#endif
 
+/**
+ *The definition of sizing used for remeshing
+ */
+
+/* TODO(Ish): figure out how to write a wrapper that can be used in c when ClothSizing is converted
+ * to a class */
+typedef struct ClothSizing {
+  float m[2][2];
+  ClothSizing()
+  {
+    zero_m2(m);
+  }
+  ClothSizing(float a[2][2])
+  {
+    copy_m2_m2(m, a);
+  }
+  ClothSizing &operator+=(const ClothSizing &size);
+  ClothSizing &operator/=(float value);
+  ClothSizing operator*(float value);
+} ClothSizing;
+
+#endif
 #endif
diff --git a/source/blender/blenkernel/intern/cloth.c b/source/blender/blenkernel/intern/cloth.c
index 320857984f3..430887e1c0e 100644
--- a/source/blender/blenkernel/intern/cloth.c
+++ b/source/blender/blenkernel/intern/cloth.c
@@ -570,6 +570,12 @@ void cloth_free_modifier(ClothModifierData *clmd)
 
     // Free the verts.
     if (cloth->verts != NULL) {
+      for (int i = 0; i < cloth->mvert_num; i++) {
+        if (cloth->verts[i].sizing != NULL) {
+          MEM_freeN(cloth->verts[i].sizing);
+          cloth->verts[i].sizing = NULL;
+        }
+      }
       MEM_freeN(cloth->verts);
     }
 
@@ -656,6 +662,12 @@ void cloth_free_modifier_extern(ClothModifierData *clmd)
 
     // Free the verts.
     if (cloth->verts != NULL) {
+      for (int i = 0; i < cloth->mvert_num; i++) {
+        if (cloth->verts[i].sizing != NULL) {
+          MEM_freeN(cloth->verts[i].sizing);
+          cloth->verts[i].sizing = NULL;
+        }
+      }
       MEM_freeN(cloth->verts);
     }
 
@@ -955,6 +967,7 @@ static int cloth_from_object(
 
     verts->impulse_count = 0;
     copy_v3_v3(verts->impulse, tnull);
+    verts->sizing = NULL;
   }
 
   // apply / set vertex groups
diff --git a/source/blender/blenkernel/intern/cloth_remeshing.cpp b/source/blender/blenkernel/intern/cloth_remeshing.cpp
index 4526693a49c..d641fcbeb67 100644
--- a/source/blender/blenkernel/intern/cloth_remeshing.cpp
+++ b/source/blender/blenkernel/intern/cloth_remeshing.cpp
@@ -78,30 +78,12 @@ using namespace std;
  * reference http://graphics.berkeley.edu/papers/Narain-AAR-2012-11/index.html
  ******************************************************************************/
 
+typedef map<BMVert *, ClothVertex> VertMap;
+
 #define COLLAPSE_EDGES_DEBUG 1
 #define NEXT(x) ((x) < 2 ? (x) + 1 : (x)-2)
 #define PREV(x) ((x) > 0 ? (x)-1 : (x) + 2)
 
-/**
- *The definition of sizing used for remeshing
- */
-class ClothSizing {
- public:
-  /* TODO(Ish): Make "m" private */
-  float m[2][2];
-  ClothSizing()
-  {
-    zero_m2(m);
-  }
-  ClothSizing(float a[2][2])
-  {
-    copy_m2_m2(m, a);
-  }
-  ClothSizing &operator+=(const ClothSizing &size);
-  ClothSizing &operator/=(float value);
-  ClothSizing operator*(float value);
-};
-
 ClothSizing &ClothSizing::operator+=(const ClothSizing &size)
 {
   add_m2_m2m2(m, m, size.m);
@@ -716,6 +698,7 @@ static float cloth_remeshing_edge_size(BMesh *bm,
 
   float uv12[2];
   sub_v2_v2v2(uv12, uv1, uv2);
+
   return sqrtf(
       (cloth_remeshing_norm2(uv12, sizing[v1]) + cloth_remeshing_norm2(uv12, sizing[v2])) * 0.5f);
 }



More information about the Bf-blender-cvs mailing list