[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [30518] branches/hairsim: premerge commit

Joseph Eagar joeedh at gmail.com
Tue Jul 20 01:56:21 CEST 2010


Revision: 30518
          http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=30518
Author:   joeedh
Date:     2010-07-20 01:56:21 +0200 (Tue, 20 Jul 2010)

Log Message:
-----------
premerge commit

Modified Paths:
--------------
    branches/hairsim/extern/cppad/local/reverse.hpp
    branches/hairsim/source/blender/blenkernel/BKE_cloth.h
    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/pdynamics.c
    branches/hairsim/source/blender/blenlib/intern/math_geom.c
    branches/hairsim/source/blender/makesrna/intern/rna_cloth.c

Modified: branches/hairsim/extern/cppad/local/reverse.hpp
===================================================================
--- branches/hairsim/extern/cppad/local/reverse.hpp	2010-07-19 23:53:13 UTC (rev 30517)
+++ branches/hairsim/extern/cppad/local/reverse.hpp	2010-07-19 23:56:21 UTC (rev 30518)
@@ -122,8 +122,8 @@
 	// number of dependent variables
 	size_t m = dep_taddr_.size();
 
-	Base staticpartial[127];
-	Base *Partial = total_num_var_*p > 127 ? new Base(total_num_var_*p) : staticpartial;
+	Base staticpartial[200];
+	Base *Partial = total_num_var_*p > 200 ? new Base(total_num_var_*p+1) : staticpartial;
 
 	// update maximum memory requirement
 	// memoryMax = std::max( memoryMax, 
@@ -201,7 +201,7 @@
 	}
 	
 	if (Partial != staticpartial)
-		delete [] Partial;
+		delete Partial;
 
 	return value;
 }

Modified: branches/hairsim/source/blender/blenkernel/BKE_cloth.h
===================================================================
--- branches/hairsim/source/blender/blenkernel/BKE_cloth.h	2010-07-19 23:53:13 UTC (rev 30517)
+++ branches/hairsim/source/blender/blenkernel/BKE_cloth.h	2010-07-19 23:56:21 UTC (rev 30518)
@@ -169,7 +169,7 @@
 #define VECSUBMUL(v1,v2,aS) 	{*(v1)-= *(v2) * aS; *(v1+1)-= *(v2+1) * aS; *(v1+2)-= *(v2+2) * aS;}
 #define VECSUBS(v1,v2,v3,bS) 	{*(v1)= *(v2) - *(v3)*bS; *(v1+1)= *(v2+1) - *(v3+1)*bS; *(v1+2)= *(v2+2) - *(v3+2)*bS;}
 #define VECSUBSB(v1,v2, v3,bS) 	{*(v1)= (*(v2)- *(v3))*bS; *(v1+1)= (*(v2+1) - *(v3+1))*bS; *(v1+2)= (*(v2+2) - *(v3+2))*bS;}
-#define VECMULS(v1,aS) 	{*(v1)*= aS; *(v1+1)*= aS; *(v1+2)*= *aS;}
+#define VECMULS(v1,aS) 	{*(v1)*= aS; *(v1+1)*= aS; *(v1+2)*= aS;}
 #define VECADDMUL(v1,v2,aS) 	{*(v1)+= *(v2) * aS; *(v1+1)+= *(v2+1) * aS; *(v1+2)+= *(v2+2) * aS;}
 
 /* SIMULATION FLAGS: goal flags,.. */

Modified: branches/hairsim/source/blender/blenkernel/BKE_pdynamics.h
===================================================================
--- branches/hairsim/source/blender/blenkernel/BKE_pdynamics.h	2010-07-19 23:53:13 UTC (rev 30517)
+++ branches/hairsim/source/blender/blenkernel/BKE_pdynamics.h	2010-07-19 23:56:21 UTC (rev 30518)
@@ -26,11 +26,11 @@
 	pdfloat parentfac[2];
 
 	pdfloat tx[3], txstart[3], txold[3], txold2[3], tv[3], tvold[3];
-	pdfloat tanforce[3], springforce[3], goalforce[3];
+	pdfloat cno[3], springforce[3], goalforce[3], norforce[3]; /*cno is collision normal*/
 	pdfloat txconst[3], txconstold[3];
 	pdfloat no[3], mass, goal;
 
-	int pinned;
+        int pinned, totcno;
 	intptr_t hash1, hash2;
 } PDVertex;
 
@@ -202,4 +202,4 @@
 #define mul_v3_sl		mul_v3_fl
 #endif
 
-#endif /*_BKE_PDYNAMICS_H*/
\ No newline at end of file
+#endif /*_BKE_PDYNAMICS_H*/

