Cloth: Bugfix for IRIX compile (hopefully), bugfix for multiple springs (appeared...
authorDaniel Genrich <daniel.genrich@gmx.net>
Sun, 2 Mar 2008 22:01:43 +0000 (22:01 +0000)
committerDaniel Genrich <daniel.genrich@gmx.net>
Sun, 2 Mar 2008 22:01:43 +0000 (22:01 +0000)
source/blender/blenkernel/BKE_cloth.h
source/blender/blenkernel/intern/cloth.c

index f5bd028ba0d23bbd6d047073a05bf5b4a798111b..005057339eba02fb2474adffb3a9ac2c254cfc61 100644 (file)
@@ -58,9 +58,11 @@ struct CollisionTree;
 // this is needed for inlining behaviour
 #ifndef _WIN32
 #define LINUX
+#ifndef __sgi
 #define DO_INLINE inline
+#endif
 #else
-#define DO_INLINE
+#define DO_INLINE __inline
 #endif
 
 #define CLOTH_MAX_THREAD 2
index 63982e4162a7ce0a7c8647de8360e8008977dd58..d933dffad179800831345c19fa59c180856cc80b 100644 (file)
@@ -1330,6 +1330,10 @@ int cloth_build_springs ( ClothModifierData *clmd, DerivedMesh *dm )
        // shear springs
        for ( i = 0; i < numfaces; i++ )
        {
+               // triangle faces already have shear springs due to structural geometry
+               if ( mface[i].v4 )
+                       continue; 
+               
                spring = ( ClothSpring *) MEM_callocN ( sizeof ( ClothSpring ), "cloth spring" );
                
                if(!spring)
@@ -1351,29 +1355,28 @@ int cloth_build_springs ( ClothModifierData *clmd, DerivedMesh *dm )
 
                BLI_linklist_prepend ( &cloth->springs, spring );
 
-               if ( mface[i].v4 )
+               
+               // if ( mface[i].v4 ) --> Quad face
+               spring = ( ClothSpring * ) MEM_callocN ( sizeof ( ClothSpring ), "cloth spring" );
+               
+               if(!spring)
                {
-                       spring = ( ClothSpring * ) MEM_callocN ( sizeof ( ClothSpring ), "cloth spring" );
-                       
-                       if(!spring)
-                       {
-                               cloth_free_errorsprings(cloth, edgehash, edgelist);
-                               return 0;
-                       }
+                       cloth_free_errorsprings(cloth, edgehash, edgelist);
+                       return 0;
+               }
 
-                       spring->ij = MIN2(mface[i].v2, mface[i].v4);
-                       spring->kl = MAX2(mface[i].v4, mface[i].v2);
-                       VECSUB ( temp, cloth->verts[spring->kl].x, cloth->verts[spring->ij].x );
-                       spring->restlen =  sqrt ( INPR ( temp, temp ) );
-                       spring->type = CLOTH_SPRING_TYPE_SHEAR;
-                       spring->stiffness = (cloth->verts[spring->kl].shear_stiff + cloth->verts[spring->ij].shear_stiff) / 2.0;
+               spring->ij = MIN2(mface[i].v2, mface[i].v4);
+               spring->kl = MAX2(mface[i].v4, mface[i].v2);
+               VECSUB ( temp, cloth->verts[spring->kl].x, cloth->verts[spring->ij].x );
+               spring->restlen =  sqrt ( INPR ( temp, temp ) );
+               spring->type = CLOTH_SPRING_TYPE_SHEAR;
+               spring->stiffness = (cloth->verts[spring->kl].shear_stiff + cloth->verts[spring->ij].shear_stiff) / 2.0;
 
-                       BLI_linklist_append ( &edgelist[spring->ij], spring );
-                       BLI_linklist_append ( &edgelist[spring->kl], spring );
-                       shear_springs++;
+               BLI_linklist_append ( &edgelist[spring->ij], spring );
+               BLI_linklist_append ( &edgelist[spring->kl], spring );
+               shear_springs++;
 
-                       BLI_linklist_prepend ( &cloth->springs, spring );
-               }
+               BLI_linklist_prepend ( &cloth->springs, spring );
        }
        
        // bending springs