Added BKE_freestyle_lineset_delete() by generalizing FRS_delete_active_lineset().
[blender.git] / source / blender / blenkernel / BKE_bvhutils.h
index 15c93bd58fa5e478dabf42d0953ce28584694f84..4bc8fc44bb4617c5562c5fe7c58dc352caf78e91 100644 (file)
@@ -44,28 +44,27 @@ struct MFace;
 /*
  * struct that kepts basic information about a BVHTree build from a mesh
  */
 /*
  * struct that kepts basic information about a BVHTree build from a mesh
  */
-typedef struct BVHTreeFromMesh
-{
+typedef struct BVHTreeFromMesh {
        struct BVHTree *tree;
 
        /* default callbacks to bvh nearest and raycast */
        BVHTree_NearestPointCallback nearest_callback;
        struct BVHTree *tree;
 
        /* default callbacks to bvh nearest and raycast */
        BVHTree_NearestPointCallback nearest_callback;
-       BVHTree_RayCastCallback      raycast_callback;
-
-       /* Mesh represented on this BVHTree */
-       struct DerivedMesh *mesh;
+       BVHTree_RayCastCallback raycast_callback;
 
        /* Vertex array, so that callbacks have instante access to data */
        struct MVert *vert;
 
        /* Vertex array, so that callbacks have instante access to data */
        struct MVert *vert;
-       struct MEdge *edge;             /* only used for BVHTreeFromMeshEdges */
+       struct MEdge *edge;     /* only used for BVHTreeFromMeshEdges */
        struct MFace *face;
        struct MFace *face;
+       bool vert_allocated;
+       bool face_allocated;
+       bool edge_allocated;
 
        /* radius for raycast */
        float sphere_radius;
 
        /* Private data */
 
        /* radius for raycast */
        float sphere_radius;
 
        /* Private data */
-       int cached;
-       void *em_evil;  /* var only for snapping */
+       void *em_evil;  /* var only for snapping */
+       bool cached;
 
 } BVHTreeFromMesh;
 
 
 } BVHTreeFromMesh;
 
@@ -80,7 +79,7 @@ typedef struct BVHTreeFromMesh
  * 
  * free_bvhtree_from_mesh should be called when the tree is no longer needed.
  */
  * 
  * free_bvhtree_from_mesh should be called when the tree is no longer needed.
  */
-BVHTreebvhtree_from_mesh_verts(struct BVHTreeFromMesh *data, struct DerivedMesh *mesh, float epsilon, int tree_type, int axis);
+BVHTree *bvhtree_from_mesh_verts(struct BVHTreeFromMesh *data, struct DerivedMesh *mesh, float epsilon, int tree_type, int axis);
 
 /*
  * Builds a bvh tree where nodes are the faces of the given mesh.
 
 /*
  * Builds a bvh tree where nodes are the faces of the given mesh.
@@ -96,9 +95,9 @@ BVHTree* bvhtree_from_mesh_verts(struct BVHTreeFromMesh *data, struct DerivedMes
  * 
  * free_bvhtree_from_mesh should be called when the tree is no longer needed.
  */
  * 
  * free_bvhtree_from_mesh should be called when the tree is no longer needed.
  */
-BVHTreebvhtree_from_mesh_faces(struct BVHTreeFromMesh *data, struct DerivedMesh *mesh, float epsilon, int tree_type, int axis);
+BVHTree *bvhtree_from_mesh_faces(struct BVHTreeFromMesh *data, struct DerivedMesh *mesh, float epsilon, int tree_type, int axis);
 
 
-BVHTreebvhtree_from_mesh_edges(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_*.
 
 /*
  * Frees data allocated by a call to bvhtree_from_mesh_*.
@@ -106,21 +105,23 @@ BVHTree* bvhtree_from_mesh_edges(struct BVHTreeFromMesh *data, struct DerivedMes
 void free_bvhtree_from_mesh(struct BVHTreeFromMesh *data);
 
 /*
 void free_bvhtree_from_mesh(struct BVHTreeFromMesh *data);
 
 /*
-* Math functions used by callbacks
-*/
+ * Math functions used by callbacks
+ */
 float bvhtree_ray_tri_intersection(const BVHTreeRay *ray, const float m_dist, const float v0[3], const float v1[3], const float v2[3]);
 float bvhtree_ray_tri_intersection(const BVHTreeRay *ray, const float m_dist, const float v0[3], const float v1[3], const float v2[3]);
-float nearest_point_in_tri_surface(const float v0[3], const float v1[3], const float v2[3], const float p[3], int *v, int *e, float nearest[3]);
+float nearest_point_in_tri_surface_squared(const float v0[3], const float v1[3], const float v2[3], const float p[3], int *v, int *e, float nearest[3]);
 
 /*
  * BVHCache
  */
 
 //Using local coordinates
 
 /*
  * BVHCache
  */
 
 //Using local coordinates
-#define BVHTREE_FROM_FACES             0
-#define BVHTREE_FROM_VERTICES  1
-#define BVHTREE_FROM_EDGES             2
+#define BVHTREE_FROM_FACES      0
+#define BVHTREE_FROM_VERTICES   1
+#define BVHTREE_FROM_EDGES      2
+
+#define BVHTREE_FROM_FACES_EDITMESH  3
 
 
-typedef struct LinkNodeBVHCache;
+typedef struct LinkNode *BVHCache;
 
 
 /*
 
 
 /*