Merge with trunk r41342
[blender-staging.git] / source / blender / blenkernel / BKE_bvhutils.h
index 66c8d99959a896d7ef3c908830659f880f51b0ad..2ab8ea21d0b93b0cc33daa7f8c3179bfc19c851b 100644 (file)
@@ -1,7 +1,4 @@
-/**
- *
- * $Id$
- *
+/*
  * ***** BEGIN GPL LICENSE BLOCK *****
  *
  * This program is free software; you can redistribute it and/or
@@ -16,7 +13,7 @@
  *
  * You should have received a copy of the GNU General Public License
  * along with this program; if not, write to the Free Software Foundation,
- * Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
+ * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
  *
  * The Original Code is Copyright (C) 2006 by NaN Holding BV.
  * All rights reserved.
 #ifndef BKE_BVHUTILS_H
 #define BKE_BVHUTILS_H
 
+/** \file BKE_bvhutils.h
+ *  \ingroup bke
+ */
+
 #include "BLI_kdopbvh.h"
-#include "BLI_linklist.h"
 
 /*
  * This header encapsulates necessary code to buld a BVH
@@ -57,6 +57,7 @@ typedef struct BVHTreeFromMesh
 
        /* Vertex array, so that callbacks have instante access to data */
        struct MVert *vert;
+       struct MEdge *edge;             /* only used for BVHTreeFromMeshEdges */
        struct MFace *face;
 
        /* radius for raycast */
@@ -64,6 +65,7 @@ typedef struct BVHTreeFromMesh
 
        /* Private data */
        int cached;
+       void *em_evil;  /* var only for snapping */
 
 } BVHTreeFromMesh;
 
@@ -96,11 +98,18 @@ BVHTree* bvhtree_from_mesh_verts(struct BVHTreeFromMesh *data, struct DerivedMes
  */
 BVHTree* bvhtree_from_mesh_faces(struct BVHTreeFromMesh *data, struct DerivedMesh *mesh, float epsilon, int tree_type, int axis);
 
+BVHTree* bvhtree_from_mesh_edges(struct BVHTreeFromMesh *data, struct DerivedMesh *mesh, float epsilon, int tree_type, int axis);
+
 /*
  * Frees data allocated by a call to bvhtree_from_mesh_*.
  */
 void free_bvhtree_from_mesh(struct BVHTreeFromMesh *data);
 
+/*
+* Math functions used by callbacks
+*/
+float bvhtree_ray_tri_intersection(const BVHTreeRay *ray, const float m_dist, const float *v0, const float *v1, const float *v2);
+float nearest_point_in_tri_surface(const float *v0,const float *v1,const float *v2,const float *p, int *v, int *e, float *nearest);
 
 /*
  * BVHCache
@@ -109,8 +118,9 @@ void free_bvhtree_from_mesh(struct BVHTreeFromMesh *data);
 //Using local coordinates
 #define BVHTREE_FROM_FACES             0
 #define BVHTREE_FROM_VERTICES  1
+#define BVHTREE_FROM_EDGES             2
 
-typedef LinkNode* BVHCache;
+typedef struct LinkNode* BVHCache;
 
 
 /*