[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [14356] trunk/blender/source/blender/ blenkernel/intern: Cloth bugfix: used old dm instead of new created result derivedmesh; Code cleanup + deactivation of unsued selfcollision code in kdop. c + little speedup there
Daniel Genrich
daniel.genrich at gmx.net
Tue Apr 8 14:55:35 CEST 2008
Revision: 14356
http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=14356
Author: genscher
Date: 2008-04-08 14:55:35 +0200 (Tue, 08 Apr 2008)
Log Message:
-----------
Cloth bugfix: used old dm instead of new created result derivedmesh; Code cleanup + deactivation of unsued selfcollision code in kdop.c + little speedup there
Modified Paths:
--------------
trunk/blender/source/blender/blenkernel/intern/cloth.c
trunk/blender/source/blender/blenkernel/intern/collision.c
trunk/blender/source/blender/blenkernel/intern/kdop.c
trunk/blender/source/blender/blenkernel/intern/modifier.c
Modified: trunk/blender/source/blender/blenkernel/intern/cloth.c
===================================================================
--- trunk/blender/source/blender/blenkernel/intern/cloth.c 2008-04-08 11:57:10 UTC (rev 14355)
+++ trunk/blender/source/blender/blenkernel/intern/cloth.c 2008-04-08 12:55:35 UTC (rev 14356)
@@ -423,9 +423,9 @@
numverts = result->getNumVerts(result);
numedges = result->getNumEdges(result);
numfaces = result->getNumFaces(result);
- mvert = dm->getVertArray(result);
- medge = dm->getEdgeArray(result);
- mface = dm->getFaceArray(result);
+ mvert = result->getVertArray(result);
+ medge = result->getEdgeArray(result);
+ mface = result->getFaceArray(result);
/* check if cache is active / if file is already saved */
/*
Modified: trunk/blender/source/blender/blenkernel/intern/collision.c
===================================================================
--- trunk/blender/source/blender/blenkernel/intern/collision.c 2008-04-08 11:57:10 UTC (rev 14355)
+++ trunk/blender/source/blender/blenkernel/intern/collision.c 2008-04-08 12:55:35 UTC (rev 14356)
@@ -1,6 +1,6 @@
-/* collision.c
-*
+/* collision.c
*
+*
* ***** BEGIN GPL/BL DUAL LICENSE BLOCK *****
*
* This program is free software; you can redistribute it and/or
@@ -36,7 +36,7 @@
#include "DNA_group_types.h"
#include "DNA_object_types.h"
-#include "DNA_cloth_types.h"
+#include "DNA_cloth_types.h"
#include "DNA_mesh_types.h"
#include "DNA_scene_types.h"
@@ -57,70 +57,70 @@
***********************************/
/* step is limited from 0 (frame start position) to 1 (frame end position) */
-void collision_move_object(CollisionModifierData *collmd, float step, float prevstep)
+void collision_move_object ( CollisionModifierData *collmd, float step, float prevstep )
{
float tv[3] = {0,0,0};
unsigned int i = 0;
-
+
for ( i = 0; i < collmd->numverts; i++ )
{
- VECSUB(tv, collmd->xnew[i].co, collmd->x[i].co);
- VECADDS(collmd->current_x[i].co, collmd->x[i].co, tv, prevstep);
- VECADDS(collmd->current_xnew[i].co, collmd->x[i].co, tv, step);
- VECSUB(collmd->current_v[i].co, collmd->current_xnew[i].co, collmd->current_x[i].co);
+ VECSUB ( tv, collmd->xnew[i].co, collmd->x[i].co );
+ VECADDS ( collmd->current_x[i].co, collmd->x[i].co, tv, prevstep );
+ VECADDS ( collmd->current_xnew[i].co, collmd->x[i].co, tv, step );
+ VECSUB ( collmd->current_v[i].co, collmd->current_xnew[i].co, collmd->current_x[i].co );
}
- bvh_update_from_mvert(collmd->bvh, collmd->current_x, collmd->numverts, collmd->current_xnew, 1);
+ bvh_update_from_mvert ( collmd->bvh, collmd->current_x, collmd->numverts, collmd->current_xnew, 1 );
}
/* build bounding volume hierarchy from mverts (see kdop.c for whole BVH code) */
-BVH *bvh_build_from_mvert (MFace *mfaces, unsigned int numfaces, MVert *x, unsigned int numverts, float epsilon)
+BVH *bvh_build_from_mvert ( MFace *mfaces, unsigned int numfaces, MVert *x, unsigned int numverts, float epsilon )
{
BVH *bvh=NULL;
-
- bvh = MEM_callocN(sizeof(BVH), "BVH");
- if (bvh == NULL)
+
+ bvh = MEM_callocN ( sizeof ( BVH ), "BVH" );
+ if ( bvh == NULL )
{
- printf("bvh: Out of memory.\n");
+ printf ( "bvh: Out of memory.\n" );
return NULL;
}
-
+
// in the moment, return zero if no faces there
- if(!numfaces)
+ if ( !numfaces )
return NULL;
bvh->epsilon = epsilon;
bvh->numfaces = numfaces;
bvh->mfaces = mfaces;
-
+
// we have no faces, we save seperate points
- if(!mfaces)
+ if ( !mfaces )
{
bvh->numfaces = numverts;
}
bvh->numverts = numverts;
- bvh->current_x = MEM_dupallocN(x);
-
- bvh_build(bvh);
-
+ bvh->current_x = MEM_dupallocN ( x );
+
+ bvh_build ( bvh );
+
return bvh;
}
-void bvh_update_from_mvert(BVH * bvh, MVert *x, unsigned int numverts, MVert *xnew, int moving)
+void bvh_update_from_mvert ( BVH * bvh, MVert *x, unsigned int numverts, MVert *xnew, int moving )
{
- if(!bvh)
+ if ( !bvh )
return;
-
- if(numverts!=bvh->numverts)
+
+ if ( numverts!=bvh->numverts )
return;
-
- if(x)
- memcpy(bvh->current_xold, x, sizeof(MVert) * numverts);
-
- if(xnew)
- memcpy(bvh->current_x, xnew, sizeof(MVert) * numverts);
-
- bvh_update(bvh, moving);
+
+ if ( x )
+ memcpy ( bvh->current_xold, x, sizeof ( MVert ) * numverts );
+
+ if ( xnew )
+ memcpy ( bvh->current_x, xnew, sizeof ( MVert ) * numverts );
+
+ bvh_update ( bvh, moving );
}
/***********************************
@@ -136,10 +136,10 @@
/* DG: debug hint! don't forget that all functions were "fabs", "sinf", etc before */
#define mySWAP(a,b) { float tmp = b ; b = a ; a = tmp ; }
-int gsl_poly_solve_cubic (float a, float b, float c, float *x0, float *x1, float *x2)
+int gsl_poly_solve_cubic ( float a, float b, float c, float *x0, float *x1, float *x2 )
{
- float q = (a * a - 3 * b);
- float r = (2 * a * a * a - 9 * a * b + 27 * c);
+ float q = ( a * a - 3 * b );
+ float r = ( 2 * a * a * a - 9 * a * b + 27 * c );
float Q = q / 9;
float R = r / 54;
@@ -150,25 +150,25 @@
float CR2 = 729 * r * r;
float CQ3 = 2916 * q * q * q;
- if (R == 0 && Q == 0)
+ if ( R == 0 && Q == 0 )
{
*x0 = - a / 3 ;
*x1 = - a / 3 ;
*x2 = - a / 3 ;
return 3 ;
}
- else if (CR2 == CQ3)
+ else if ( CR2 == CQ3 )
{
- /* this test is actually R2 == Q3, written in a form suitable
- for exact computation with integers */
+ /* this test is actually R2 == Q3, written in a form suitable
+ for exact computation with integers */
- /* Due to finite precision some float roots may be missed, and
- considered to be a pair of complex roots z = x +/- epsilon i
- close to the real axis. */
+ /* Due to finite precision some float roots may be missed, and
+ considered to be a pair of complex roots z = x +/- epsilon i
+ close to the real axis. */
- float sqrtQ = sqrt (Q);
+ float sqrtQ = sqrt ( Q );
- if (R > 0)
+ if ( R > 0 )
{
*x0 = -2 * sqrtQ - a / 3;
*x1 = sqrtQ - a / 3;
@@ -182,35 +182,35 @@
}
return 3 ;
}
- else if (CR2 < CQ3) /* equivalent to R2 < Q3 */
+ else if ( CR2 < CQ3 ) /* equivalent to R2 < Q3 */
{
- float sqrtQ = sqrt (Q);
+ float sqrtQ = sqrt ( Q );
float sqrtQ3 = sqrtQ * sqrtQ * sqrtQ;
- float theta = acos (R / sqrtQ3);
+ float theta = acos ( R / sqrtQ3 );
float norm = -2 * sqrtQ;
- *x0 = norm * cos (theta / 3) - a / 3;
- *x1 = norm * cos ((theta + 2.0 * M_PI) / 3) - a / 3;
- *x2 = norm * cos ((theta - 2.0 * M_PI) / 3) - a / 3;
-
+ *x0 = norm * cos ( theta / 3 ) - a / 3;
+ *x1 = norm * cos ( ( theta + 2.0 * M_PI ) / 3 ) - a / 3;
+ *x2 = norm * cos ( ( theta - 2.0 * M_PI ) / 3 ) - a / 3;
+
/* Sort *x0, *x1, *x2 into increasing order */
- if (*x0 > *x1)
- mySWAP(*x0, *x1) ;
-
- if (*x1 > *x2)
+ if ( *x0 > *x1 )
+ mySWAP ( *x0, *x1 ) ;
+
+ if ( *x1 > *x2 )
{
- mySWAP(*x1, *x2) ;
-
- if (*x0 > *x1)
- mySWAP(*x0, *x1) ;
+ mySWAP ( *x1, *x2 ) ;
+
+ if ( *x0 > *x1 )
+ mySWAP ( *x0, *x1 ) ;
}
-
+
return 3;
}
else
{
- float sgnR = (R >= 0 ? 1 : -1);
- float A = -sgnR * pow (ABS (R) + sqrt (R2 - Q3), 1.0/3.0);
+ float sgnR = ( R >= 0 ? 1 : -1 );
+ float A = -sgnR * pow ( ABS ( R ) + sqrt ( R2 - Q3 ), 1.0/3.0 );
float B = Q / A ;
*x0 = A + B - a / 3;
return 1;
@@ -223,31 +223,31 @@
*
* copied from GSL
*/
-int gsl_poly_solve_quadratic (float a, float b, float c, float *x0, float *x1)
+int gsl_poly_solve_quadratic ( float a, float b, float c, float *x0, float *x1 )
{
float disc = b * b - 4 * a * c;
- if (disc > 0)
+ if ( disc > 0 )
{
- if (b == 0)
+ if ( b == 0 )
{
- float r = ABS (0.5 * sqrt (disc) / a);
+ float r = ABS ( 0.5 * sqrt ( disc ) / a );
*x0 = -r;
*x1 = r;
}
else
{
- float sgnb = (b > 0 ? 1 : -1);
- float temp = -0.5 * (b + sgnb * sqrt (disc));
+ float sgnb = ( b > 0 ? 1 : -1 );
+ float temp = -0.5 * ( b + sgnb * sqrt ( disc ) );
float r1 = temp / a ;
float r2 = c / temp ;
- if (r1 < r2)
+ if ( r1 < r2 )
{
*x0 = r1 ;
*x1 = r2 ;
- }
- else
+ }
+ else
{
*x0 = r2 ;
*x1 = r1 ;
@@ -255,7 +255,7 @@
}
return 2;
}
- else if (disc == 0)
+ else if ( disc == 0 )
{
*x0 = -0.5 * b / a ;
*x1 = -0.5 * b / a ;
@@ -274,56 +274,56 @@
* page 4, left column
*/
-int cloth_get_collision_time(float a[3], float b[3], float c[3], float d[3], float e[3], float f[3], float solution[3])
+int cloth_get_collision_time ( float a[3], float b[3], float c[3], float d[3], float e[3], float f[3], float solution[3] )
{
int num_sols = 0;
-
+
float g = -a[2] * c[1] * e[0] + a[1] * c[2] * e[0] +
- a[2] * c[0] * e[1] - a[0] * c[2] * e[1] -
- a[1] * c[0] * e[2] + a[0] * c[1] * e[2];
+ a[2] * c[0] * e[1] - a[0] * c[2] * e[1] -
+ a[1] * c[0] * e[2] + a[0] * c[1] * e[2];
float h = -b[2] * c[1] * e[0] + b[1] * c[2] * e[0] - a[2] * d[1] * e[0] +
- a[1] * d[2] * e[0] + b[2] * c[0] * e[1] - b[0] * c[2] * e[1] +
- a[2] * d[0] * e[1] - a[0] * d[2] * e[1] - b[1] * c[0] * e[2] +
- b[0] * c[1] * e[2] - a[1] * d[0] * e[2] + a[0] * d[1] * e[2] -
- a[2] * c[1] * f[0] + a[1] * c[2] * f[0] + a[2] * c[0] * f[1] -
- a[0] * c[2] * f[1] - a[1] * c[0] * f[2] + a[0] * c[1] * f[2];
+ a[1] * d[2] * e[0] + b[2] * c[0] * e[1] - b[0] * c[2] * e[1] +
+ a[2] * d[0] * e[1] - a[0] * d[2] * e[1] - b[1] * c[0] * e[2] +
+ b[0] * c[1] * e[2] - a[1] * d[0] * e[2] + a[0] * d[1] * e[2] -
+ a[2] * c[1] * f[0] + a[1] * c[2] * f[0] + a[2] * c[0] * f[1] -
+ a[0] * c[2] * f[1] - a[1] * c[0] * f[2] + a[0] * c[1] * f[2];
float i = -b[2] * d[1] * e[0] + b[1] * d[2] * e[0] +
- b[2] * d[0] * e[1] - b[0] * d[2] * e[1] -
- b[1] * d[0] * e[2] + b[0] * d[1] * e[2] -
- b[2] * c[1] * f[0] + b[1] * c[2] * f[0] -
- a[2] * d[1] * f[0] + a[1] * d[2] * f[0] +
- b[2] * c[0] * f[1] - b[0] * c[2] * f[1] +
- a[2] * d[0] * f[1] - a[0] * d[2] * f[1] -
- b[1] * c[0] * f[2] + b[0] * c[1] * f[2] -
- a[1] * d[0] * f[2] + a[0] * d[1] * f[2];
+ b[2] * d[0] * e[1] - b[0] * d[2] * e[1] -
+ b[1] * d[0] * e[2] + b[0] * d[1] * e[2] -
+ b[2] * c[1] * f[0] + b[1] * c[2] * f[0] -
+ a[2] * d[1] * f[0] + a[1] * d[2] * f[0] +
+ b[2] * c[0] * f[1] - b[0] * c[2] * f[1] +
+ a[2] * d[0] * f[1] - a[0] * d[2] * f[1] -
+ b[1] * c[0] * f[2] + b[0] * c[1] * f[2] -
+ a[1] * d[0] * f[2] + a[0] * d[1] * f[2];
float j = -b[2] * d[1] * f[0] + b[1] * d[2] * f[0] +
@@ Diff output truncated at 10240 characters. @@
More information about the Bf-blender-cvs
mailing list