TriOctree.h
上传用户:kellyonhid
上传日期:2013-10-12
资源大小:932k
文件大小:1k
源码类别:

3D图形编程

开发平台:

Visual C++

  1. //############################################################
  2. // 
  3. // TriOctree.h
  4. //
  5. // Kari Pulli
  6. // Mon Nov 23 16:36:51 CET 1998
  7. //
  8. // Data structure that creates an octree containing all the 
  9. // triangles in a mesh.
  10. // Can also used to quickly evaluate approximate distances
  11. // to the surface.
  12. //
  13. //############################################################
  14. #ifndef _TRIOCTREE_H_
  15. #define _TRIOCTREE_H_
  16. #include "Pnt3.h"
  17. #include <vector.h>
  18. #include <stack.h>
  19. class TriOctree {
  20. private:
  21.   Pnt3        mCtr;
  22.   float       mRadius;
  23.   int         parIdx;
  24.   TriOctree  *parent;
  25.   TriOctree  *child[8];
  26.   const Pnt3 *pts;
  27.   vector<int> tind; // triangle indices, groups of three
  28.   TriOctree*  recursive_find(int face, stack<int>& path, 
  29.      bool bReachedTop);
  30.   bool        is_neighbor_cell(int face, int &iChild);
  31.   TriOctree*  find_neighbor (int face);
  32. public:
  33.   TriOctree(const Pnt3 &c, float r, const Pnt3 *p,
  34.     const vector<int> &tris, float minRadius,
  35.     int pidx = 0, TriOctree *parent = NULL);
  36.   ~TriOctree(void) {};
  37.   bool search(const Pnt3 &p, Pnt3 &cp, float &d);
  38.   // creates a mesh that shows the structure of the octree
  39.   void visualize(vector<Pnt3> &p, vector<int> &ind);
  40. };
  41. #endif