Revision: 29412
          
http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=29412
Author:   joeedh
Date:     2010-06-11 19:26:53 +0200 (Fri, 11 Jun 2010)

Log Message:
-----------
commit of working copy, so I can compile this on another computer that's fast 
enough for real testing.

Modified Paths:
--------------
    branches/hairsim/release/scripts/ui/properties_physics_common.py
    branches/hairsim/source/blender/blenkernel/intern/cloth.c
    branches/hairsim/source/blender/blenkernel/intern/collision.c
    branches/hairsim/source/blender/blenkernel/intern/derivatives.cpp
    branches/hairsim/source/blender/blenkernel/intern/implicit.c
    branches/hairsim/source/blender/blenkernel/intern/particle.c
    branches/hairsim/source/blender/blenlib/intern/BLI_ghash.c
    branches/hairsim/source/blender/blenlib/intern/math_geom.c
    branches/hairsim/source/blender/blenlib/intern/math_vector_inline.c
    branches/hairsim/source/blender/editors/interface/interface_handlers.c

Modified: branches/hairsim/release/scripts/ui/properties_physics_common.py
===================================================================
--- branches/hairsim/release/scripts/ui/properties_physics_common.py    
2010-06-11 17:17:02 UTC (rev 29411)
+++ branches/hairsim/release/scripts/ui/properties_physics_common.py    
2010-06-11 17:26:53 UTC (rev 29412)
@@ -72,7 +72,7 @@
             sub.prop(cache, "quick_cache")
 
             sub = col.column()
-            sub.enabled = bpy.data.file_is_saved
+            #sub.enabled = bpy.data.file_is_saved
             sub.prop(cache, "disk_cache")
             col.label(text=cache.info)
 

Modified: branches/hairsim/source/blender/blenkernel/intern/cloth.c
===================================================================
--- branches/hairsim/source/blender/blenkernel/intern/cloth.c   2010-06-11 
17:17:02 UTC (rev 29411)
+++ branches/hairsim/source/blender/blenkernel/intern/cloth.c   2010-06-11 
17:26:53 UTC (rev 29412)
@@ -319,9 +319,9 @@
                        ClothVertex *v1 = cloth->verts + spring->ij, *v2 = 
cloth->verts + spring->kl;
                        float co2[4][3];
 
-                       VECCOPY(co2[0], v1->txold);
+                       VECCOPY(co2[0], v1->txold2);
                        VECCOPY(co2[1], v1->tx);
-                       VECCOPY(co2[2], v2->txold);
+                       VECCOPY(co2[2], v2->txold2);
                        VECCOPY(co2[3], v2->tx);
 
                        ret = BLI_bvhtree_update_node(cloth->bvhspringtree, i, 
(float*)co2, NULL, 4);

Modified: branches/hairsim/source/blender/blenkernel/intern/collision.c
===================================================================
--- branches/hairsim/source/blender/blenkernel/intern/collision.c       
2010-06-11 17:17:02 UTC (rev 29411)
+++ branches/hairsim/source/blender/blenkernel/intern/collision.c       
2010-06-11 17:26:53 UTC (rev 29412)
@@ -76,16 +76,16 @@
                g = guesstab[(int)ceil(g2)];\
        } else g = g*0.5;
 
-#define FAST_SQRT(n, g, t)  (t=(n/g + g)*0.5, t=(n/t + t)*0.5, t=(n/t + 
t)*0.5, t=(n/t + t)*0.5, t)
-/*#define normalize_fast_d(v) {\
+/*#define FAST_SQRT(n, g, t)  (t=(n/g + g)*0.5, t=(n/t + t)*0.5, t=(n/t + 
t)*0.5, t=(n/t + t)*0.5, t)
+#define normalize_fast_d(v) {\
 double _d =  v[0]*v[0] + v[1]*v[1] + v[2]*v[2], _g, _t; \
                         GUESS(_d, _g);\
                         _d = FAST_SQRT(_d, _g, _t); \
                                  _d = 1.0/_d; \
                                           v[0]*=_d; v[1]*=_d; v[2]*=_d;\
                                                                                
         }
+*/
 
-#undef normalize_fast_d*/
 #define normalize_fast_d normalize_v3_d
 
 #define GUESSTAB_LEN    8000
@@ -101,6 +101,7 @@
 }
 
 //#define saacos_d acos_fast
