/* MeshDistance.h Written by Matthew Fisher Abstract interface for mesh-mesh distance. */ class MeshDistance { public: void InitSingleMesh(const BaseMesh &m, const Matrix4 &transform) { Vector< pair > meshes; meshes.PushEnd( pair(&m, transform) ); InitMeshList(meshes); } virtual void InitMeshList(const Vector< pair > &meshes) = 0; virtual bool IntersectMeshList(const Vector< pair > &meshes) const = 0; bool IntersectSingleMesh(const BaseMesh &m, const Matrix4 &transform) const { Vector< pair > meshes(1); meshes[0] = pair(&m, transform); return IntersectMeshList(meshes); } }; class MeshDistanceBruteForce : public MeshDistance { public: void InitMeshList(const Vector< pair > &meshes); bool IntersectMeshList(const Vector< pair > &meshes) const; private: struct TriangleEntry { Vec3f V[3]; Vec3f center, variance; }; Vector _triangles; };