Revision: 36203
          
http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=36203
Author:   joeedh
Date:     2011-04-18 00:36:48 +0000 (Mon, 18 Apr 2011)
Log Message:
-----------
committing some stuff I've been sitting on

Modified Paths:
--------------
    branches/hairsim/CMakeLists.txt
    branches/hairsim/extern/CMakeLists.txt
    branches/hairsim/extern/cppad/vector.hpp
    branches/hairsim/release/scripts/ui/properties_particle.py
    branches/hairsim/release/scripts/ui/properties_physics_cloth.py
    branches/hairsim/source/blender/blenkernel/BKE_pdynamics.h
    branches/hairsim/source/blender/blenkernel/intern/collision.c
    branches/hairsim/source/blender/blenkernel/intern/derivatives.cpp
    branches/hairsim/source/blender/blenkernel/intern/particle_system.c
    branches/hairsim/source/blender/blenkernel/intern/pdynamics.c
    branches/hairsim/source/blender/blenkernel/intern/pointcache.c
    branches/hairsim/source/blender/blenlib/BLI_listbase.h
    branches/hairsim/source/blender/blenlib/BLI_math_vector.h
    branches/hairsim/source/blender/blenlib/intern/listbase.c
    branches/hairsim/source/blender/blenlib/intern/math_geom.c
    branches/hairsim/source/blender/blenlib/intern/math_vector.c
    branches/hairsim/source/blender/blenlib/intern/math_vector_inline.c
    branches/hairsim/source/blender/blenloader/intern/readfile.c
    branches/hairsim/source/blender/makesdna/DNA_cloth_types.h
    branches/hairsim/source/blender/makesrna/intern/rna_cloth.c
    branches/hairsim/source/blender/modifiers/intern/MOD_collision.c
    branches/hairsim/source/creator/CMakeLists.txt

Modified: branches/hairsim/CMakeLists.txt
===================================================================
--- branches/hairsim/CMakeLists.txt     2011-04-17 22:47:23 UTC (rev 36202)
+++ branches/hairsim/CMakeLists.txt     2011-04-18 00:36:48 UTC (rev 36203)
@@ -70,6 +70,7 @@
 OPTION(WITH_ELBEEM        "Enable Elbeem (Fluid Simulation)" ON)
 OPTION(WITH_FFTW3         "Enable FFTW3 support (Used for smoke and audio 
effects)" OFF)
 OPTION(WITH_BULLET        "Enable Bullet (Physics Engine)" ON)
+OPTION(WITH_ELTOPO        "Enable Eltopo Collision Engine" ON)
 OPTION(WITH_GAMEENGINE    "Enable Game Engine" ON)
 OPTION(WITH_PLAYER        "Build Player" OFF)
 # (unix defaults to OpenMP On)

Modified: branches/hairsim/extern/CMakeLists.txt
===================================================================
--- branches/hairsim/extern/CMakeLists.txt      2011-04-17 22:47:23 UTC (rev 
36202)
+++ branches/hairsim/extern/CMakeLists.txt      2011-04-18 00:36:48 UTC (rev 
36203)
@@ -28,6 +28,10 @@
        ADD_SUBDIRECTORY(bullet2)
 ENDIF(WITH_BULLET)
 
+IF(WITH_ELTOPO)
+ADD_SUBDIRECTORY(eltopo)
+ENDIF(WITH_ELTOPO)
+
 IF(CMAKE_SYSTEM_NAME MATCHES "Linux")
        ADD_SUBDIRECTORY(binreloc)
 ENDIF(CMAKE_SYSTEM_NAME MATCHES "Linux")

Modified: branches/hairsim/extern/cppad/vector.hpp
===================================================================
--- branches/hairsim/extern/cppad/vector.hpp    2011-04-17 22:47:23 UTC (rev 
36202)
+++ branches/hairsim/extern/cppad/vector.hpp    2011-04-18 00:36:48 UTC (rev 
36203)
@@ -244,7 +244,7 @@
 
 // ------------------ CppAD::vector<Type> ----------------------------------
 
-#define MAX_STATIC     44
+#define MAX_STATIC     128
 #define NEW_VEC(capacity, data)        capacity <= MAX_STATIC ? staticdata : 
CPPAD_TRACK_NEW_VEC(capacity, data)
 
 template <class Type>

