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

3D图形编程

开发平台:

Visual C++

  1. //############################################################
  2. // 
  3. // ResolutionCtrl.h
  4. //
  5. // Kari Pulli
  6. // Fri Jul  3 11:52:55 PDT 1998
  7. //
  8. //############################################################
  9. #ifndef _RESOLUTIONCTRL_H_
  10. #define _RESOLUTIONCTRL_H_
  11. #include <vector.h>
  12. #include <rope.h>
  13. class ResolutionCtrl {
  14. public:
  15.   struct res_info {
  16.     int   abs_resolution; // number of vertices
  17.     bool  in_memory;      // true == in memory, false == in file
  18.     bool  desired_in_mem;
  19.     crope filename;
  20.     res_info(void) : abs_resolution(0),
  21.       in_memory(false), desired_in_mem(true) { }
  22.     friend bool operator<(const res_info& r1, const res_info& r2)
  23.       { // descending sort by number of vertices
  24. return r1.abs_resolution > r2.abs_resolution;
  25.       };
  26.   };
  27.   
  28. protected:
  29.   vector<res_info> resolutions;
  30.   int     curr_res;
  31.   crope   name;
  32.   crope   basename;
  33.   crope   ending;
  34. private:
  35.   void    split_name(void);
  36. public:
  37.   ResolutionCtrl(void) : curr_res(0) { }
  38.   //
  39.   // Functions for name
  40.   //
  41.   void  set_name(const char  *n);
  42.   void  set_name(const crope &n);
  43.   crope get_name(void);
  44.   crope get_basename(void);
  45.   crope get_nameending(void);
  46.   bool  has_ending(const char *end);
  47.   //
  48.   // Select a resolution
  49.   //
  50.   bool select_finest(void);
  51.   bool select_coarsest(void);
  52.   bool select_finer(void);
  53.   bool select_coarser(void);
  54.   bool select_by_count(int n);
  55.   //
  56.   // Create a new resolution (if it doesn't exist)
  57.   //
  58.   typedef enum { decQslim, decPlycrunch } Decimator;
  59.   virtual int create_resolution_absolute(int budget = 0,
  60.   Decimator dec = decQslim);
  61.   virtual bool delete_resolution (int abs_res);
  62.   //
  63.   // Find out about resolutions
  64.   //
  65.   int      num_resolutions(void) { return resolutions.size(); }
  66.   void     existing_resolutions(vector<res_info> &res);
  67.   res_info current_resolution(void);
  68.   int      current_resolution_index (void);
  69.   int          findResForLevel (int n);
  70.   bool     set_load_desired (int nPolys, bool desired);
  71.   //
  72.   // Memory handling
  73.   //
  74.   virtual bool load_resolution(int i);
  75.   virtual bool release_resolution(int nPolys);
  76.  protected:
  77.   int          findLevelForRes (int n);
  78.   void         insert_resolution (int abs, crope filename,
  79.   bool in_mem = true,
  80.   bool desired_mem = true);
  81.   virtual bool switchToResLevel (int iRes);
  82. }; 
  83. #endif