Modified: branches/hairsim/source/blender/blenkernel/intern/collision.c
===================================================================
--- branches/hairsim/source/blender/blenkernel/intern/collision.c	2010-07-19 23:53:13 UTC (rev 30517)
+++ branches/hairsim/source/blender/blenkernel/intern/collision.c	2010-07-19 23:56:21 UTC (rev 30518)
@@ -61,6 +61,7 @@
 void collision_move_object ( CollisionModifierData *collmd, float step, float prevstep )
 {
 	PDVertex *pv;
+	PDTri *pt;
 	float tv[3] = {0, 0, 0};
 	unsigned int i = 0;
 
@@ -83,6 +84,22 @@
 			VECCOPY(pv->txconst, pv->tx);
 			VECCOPY(pv->txconstold, pv->txold);
 		}
+
+		pt = collmd->pdm->tris;
+		for (i=0; i<collmd->pdm->tottri; i++, pt++) {
+			pdfloat cent[3]={0.0,0.0,0.0}, ocent[3]={0.0,0.0,0.0};
+			int j;
+
+			for (j=0; j<3; j++) {
+				VECADD(cent, cent, pt->verts[j]->tx);
+				VECADD(ocent, ocent, pt->verts[j]->txold);
+			}
+
+			VECMULS(cent, 1.0/3.0);
+			VECMULS(ocent, 1.0/3.0);
+			VECCOPY(pt->cent, cent);
+			VECCOPY(pt->ocent, ocent);
+		}
 	}
 
 	bvhtree_update_from_mvert ( collmd->bvhtree, collmd->mfaces, collmd->numfaces, collmd->current_x, collmd->current_xnew, collmd->numverts, 1 );

Modified: branches/hairsim/source/blender/blenkernel/intern/derivatives.cpp
===================================================================
--- branches/hairsim/source/blender/blenkernel/intern/derivatives.cpp	2010-07-19 23:53:13 UTC (rev 30517)
+++ branches/hairsim/source/blender/blenkernel/intern/derivatives.cpp	2010-07-19 23:56:21 UTC (rev 30518)
@@ -1,15 +1,18 @@
 #include <cstdio>
 #include <cstdlib>
 #include <cstring>
+#include <cfloat>
 #include "BLI_memarena.h"
 #include "BLI_listbase.h"
 
 static MemArena *memarena = NULL;
 
 extern "C" void derivatives_set_memarena(MemArena *arena) {
-	memarena = arena;
+        memarena = arena;
 }
 
+#if 0
+
 /*overload default new operator*/
 void *operator new(size_t size) {
 	if (memarena)
@@ -22,7 +25,7 @@
 	if (!memarena)
 		free(ptr);
 }
-
+#endif
 #define NDEBUG
 #ifdef _OPENMP
 #undef _OPENMP
@@ -93,58 +96,8 @@
 			return y;
 		}
 
-		Type TetraVolumeConstraint0(const Type &vars) {
-			Type a(3), b(3), c(3), ab(3), cb(3), dir1(3), dir2(3), i1(3), i2(3);
-			Type d(1), ret(1), t(3), n(3);
-
-			c[0] = vars[6] - vars[0];
-			c[1] = vars[7] - vars[1];
-			c[2] = vars[8] - vars[2];
-
-			a[0] = vars[3] - vars[0];
-			a[1] = vars[4] - vars[1];
-			a[2] = vars[5] - vars[2];
-
-			b[0] = vars[9] - vars[6];
-			b[1] = vars[10] - vars[7];
-			b[2] = vars[11] - vars[8];
-
-			t[0] = vars[0] - vars[6];
-			t[1] = vars[1] - vars[7];
-			t[2] = vars[2] - vars[8];
-
-			/* offset between both plane where the lines lies */
-			cross(n, a, b);
-			project(t, t, n);
-
-			/* for the first line, offset the second line until it is coplanar */
-			v3t[0] = vars[6] + t[0];
-			v3t[1] = vars[7] + t[1];
-			v3t[2] = vars[8] + t[2];
-
-			v4t[0] = vars[9] + t[0];
-			v4t[1] = vars[10] + t[1];
-			v4t[2] = vars[11] + t[2];
-
-			sub(c, v3t, v1);
-			a[0] = vars[3] - vars[0]; a[1] = vars[4] - vars[1]; a[2] = vars[5] - vars[2];
-			sub(b, v4t, v3t);
-
-			cross(ab, a, b);
-			cross(cb, c, b);
-
-			mul_fl(a, dot(cb, ab) / dot(ab, ab));
-			add(i1, v1, a);
-
-			/* for the second line, just substract the offset from the first intersection point */
-			ret[0] = CppAD::sqrt(dot(t, t));
-
-			return ret;
-		}
-
-		/*should work with edge/edge collisions pairs, I think*/
 		Type TetraVolumeConstraint(const Type &vars) {
-			Type v1(3), v2(3), v3(3), v4(3), up(3), n(3), ret(1), r1(3);
+			Type 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];
@@ -161,6 +114,10 @@
 			
 			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];
 			}
 
 			normalize(v1);
@@ -169,14 +126,27 @@
 			normalize(n);
 
 			normalize(v3);
-			
+			normalize(v4);
+			normalize(v5);
+			normalize(v6);
+
 			r1[0] = 0.0;
 			r1[1] = -1.0;
 			r1[2] = 1.0;
