Forgot some new file for seperated collisions
[blender.git] / source / blender / blenkernel / BKE_collisions.h
1 /**
2  * BKE_cloth.h
3  *
4  * $Id: BKE_cloth.h,v 1.1 2007/08/01 02:07:27 daniel Exp $
5  *
6  * ***** BEGIN GPL/BL DUAL LICENSE BLOCK *****
7  *
8  * This program is free software; you can redistribute it and/or
9  * modify it under the terms of the GNU General Public License
10  * as published by the Free Software Foundation; either version 2
11  * of the License, or (at your option) any later version. The Blender
12  * Foundation also sells licenses for use in proprietary software under
13  * the Blender License.  See http://www.blender.org/BL/ for information
14  * about this.
15  *
16  * This program is distributed in the hope that it will be useful,
17  * but WITHOUT ANY WARRANTY; without even the implied warranty of
18  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
19  * GNU General Public License for more details.
20  *
21  * You should have received a copy of the GNU General Public License
22  * along with this program; if not, write to the Free Software Foundation,
23  * Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
24  *
25  * The Original Code is Copyright (C) Blender Foundation.
26  * All rights reserved.
27  *
28  * The Original Code is: all of this file.
29  *
30  * Contributor(s): none yet.
31  *
32  * ***** END GPL/BL DUAL LICENSE BLOCK *****
33  */
34 #ifndef BKE_COLLISIONS_H
35 #define BKE_COLLISIONS_H
36
37 #include <math.h>
38 #include <stdlib.h>
39 #include <string.h>
40 /* types */
41 #include "BLI_linklist.h"
42 #include "BKE_DerivedMesh.h"
43 #include "BKE_object.h"
44 #include "BKE_DerivedMesh.h"
45
46 // used in kdop.c and collision.c
47 typedef struct Tree
48 {
49         struct Tree *nodes[4]; // 4 children --> quad-tree
50         struct Tree *parent;
51         struct Tree *nextLeaf;
52         struct Tree *prevLeaf;
53         float   bv[26]; // Bounding volume of all nodes / we have 7 axes on a 14-DOP
54         unsigned int tri_index; // this saves the index of the face
55         int     count_nodes; // how many nodes are used
56         int     traversed;  // how many nodes already traversed until this level?
57         int     isleaf;
58 }
59 Tree;
60
61 typedef struct Tree TreeNode;
62
63 typedef struct BVH
64 {
65         unsigned int    numfaces;
66         unsigned int    numverts;
67         MVert           *x; // position of verts at time n 
68         MVert           *xold; // position of verts at time n-1
69         MFace           *mfaces; // just a pointer to the original datastructure
70         struct LinkNode *tree;
71         TreeNode        *root; // TODO: saving the root --> is this really needed? YES!
72         TreeNode        *leaf_tree; /* Tail of the leaf linked list.    */
73         TreeNode        *leaf_root;     /* Head of the leaf linked list.        */
74         float           epsilon; /* epslion is used for inflation of the k-dop     */
75         int             flags; /* bvhFlags */
76 }
77 BVH;
78
79 /* used for collisions in kdop.c and also collision.c*/
80 typedef struct CollisionPair
81 {
82         unsigned int indexA, indexB;
83 }
84 CollisionPair;
85
86
87 /////////////////////////////////////////////////
88 // forward declarations
89 /////////////////////////////////////////////////
90
91 void bvh_free ( BVH *bvh );
92 BVH *bvh_build (DerivedMesh *dm, MVert *x, MVert *xold, unsigned int numverts, float epsilon);
93
94 int bvh_traverse(Tree *tree1, Tree *tree2, LinkNode *collision_list);
95 void bvh_update(DerivedMesh *dm, BVH * bvh, int moving);
96
97 LinkNode *BLI_linklist_append_fast ( LinkNode **listp, void *ptr );
98
99
100 /////////////////////////////////////////////////
101
102 #endif
103