+//#define acos acos_fast
 
 static void init_guess_tab(void) {
        int i;
@@ -177,6 +178,8 @@
        cdouble_t vec[3], dis;
 
        VECSUB(vec, v1->tx, v2->tx);
+               
+//     return;
 
        dis = len_v3_d(vec);
 
@@ -234,14 +237,17 @@
        cdouble_t sign, elen1, elen2;
 } EdgeConstraint;
 
+void solve_bending_gradient(double ip1[3], double ip2[3], double ip3[3], 
double grad1[3],
+                                                       double grad2[3], double 
grad3[3], double restangle);
+
 double solve_tetra_gradient(double ip1[3], double ip2[3], double ip3[3], 
double ip4[3],
                             double grad1[3], double grad2[3], double grad3[3], 
-                                                       double grad4[3], double 
elen1, double elen2);
+                                                       double grad4[3], double 
upno[3], double elen1, double elen2);
 
 static void eval_edge_constraint(void *vself) {
        EdgeConstraint *self = vself;
        ClothVertex *v1=self->v1, *v2=self->v2, *v3=self->v3, *v4=self->v4;
-       cdouble_t g1[3], g2[3], g3[3], g4[3], offv1[3], offv2[3], l1[3], l2[3];
+       cdouble_t g1[3], g2[3], g3[3], g4[3], n[3], vec1[3], vec2[3], offv1[3], 
offv2[3], l1[3], l2[3], t[4][3];
        
        copy_v3_v3_d(l1, v1->tx);
        copy_v3_v3_d(l2, v2->tx);
@@ -252,16 +258,45 @@
        add_v3_v3v3_d(offv2, v4->tx, self->off);
 
        scale_line_v3_d(offv1, offv2, EDGE_SCALE);
+       
+       sub_v3_v3v3_d(vec1, l1, l2);
+       sub_v3_v3v3_d(vec2, offv1, offv2);
+       cross_v3_v3v3_d(n, vec1, vec2);
+       normalize_v3_d(n);
+       
+       add_v3_v3_d(n, l1);
 
-       self->coll.head.result = solve_tetra_gradient(l1, l2, offv1, offv2, g1, 
g2, g3, g4, self->elen1, self->elen2);
+       sub_v3_v3v3_d(vec1, n, l2);
+       sub_v3_v3v3_d(vec2, offv1, l2);
+       normalize_v3_d(vec1);
+       normalize_v3_d(vec2);
+       
+       self->coll.head.result = solve_tetra_gradient(l1, l2, offv1, offv2, g1, 
g2, g3, g4, self->coll.no, self->elen1, self->elen2);
+       
+       if (self->coll.head.result < -0.2) {
+               self->coll.head.result = 0.0;
+               return;
+       }
 
+       copy_v3_v3_d(t[0], v1->tx);
+       copy_v3_v3_d(t[1], v2->tx);
+       copy_v3_v3_d(t[2], offv1);
+       copy_v3_v3_d(t[3], offv2);
+
        if (isnan(g1[0]) || isnan(g2[0]) || isnan(g3[0]) || isnan(g4[0]))
                self->coll.head.result = 0.0;
-
+       
        copy_v3_v3_d(self->coll.head.grad[0], g1);
        copy_v3_v3_d(self->coll.head.grad[1], g2);
        copy_v3_v3_d(self->coll.head.grad[2], g3);
        copy_v3_v3_d(self->coll.head.grad[3], g4);
+
+#if 0
+       mul_v3_d(self->coll.head.grad[0], 0.1);
+       mul_v3_d(self->coll.head.grad[1], 0.1);
+       mul_v3_d(self->coll.head.grad[2], 0.1);
+       mul_v3_d(self->coll.head.grad[3], 0.1);
+#endif
 }
 
 static EdgeConstraint *make_edge_constraint(ClothVertex *v1, ClothVertex *v2, 
ClothVertex *v3,
@@ -281,7 +316,7 @@
        con->elen1 = len_v3v3_d(v1->tx, v2->tx);
        con->elen2 = len_v3v3_d(v3->tx, v4->tx);
 
-       mindis *= 1.01;
+       //mindis *= 1.00001;
 
        copy_v3_v3_d(con->off, no);
        copy_v3_v3_d(con->coll.no, no);
@@ -302,9 +337,6 @@
        return con;
 }
 