-			mul_fl(n, CppAD::CondExpGt((dot(n, up)), r1[0], r1[1], r1[2]));
-			
+
+			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;
 		}
 	};

Modified: branches/hairsim/source/blender/blenkernel/intern/pdynamics.c
===================================================================
--- branches/hairsim/source/blender/blenkernel/intern/pdynamics.c	2010-07-19 23:53:13 UTC (rev 30517)
+++ branches/hairsim/source/blender/blenkernel/intern/pdynamics.c	2010-07-19 23:56:21 UTC (rev 30518)
@@ -60,7 +60,7 @@
 #include "BLI_ghash.h"
 #include "BLI_mempool.h"
 
-#define EDGE_SCALE	1.01
+#define EDGE_SCALE	1.001
 
 #define SIGN(n) ((n) < 0.0)
 
@@ -139,6 +139,7 @@
 	sub_v3_v3v3(vec, v1->tx, v2->tx);
 		
 	dis = len_v3(vec);
+	return;
 
 	if (fabs(dis-scon->restlen) <= DBL_EPSILON) {
 		scon->head.result = 0.0;
@@ -198,18 +199,21 @@
 	PDVertex *v1=self->v1, *v2=self->v2, *v3=self->v3, *v4=self->v4;
 	pdfloat 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];
 
+	//return;
+
 	copy_v3_v3(l1, v1->tx);
 	copy_v3_v3(l2, v2->tx);
 
-	scale_line_v3(l1, l2, EDGE_SCALE);
+	//scale_line_v3(l1, l2, EDGE_SCALE);
 
 	add_v3_v3v3(offv1, v3->tx, self->off);
 	add_v3_v3v3(offv2, v4->tx, self->off);
 
-	scale_line_v3(offv1, offv2, EDGE_SCALE);
+	//scale_line_v3(offv1, offv2, EDGE_SCALE);
 	
 	sub_v3_v3v3(vec1, l1, l2);
 	sub_v3_v3v3(vec2, offv1, offv2);
+
 	cross_v3_v3v3(n, vec1, vec2);
 	normalize_v3(n);
 	
@@ -222,16 +226,11 @@
 	
 	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;
-	}
+	//if (self->coll.head.result > 0.0) {
+	//	self->coll.head.result = 0.0;
+	//	return;
+	//}
 
-	copy_v3_v3(t[0], v1->tx);
-	copy_v3_v3(t[1], v2->tx);
-	copy_v3_v3(t[2], offv1);
-	copy_v3_v3(t[3], offv2);
-
 	if (isnan(g1[0]) || isnan(g2[0]) || isnan(g3[0]) || isnan(g4[0]))
 		self->coll.head.result = 0.0;
 	
@@ -260,6 +259,7 @@
 	copy_v3_v3(con->off, no);
 	copy_v3_v3(con->coll.no, no);
 	mul_v3_sl(con->off, mindis);
+	mindis *= 1.0001;
 
 	con->coll.head.verts[0] = v1;
 	con->coll.head.verts[1] = v2;
@@ -286,6 +286,8 @@
 	pdfloat g1[3], g2[3], g3[3];
 	int v1i, v2i, v3i;
 
+	return;
+
 	VECCOPY(co2, con->coll.head.verts[0]->tx);
 	if (con->flip) {
 		v1i = 3; v2i = 2; v3i = 1;
@@ -354,7 +356,7 @@
 
 	con->coll.head.type = CON_POINT;
 	con->coll.head.k = 1.0;
-	con->coll.mindis = mindis*1.001;
+	con->coll.mindis = mindis*1.0001;
 	con->coll.friction = friction;
 
 	con->coll.head.eval = eval_point_constraint;
@@ -561,11 +563,6 @@
 	return con;
 }
 
-/***********************************
-Collision modifier code start
-***********************************/
-
-
 static PDEdge *pd_new_edge(PDMesh *pdm, PDVertex *v1, PDVertex *v2)
 {
 	PDEdge *ce = BLI_memarena_alloc(pdm->solver->arena, sizeof(PDEdge));
@@ -711,10 +708,10 @@
 	sub_v3_v3v3(off, cent, ocent);
 	if (off[0] != 0.0 || off[1] != 0.0 || off[2] != 0.0) {
 		normalize_v3(off);
-		mul_v3_sl(off, MAX2(thickness, 0.01));
+		mul_v3_sl(off, MAX2(thickness, 0.001));
 	} else {
 		copy_v3_v3(off, no);
-		mul_v3_sl(off, MAX2(thickness, 0.01));
+		mul_v3_sl(off, MAX2(thickness, 0.001));
 	}
 
 	eps = 1.0001; // + DBL_EPSILON*2;
@@ -928,64 +925,62 @@
 
 static void calc_edge_normal(PDEdge *e, PDEdge *e2, pdfloat no[3])
 {
-	pdfloat vec1[3], vec2[3];
+	pdfloat vec1[3], vec2[3], tno[3] = {0.0, 0.0, 0.0};
 
-	if (!e->t1) {		

@@ Diff output truncated at 10240 characters. @@




More information about the Bf-blender-cvs mailing list