Modified: branches/hairsim/release/scripts/ui/properties_particle.py
===================================================================
--- branches/hairsim/release/scripts/ui/properties_particle.py  2011-04-17 
22:47:23 UTC (rev 36202)
+++ branches/hairsim/release/scripts/ui/properties_particle.py  2011-04-18 
00:36:48 UTC (rev 36203)
@@ -269,8 +269,8 @@
         sub = col.column(align=True)
         sub.prop(cloth, "internal_friction", slider=True)
         sub.prop(cloth, "collider_friction", slider=True)
-        sub.prop(cloth, "grid_size", slider=True, text="Grid Size")
-        sub.prop(cloth, "filter_size", slider=True, text="Filter Size")
+        sub.prop(cloth, "gridsize", slider=True, text="Grid Size")
+        sub.prop(cloth, "filtersize", slider=True, text="Filter Size")
 
         col.label(text="Quality:")
         col.prop(cloth, "quality", text="Steps", slider=True)

Modified: branches/hairsim/release/scripts/ui/properties_physics_cloth.py
===================================================================
--- branches/hairsim/release/scripts/ui/properties_physics_cloth.py     
2011-04-17 22:47:23 UTC (rev 36202)
+++ branches/hairsim/release/scripts/ui/properties_physics_cloth.py     
2011-04-18 00:36:48 UTC (rev 36203)
@@ -183,6 +183,7 @@
         col.prop(cloth, "collision_quality", slider=True, text="Quality")
         col.prop(cloth, "min_distance", slider=True, text="Distance")
         col.prop(cloth, "friction")
+        col.prop(cloth, "repulsion")
 
         if wide_ui:
             col = split.column()

Modified: branches/hairsim/source/blender/blenkernel/BKE_pdynamics.h
===================================================================
--- branches/hairsim/source/blender/blenkernel/BKE_pdynamics.h  2011-04-17 
22:47:23 UTC (rev 36202)
+++ branches/hairsim/source/blender/blenkernel/BKE_pdynamics.h  2011-04-18 
00:36:48 UTC (rev 36203)
@@ -27,6 +27,7 @@
 
        pdfloat tx[3], txstart[3], txold[3], txold2[3], tv[3], tvold[3];
        pdfloat cno[3], springforce[3], goalforce[3], norforce[3]; /*cno is 
collision normal*/
+       pdfloat repelforce[3];
        pdfloat txconst[3], txconstold[3];
        pdfloat no[3], mass, goal;
 
@@ -70,7 +71,7 @@
        pdfloat springdamp, goaldamp, rigid_damp;
        pdfloat internel_friction, collision_friction;
        pdfloat airdamp, gravity[3], self_repulsion;
-       pdfloat mindis;
+       pdfloat mindis, collision_repel, collision_repel_fac;
 
        int do_coll; /*flag for if collisions are enabled*/
        int do_goal;
@@ -181,6 +182,8 @@
 #define subfac_v3_v3   subfac_v3_v3_d
 #define addfac_v3_v3v3 addfac_v3_v3v3_d
 #define subfac_v3_v3v3 subfac_v3_v3v3_d
+#define mul_v3_v3              mul_v3_v3_d
+#define mul_v3_v3_sl   mul_v3_v3d
 #define mul_v3_sl              mul_v3_d
 #define len_v3                 len_v3_d
 #define len_v3v3               len_v3v3_d
@@ -189,6 +192,7 @@
 #define normalize_v3   normalize_v3_d
 #define normal_tri_v3  normal_tri_v3_d
 #define normal_quad_v3 normal_quad_v3_d
+#define normal_short_to_float_v3       normal_short_to_float_v3_d
 #define cross_v3_v3v3  cross_v3_v3v3_d
 #define copy_v3_v3             copy_v3_v3_d
 #define tetra_isect            tetra_isect_d
@@ -197,6 +201,9 @@
 #define isect_line_line_v3     isect_line_line_v3_d
 #define negate_v3              negate_v3_d
 #define zero_v3                        zero_v3_d
+#define interp_v3_v3v3 interp_v3_v3v3_d
+#define isect_ray_tri_plane_v3 isect_ray_tri_plane_v3_d
+#define closest_to_line_v3             closest_to_line_v3_d
 #endif
 #else
 #define mul_v3_sl              mul_v3_fl

