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

3D图形编程

开发平台:

Visual C++

  1. #ifndef _PLV_SCENE_
  2. #define _PLV_SCENE_
  3. #include "Bbox.h"
  4. #include "Pnt3.h"
  5. #include "vector.h"
  6. #include "ColorUtils.h"
  7. #include "Trackball.h"
  8. #include "plvGlobals.h"
  9. #include "DisplayMesh.h"
  10. class GlobalReg;
  11. class RigidScan;
  12. class VertexFilter;
  13. class Scene {
  14.  private:  // private data
  15.     
  16.   Bbox      bbox;        // Bounding box around vertices in scene
  17.   Trackball homePos;     // copy of orientation info for set/goHome
  18.   int       resOverride; // master scene resolution, high/low/default
  19.   int       slowPolyCount; // min. # of polys that deserve a status bar
  20.                            // while rendering
  21.   DisplayableMesh** findSceneMesh (DisplayableMesh* mesh);
  22.  public:   // public data
  23.   vector<DisplayableMesh *> meshSets;   // ROOT mesh sets in scene only
  24.   ColorSet meshColors;    // to obtain next color for false-color mode
  25.   GlobalReg* globalReg;   // registration information
  26.   Tcl_Interp* interp;
  27.  public:   // public methods
  28.   Scene (Tcl_Interp* _interp);
  29.   ~Scene();
  30.   DisplayableMesh* addMeshSet(RigidScan* scan,
  31.       bool bRecenterCamera = true,
  32.       char* nameToUse = NULL);
  33.   void     addMeshInternal (DisplayableMesh* scan);
  34.   void     deleteMeshSet (DisplayableMesh* deadMesh);
  35.   bool     renameMeshSet (DisplayableMesh* mesh, const char* nameToUse);
  36.   void     freeMeshes();
  37.   enum   { resLow, resHigh, resNextLow, resNextHigh,
  38.    resTempLow, resTempHigh, resDefault };
  39.   void     setMeshResolution(int res);
  40.   int      getMeshResolution();
  41.   bool     wantMeshBBox (DisplayableMesh* mesh = NULL);
  42.   bool     meshes_written_stripped (void);
  43.   typedef enum { async, sync, flush } bboxSyncMode;
  44.   void     computeBBox (bboxSyncMode synchronous = async); // delay if possible
  45.   void     centerCamera();
  46.   typedef enum {
  47.     none, name, date, visibility, loaded,
  48.     polycount, dirname
  49.   } sortCriteria;
  50.   void     sortSceneMeshes (vector<DisplayableMesh*>& sortedList,
  51.     vector<sortCriteria>& criteria,
  52.     bool bDictionarySort = true,
  53.     bool bListInvisible = true);
  54.   void     invalidateDisplayCaches();
  55.   void     flipNormals (void);
  56.   float    sceneRadius (void) const;
  57.   Pnt3     worldCenter (void);
  58.   const Bbox& worldBbox (void) const {return bbox;}
  59.   void     flattenCameraXform (void);
  60.   void     setHome (void);
  61.   void     goHome  (void);
  62.   int      getSlowPolyCount (void);
  63.   void     setSlowPolyCount (int count);
  64.   // file i/o
  65.   bool     readSessionFile (char* name);
  66.   bool     writeSessionFile (char* name);
  67.   bool     setScanLoadedStatus (DisplayableMesh* dm, bool load);
  68. };
  69. // maybe these should be Scene members, but for now they're global
  70. DisplayableMesh *FindMeshDisplayInfo(const char *name);// hashed -- fast
  71. //The first one only looks at root scans for a match, the
  72. //second one looks at the leaves as well. For most purposes the first
  73. //one suffices, but there may be instances such in groups when you
  74. //need to find non-roots.
  75. DisplayableMesh *FindMeshDisplayInfo(RigidScan* scan); // linsrch -- slow
  76. DisplayableMesh *GetMeshForRigidScan (RigidScan *scan); // walks over hashtable
  77.  
  78. int AddMeshSetToHash(DisplayableMesh *mesh);
  79. const char *GetTbObjName(TbObj *tb);
  80. int MeshSetHashDelete(char *name);
  81. #endif   // _PLV_SCENE_