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

3D图形编程

开发平台:

Visual C++

  1. //############################################################
  2. // 
  3. // GenericScan.h
  4. //
  5. // Kari Pulli
  6. // Mon Jun 29 11:51:05 PDT 1998
  7. //
  8. // Store range scan information from a generic range scanner
  9. // that gives range maps.
  10. // Not much if anything is known of the scanner properties,
  11. // so orthographics scan geometry is assumed.
  12. //
  13. //############################################################
  14. #ifndef _GENERICSCAN_H_
  15. #define _GENERICSCAN_H_
  16. #include "RigidScan.h"
  17. #include "Mesh.h"
  18. class KDindtree;
  19. class RangeGrid;
  20. class GenericScan : public RigidScan {
  21. private:
  22.   vector<Mesh*> meshes;
  23.   vector<KDindtree *> kdtree;
  24.   bool bDirty;
  25.   bool bNameSet;
  26.   RangeGrid* myRangeGrid;
  27.   KDindtree* get_current_kdtree(void);
  28.   void insertMesh(Mesh *m, const crope& filename,
  29.   bool bLoaded = true, bool bAlwaysLoad = true,
  30.   int nRes = 0);
  31.   Mesh* currentMesh (void);
  32.   Mesh* getMesh (int level);
  33.   inline Mesh* highestRes (void);
  34.   bool readSet (const crope& fn);
  35.   bool readSingleFile (const crope& fn);
  36.   void _Init();
  37. public:
  38.       // default constructor:
  39.   GenericScan(void);
  40.       // wrapper constructor to display a single mesh:
  41.   GenericScan(Mesh* mesh, const crope& name);
  42.   ~GenericScan(void);
  43.   // perVertex: colors and normals for every vertex (not every 3)
  44.   // stripped:  triangle strips instead of triangles
  45.   // color: one of the enum values from RigidScan.h
  46.   // colorsize: # of bytes for color
  47.   virtual MeshTransport* mesh(bool         perVertex = true,
  48.       bool         stripped  = true,
  49.       ColorSource  color = colorNone,
  50.       int          colorSize = 3);
  51.   
  52.   int  num_vertices(void);
  53.   void subsample_points(float rate, vector<Pnt3> &p,
  54. vector<Pnt3> &n);
  55.   void PrintVoxelInfo();  // added display voxel feature.  See
  56.   // GenericScan.cc for documentation - leslie
  57.  
  58.   RigidScan* filtered_copy(const VertexFilter& filter);
  59.   virtual bool filter_inplace(const VertexFilter &filter);
  60.   virtual bool filter_vertices (const VertexFilter& filter, vector<Pnt3>& p);
  61.   bool closest_point(const Pnt3 &p, const Pnt3 &n, 
  62.      Pnt3 &cp, Pnt3 &cn,
  63.      float thr = 1e33, bool bdry_ok = 0);
  64.   void computeBBox();
  65.   void flipNormals();
  66.   crope getInfo (void);
  67.   // smoothing
  68.   void dequantizationSmoothing(int iterations, double maxDisplacement);
  69.   void commitSmoothingChanges();
  70.   
  71.   // file I/O methods
  72.   bool read(const crope &fname);
  73.   // is data worth saving?
  74.   virtual bool is_modified (void);
  75.   // save to given name: if default, save to existing name if there is
  76.   // one, or return false if there's not
  77.   virtual bool write(const crope& fname = crope()); 
  78.   // for saving individual meshes
  79.   virtual bool write_resolution_mesh (int npolys,
  80.       const crope& fname = crope(),
  81.       Xform<float> xfBy = Xform<float>());
  82.   // for saving anything else
  83.   virtual bool write_metadata (MetaData data);
  84.   // ResolutionCtrl methods
  85.   int create_resolution_absolute (int budget = 0, Decimator dec = decQslim);
  86.   bool delete_resolution (int abs_res);
  87.   bool load_resolution (int i);
  88.   bool release_resolution (int nPolys);
  89.  private:
  90.   // file i/o helpers
  91.   void setd (const crope& dir = crope(), bool bCreate = false);
  92.   void pushd();
  93.   void popd();
  94.   crope setdir;
  95.   crope pusheddir;
  96.   int pushcount;
  97.   Mesh* readMeshFile (const char* name);
  98.   bool getXformFilename (const char* meshName, char* xfName);
  99.   // color helper
  100.   void setMTColor (Mesh* mesh, MeshTransport* mt,
  101.    bool perVertex, ColorSource source, int colorsize);
  102. };
  103. #endif /* _GENERICSCAN_H_ */