Modified: branches/hairsim/source/blender/blenkernel/intern/collision.c
===================================================================
--- branches/hairsim/source/blender/blenkernel/intern/collision.c       
2011-04-17 22:47:23 UTC (rev 36202)
+++ branches/hairsim/source/blender/blenkernel/intern/collision.c       
2011-04-18 00:36:48 UTC (rev 36203)
@@ -83,6 +83,7 @@
                        VECCOPY(pv->tv, collmd->current_v[i].co);
                        VECCOPY(pv->txconst, pv->tx);
                        VECCOPY(pv->txconstold, pv->txold);
+                       normal_short_to_float_v3_d(pv->no, 
collmd->current_xnew[i].no);
                }
 
                pt = collmd->pdm->tris;

Modified: branches/hairsim/source/blender/blenkernel/intern/derivatives.cpp
===================================================================
--- branches/hairsim/source/blender/blenkernel/intern/derivatives.cpp   
2011-04-17 22:47:23 UTC (rev 36202)
+++ branches/hairsim/source/blender/blenkernel/intern/derivatives.cpp   
2011-04-18 00:36:48 UTC (rev 36203)
@@ -71,6 +71,35 @@
 namespace {
        template <class Type> class ConTemplate {
        public:
+               Type TriCollision(const Type &vars)
+               {
+                       Type v1(3), v2(3), v3(3), n(3), y(1), dotf(3), c(1);
+                       
+                       c[0] = M_PI*0.5;
+                       
+                       /*coordinates are ordered: point, tri [v1, v2, v3]*/
+                       v1[0] = vars[0] - vars[3];
+                       v1[1] = vars[1] - vars[4];
+                       v1[2] = vars[2] - vars[5];
+
+                       v2[0] = vars[6] - vars[3];
+                       v2[1] = vars[7] - vars[4];
+                       v2[2] = vars[8] - vars[5];
+
+                       v3[0] = vars[9] - vars[3];
+                       v3[1] = vars[10] - vars[4];
+                       v3[2] = vars[11] - vars[5];
+                       
+                       cross(n, v2, v3);
+                       normalize(n);
+                       normalize(v1);
+
+                       dotf[0] = dot(n, v1);
+                       y[0] = c[0] - CppAD::acos(dotf[0]);
+
+                       return y;
+               }
+
                // define y(x) = Poly(a, x) in the empty namespace
                Type AngleConstraint2(const Type &vars)
                {
@@ -96,8 +125,8 @@
                        return y;
                }
 
-               Type TetraVolumeConstraint(const Type &vars) {
-                       Type v1(3), v2(3), v3(3), v4(3), v5(3), v6(3), up(3), 
n(3), ret(1), r1(4);
+               Type EdgeCollisionConstraint(const Type &vars) {
+                       Type origin(3), origin2(3), t1(1), t2(1), v1(3), v2(3), 
v3(3), v4(3), v5(3), v6(3), up(3), n(3), ret(1), r1(4);
                        int i;
 
                        up[0] = vars[14];
@@ -112,41 +141,53 @@
                        v2[1] = vars[7] - vars[10];
                        v2[2] = vars[8] - vars[11];
                        
+                       r1[0] = 1.0;
+                       t1[0] = vars[17];
+                       t2[0] = vars[18];
+                       
                        for (i=0; i<3; i++) {
-                               v3[i] = vars[i+3] - vars[i+6];
-                               v4[i] = vars[i] - vars[i+9];
-
-                               v5[i] = vars[i+3] - vars[i+9];
-                               v6[i] = vars[i] - vars[i+6];
+                               v3[i] = vars[i] + (vars[i+3] - vars[i])*t1[0];
+                               v4[i] = vars[i+6] + (vars[i+9] - 
vars[i+6])*t2[0];
+                               
+                               /*put origin outside of edge, to avoid 
numerical error at vertices*/
+                               origin[i] = v1[i]*2.0 + vars[i+3];
+                               
+                               /*put origin outside of edge, to avoid 
numerical error at vertices*/
+                               origin2[i] = v2[i]*2.0 + vars[i];
                        }
-
+#if 0
                        normalize(v1);
                        normalize(v2);
                        cross(n, v1, v2);
                        normalize(n);
-
-                       normalize(v3);
-                       normalize(v4);
+                       
+                       r1[0] = 0.0;
+                       r1[1] = 1.0;
+                       r1[2] = CppAD::CondExpGt(r1[0], dot(n, up), -r1[1], 
r1[1]);
+                       mul_fl(n, r1[2]);
+                       
+                       sub(v5, origin, v4);
                        normalize(v5);
+                       sub(v6, origin2, v4);
                        normalize(v6);
+                       
+                       r1[0] = M_PI*0.5;
+                       r1[1] = dot(n, v5)*0.5 + dot(n, v6)*0.5;
+                       ret[0] = r1[0] - CppAD::acos(r1[1]);
+#else
+                       sub(n, v3, v4);
+                       r1[0] = -1.0;
+                       ret[0] = CppAD::sqrt(dot(n, n))*r1[0];
+                       
+                       r1[0] = -1.0;
+                       r1[1] = 1.0;
+                       r1[2] = 0.0;
+                       normalize(n);
+                       
+                       ret[0] = ret[0]*CppAD::CondExpGt(r1[2], dot(n, up), 
r1[1], r1[0]);
+                       
+#endif
 
-                       r1[0] = 0.0;
-                       r1[1] = -1.0;
-                       r1[2] = 1.0;
-
-                       mul_fl(n, CppAD::CondExpGt(r1[0], dot(n, up), r1[1], 
r1[2]));
-
-                       r1[0] = dot(n, v4);
-                       r1[1] = dot(n, v5);
-                       r1[2] = dot(n, v6);
-
-                       ret[0] = dot(n, v3);
-
-                       ret[0] = CppAD::CondExpGt(ret[0], r1[0], r1[0], ret[0]);
-                       ret[0] = CppAD::CondExpGt(ret[0], r1[1], r1[1], ret[0]);
-                       ret[0] = CppAD::CondExpGt(ret[0], r1[2], r1[2], ret[0]);
-
-                       //ret[0] = CppAD::CondExpGt(r1[0], dot(n, up), ret[0], 
-ret[0]);
                        return ret;
                }
        };
@@ -168,7 +209,6 @@
                                                                           
double grad2[3], double grad3[3], double restangle)
 {
        using CppAD::AD;
-       double rest=restangle;
        CppAD::vector< AD<double> > *P = 0;
        static CppAD::ADFun<double> *f1;
        static CppAD::vector<double> *d=NULL, *p=NULL;
@@ -237,9 +277,86 @@
                delete P;
 }
 