-
-void solve_bending_gradient(double ip1[3], double ip2[3], double ip3[3], 
double grad1[3],
-                                                       double grad2[3], double 
grad3[3], double restangle);
 void derivatives_set_memarena(MemArena *arena);
 
 static void eval_point_constraint(void *vcon) {
@@ -359,7 +391,7 @@
                return;
        //}
 
-       con->coll.head.result = 0.0;
+       //con->coll.head.result = 0.0;
 }
 
 static PointConstraint *make_point_constraint(ClothVertex *point, ClothTri 
*colltri,
@@ -379,24 +411,24 @@
        con->v3 = colltri->verts[2];
        con->colltri = colltri;
 
-       VECCOPY(ov1, v1->txold);
-       VECCOPY(ov2, v2->txold);
-       VECCOPY(ov3, v3->txold);
+       VECCOPY(ov1, v1->txold2);
+       VECCOPY(ov2, v2->txold2);
+       VECCOPY(ov3, v3->txold2);
 
        normal_tri_v3_d(con->coll.no, ov1, ov2, ov3);
        VECCOPY(no, con->coll.no);
 
        con->coll.head.type = CON_POINT;
        con->coll.head.k = 1.0;
-       con->coll.mindis = mindis+0.002;
+       con->coll.mindis = mindis*1.001;
        con->coll.friction = friction;
 
        con->coll.head.eval = eval_point_constraint;
 
        VECCOPY(co, point->tx);
-       VECCOPY(oco, point->txold);
+       VECCOPY(oco, point->txold2);
 
-       VECSUB(off, oco, v1->txold);
+       VECSUB(off, oco, v1->txold2);
        normalize_fast_d(off);
        if (dot_v3v3_d(off, no) < -DBL_EPSILON) {
                //con->flip = 1;
@@ -508,7 +540,7 @@
        mul_v3_d(g1, -1.0);
        copy_v3_v3_d(self->head.grad[0], g1);
 
-       self->head.result = -saacos(dot); //dot < 0.0 ? -saacos_d(dot) : 
saacos_d(dot);
+       self->head.result = -saacos_d(dot); //dot < 0.0 ? -saacos_d(dot) : 
saacos_d(dot);
 
        return;
 }
@@ -577,10 +609,6 @@
                return;
        }
 
-       //mul_v3_d(g1, 1.0/3.0);
-       //mul_v3_d(g2, 1.0/3.0);
-       //mul_v3_d(g3, 1.0/3.0);
-
        copy_v3_v3_d(self->head.grad[0], g1);
        copy_v3_v3_d(self->head.grad[1], g2);
        copy_v3_v3_d(self->head.grad[2], g3);
@@ -666,8 +694,8 @@
        add_v3_v3_d(ct->cent, v3->tx);
        mul_v3_d(ct->cent, 1.0/3.0);
 
-       add_v3_v3v3_d(ct->ocent, v1->txold, v2->txold);
-       add_v3_v3_d(ct->ocent, v3->txold);
+       add_v3_v3v3_d(ct->ocent, v1->txold2, v2->txold2);
+       add_v3_v3_d(ct->ocent, v3->txold2);
        mul_v3_d(ct->ocent, 1.0/3.0);
 
        ct->dis = FLT_MAX;
@@ -681,6 +709,9 @@
 static void ensure_tri_edges(Cloth *cloth, ClothTri *tri) {
        ClothEdge *e1;
        ClothVertex *v1 = tri->verts[0], *v2 = tri->verts[1], *v3 = 
tri->verts[2];
+       
+       if (tri->edges[0] && tri->edges[1] && tri->edges[2])
+               return;
 
        e1 = get_cloth_edge(cloth, v1, v2);
        tri->edges[0] = e1;
@@ -740,7 +771,7 @@
                        cv->mass = 1000000.0; /*supposed to represent infinite 
mass*/
 
                        VECADD2(tri->cent, cv->tx);
-                       VECADD2(tri->ocent, cv->txold);
+                       VECADD2(tri->ocent, cv->txold2);
                }
                normal_tri_v3_d(tri->no, tri->verts[0]->tx, tri->verts[1]->tx, 
tri->verts[2]->tx);
 
