Commit: 4cbb4bc6bef1bb45a3968f28beb007df074966e1
Author: Luca Rood
Date:   Thu Jan 5 00:33:19 2017 -0200
Branches: cloth-improvements
https://developer.blender.org/rB4cbb4bc6bef1bb45a3968f28beb007df074966e1

Fix mistake in angular spring generation

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

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

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

diff --git a/source/blender/blenkernel/intern/cloth.c 
b/source/blender/blenkernel/intern/cloth.c
index 857400c..d25e399 100644
--- a/source/blender/blenkernel/intern/cloth.c
+++ b/source/blender/blenkernel/intern/cloth.c
@@ -1381,7 +1381,8 @@ void cloth_parallel_transport_hair_frame(float mat[3][3], 
const float dir_old[3]
 }
 
 /* add a shear and a bend spring between two verts within a poly */
-BLI_INLINE bool add_shear_bend_spring(ClothModifierData *clmd, LinkNodePair 
*edgelist, const MLoop *mloop, const MPoly *mpoly, int i, int j, int k)
+BLI_INLINE bool add_shear_bend_spring(ClothModifierData *clmd, LinkNodePair 
*edgelist, BendSpringRef *spring_ref,
+                                      const MLoop *mloop, const MPoly *mpoly, 
int i, int j, int k)
 {
        Cloth *cloth = clmd->clothObject;
        ClothSpring *spring;
@@ -1414,6 +1415,12 @@ BLI_INLINE bool add_shear_bend_spring(ClothModifierData 
*clmd, LinkNodePair *edg
 
        BLI_linklist_prepend(&cloth->springs, spring);
 
+       spring = cloth->springs->next->link;
+
+       if (spring->type == CLOTH_SPRING_TYPE_BENDING && spring->mn != -1) {
+               spring_ref[spring->mn].spring = &cloth->springs->next;
+       }
+
        /* bending spring */
 
        spring = MEM_callocN(sizeof(ClothSpring), "cloth spring");
@@ -1561,7 +1568,7 @@ static int cloth_build_springs ( ClothModifierData *clmd, 
DerivedMesh *dm )
                        if (mpoly[i].totloop > 3) {
                                for (j = 1; j < mpoly[i].totloop - 1; j++) {
                                        if (j > 1) {
-                                               if (add_shear_bend_spring(clmd, 
edgelist, mloop, mpoly, i, 0, j)) {
+                                               if (add_shear_bend_spring(clmd, 
edgelist, spring_ref, mloop, mpoly, i, 0, j)) {
                                                        shear_springs++;
                                                        bend_springs++;
                                                }
@@ -1572,7 +1579,7 @@ static int cloth_build_springs ( ClothModifierData *clmd, 
DerivedMesh *dm )
                                        }
 
                                        for (k = j + 2; k < mpoly[i].totloop; 
k++) {
-                                               if (add_shear_bend_spring(clmd, 
edgelist, mloop, mpoly, i, j, k)) {
+                                               if (add_shear_bend_spring(clmd, 
edgelist, spring_ref, mloop, mpoly, i, j, k)) {
                                                        shear_springs++;
                                                        bend_springs++;
                                                }
@@ -1592,6 +1599,11 @@ static int cloth_build_springs ( ClothModifierData 
*clmd, DerivedMesh *dm )
                                if (curr_ref->set == 1) {
                                        /* Remove spring, because this is the 
third poly to use this edge */
                                        if (curr_ref->spring) {
+                                               spring = 
(*curr_ref->spring)->next->link;
+
+                                               if (spring->type == 
CLOTH_SPRING_TYPE_BENDING && spring->mn != -1)
+                                                       
spring_ref[spring->mn].spring = curr_ref->spring;
+
                                                spring = 
BLI_linklist_pop(curr_ref->spring);
                                                curr_ref->spring = NULL;
 
@@ -1652,7 +1664,7 @@ static int cloth_build_springs ( ClothModifierData *clmd, 
DerivedMesh *dm )
 
                                                curr_ref->spring = 
&cloth->springs;
 
-                                               spring = (ClothSpring *) 
cloth->springs->next->link;
+                                               spring = 
cloth->springs->next->link;
 
                                                if (spring->type == 
CLOTH_SPRING_TYPE_BENDING && spring->mn != -1)
                                                        
spring_ref[spring->mn].spring = &cloth->springs->next;

_______________________________________________
Bf-blender-cvs mailing list
[email protected]
https://lists.blender.org/mailman/listinfo/bf-blender-cvs

Reply via email to