-extern "C" double solve_tetra_gradient(double ip1[3], double ip2[3], double 
ip3[3], double ip4[3],
+/*ip1 is point, ip2/3/4 is tri*/
+extern "C" double solve_tri_point_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])
+{
+       using CppAD::AD;
+       CppAD::vector< AD<double> > *P = 0;
+       static CppAD::ADFun<double> *f1;
+       static CppAD::vector<double> *d=NULL, *p=NULL;
+       CppAD::ErrorHandler info(myhandler);
+       int i;
+
+       if (!p) {
+               p = new CppAD::vector<double>(12);
+               d = new CppAD::vector<double>(12);
+       }
+
+       //grad1[0] =  grad1[1] = grad1[2] = grad2[0] = grad2[1] = grad2[2] = 
0.0;
+       //return;
+
+       if (!f1)
+               P = new CppAD::vector< AD<double> >(12);
+
+       for (i=0; i<3; i++) {
+               if (!f1) {
+                       (*P)[i] = ip1[i];
+                       (*P)[i+3] = ip2[i];
+                       (*P)[i+6] = ip3[i];
+                       (*P)[i+9] = ip4[i];
+               }
+
+               (*p)[i] = ip1[i];
+               (*p)[i+3] = ip2[i];
+               (*p)[i+6] = ip3[i];
+               (*p)[i+9] = ip4[i];
+       }
+
+       try {
+               if (!f1) {
+                       ConTemplate< CppAD::vector< AD<double> > > tmpl;
+

@@ Diff output truncated at 10240 characters. @@
_______________________________________________
Bf-blender-cvs mailing list
[email protected]
http://lists.blender.org/mailman/listinfo/bf-blender-cvs

Reply via email to