@@ -757,7 +788,7 @@
 void collision_move_object (CollisionModifierData *collmd, cdouble_t step, 
cdouble_t prevstep, cdouble_t epsilon, cdouble_t dt)
 {
        float tv[3] = {0, 0, 0};
-       unsigned int i = 0;
+       int i = 0;
 
        if (prevstep < 0.0) {
                for ( i = 0; i < collmd->numverts; i++ )
@@ -853,9 +884,9 @@
 
                if (!ret)
                        return;
-
-               BLI_bvhtree_update_tree ( tree );
        }
+       
+       BLI_bvhtree_update_tree ( tree );
 }
 
 /***********************************
@@ -960,22 +991,22 @@
        return 0;
 }
 
-static void check_and_handle_tri_coll(ClothModifierData *clmd, 
CollisionModifierData *collmd,
+static int check_and_handle_tri_coll(ClothModifierData *clmd, 
CollisionModifierData *collmd,
                                                                          int 
v11, int v12, int v13, int v21, int v22, int v23,
                                                                          
cdouble_t mindis, cdouble_t epsilon, int selfcol) {
        Cloth *cloth = clmd->clothObject;
        cdouble_t cv1[3], cv2[3], cv3[3], cent[3], ocent[3];
        cdouble_t tv1[3][3], tv2[3][3], tov1[3][3], tov2[3][3];
        PointConstraint *newp;
-       int i, ret;
+       int i, ret, numcol=0;
 
        VECCOPY(tv1[0], cloth->verts[v11].tx);
        VECCOPY(tv1[1], cloth->verts[v12].tx);
        VECCOPY(tv1[2], cloth->verts[v13].tx);
 
-       VECCOPY(tov1[0], cloth->verts[v11].txold);
-       VECCOPY(tov1[1], cloth->verts[v12].txold);
-       VECCOPY(tov1[2], cloth->verts[v13].txold);
+       VECCOPY(tov1[0], cloth->verts[v11].txold2);
+       VECCOPY(tov1[1], cloth->verts[v12].txold2);
+       VECCOPY(tov1[2], cloth->verts[v13].txold2);
 
        if (collmd) {
                VECCOPY(tv2[0], collmd->current_xnew[v21].co);
@@ -990,9 +1021,9 @@
                VECCOPY(tv2[1], cloth->verts[v22].tx);
                VECCOPY(tv2[2], cloth->verts[v23].tx);
 
-               VECCOPY(tov2[0], cloth->verts[v21].txold);
-               VECCOPY(tov2[1], cloth->verts[v22].txold);
-               VECCOPY(tov2[2], cloth->verts[v23].txold);
+               VECCOPY(tov2[0], cloth->verts[v21].txold2);
+               VECCOPY(tov2[1], cloth->verts[v22].txold2);
+               VECCOPY(tov2[2], cloth->verts[v23].txold2);
        }
 
        VECADD(cent, tv2[0], tv2[1]);
@@ -1045,38 +1076,44 @@
                }
                normalize_fast_d(vec);
 
-               VECCOPY(cv1, colltri->verts[0]->txold);
-               VECCOPY(cv2, colltri->verts[1]->txold);
-               VECCOPY(cv3, colltri->verts[2]->txold);
+               VECCOPY(cv1, colltri->verts[0]->txold2);
+               VECCOPY(cv2, colltri->verts[1]->txold2);
+               VECCOPY(cv3, colltri->verts[2]->txold2);
 
                for (i=0; i<3; i++) {
                        newp = make_point_constraint(tri->verts[i], colltri, 
MAX2(tri->mindis, colltri->mindis), clmd->clothObject->arena, 
clmd->coll_parms->friction*0.01);
                        BLI_addhead(&clmd->clothObject->constraints, newp);
 
                        if (selfcol) newp->coll.head.k = 0.8;
+                       numcol += 1;
                }
        }
+
+       return numcol;
 }
 
 
-void cloth_collision ( ModifierData *md1, ModifierData *md2, BVHTreeOverlap 
*overlap)
+int cloth_collision ( ModifierData *md1, ModifierData *md2, BVHTreeOverlap 
*overlap)
 {

@@ Diff output truncated at 10240 characters. @@

_______________________________________________
Bf-blender-cvs mailing list
Bf-blender-cvs@blender.org
http://lists.blender.org/mailman/listinfo/bf-blender-cvs

Reply via email to