dsodb.h
上传用户:center1979
上传日期:2022-07-26
资源大小:50633k
文件大小:2k
源码类别:

OpenGL

开发平台:

Visual C++

  1. //
  2. // C++ Interface: dsodb
  3. //
  4. // Description:
  5. //
  6. //
  7. // Author: Toti <root@totibox>, (C) 2005
  8. //
  9. // Copyright: See COPYING file that comes with this distribution
  10. //
  11. //
  12. #ifndef _DSODB_H_
  13. #define _DSODB_H_
  14. #include <iostream>
  15. #include <vector>
  16. #include <celengine/dsoname.h>
  17. #include <celengine/deepskyobj.h>
  18. #include <celengine/dsooctree.h>
  19. #include <celengine/parser.h>
  20. static const unsigned int MAX_DSO_NAMES = 10;
  21. extern const float DSO_OCTREE_ROOT_SIZE;
  22. //NOTE: this one and starDatabase should be derived from a common base class since they share lots of code and functionality.
  23. class DSODatabase
  24. {
  25.  public:
  26.     DSODatabase();
  27.     ~DSODatabase();
  28.     inline DeepSkyObject* getDSO(const uint32) const;
  29.     inline uint32         size() const;
  30.     DeepSkyObject* find(const uint32 catalogNumber) const;
  31.     DeepSkyObject* find(const std::string&) const;
  32.     std::vector<std::string> getCompletion(const std::string&) const;
  33.     void findVisibleDSOs(DSOHandler&    dsoHandler,
  34.                          const Point3d& obsPosition,
  35.                          const Quatf&   obsOrientation,
  36.                          float fovY,
  37.                          float aspectRatio,
  38.                          float limitingMag) const;
  39.     void findCloseDSOs(DSOHandler&    dsoHandler,
  40.                        const Point3d& obsPosition,
  41.                        float radius) const;
  42.     std::string getDSOName    (const DeepSkyObject* const &, bool i18n = false) const;
  43.     std::string getDSONameList(const DeepSkyObject* const &, const unsigned int maxNames = MAX_DSO_NAMES) const;
  44.     DSONameDatabase* getNameDatabase() const;
  45.     void setNameDatabase(DSONameDatabase*);
  46.     bool load(std::istream&, const std::string& resourcePath);
  47.     bool loadBinary(std::istream&);
  48.     void finish();
  49.     static DSODatabase* read(std::istream&);
  50.     static const char* FILE_HEADER;
  51.     double getAverageAbsoluteMagnitude() const;
  52. private:
  53.     void buildIndexes();
  54.     void buildOctree();
  55.     void calcAvgAbsMag();
  56.     int              nDSOs;
  57.     int              capacity;
  58.     DeepSkyObject**  DSOs;
  59.     DSONameDatabase* namesDB;
  60.     DeepSkyObject**  catalogNumberIndex;
  61.     DSOOctree*       octreeRoot;
  62.     uint32           nextAutoCatalogNumber;
  63.     
  64.     double           avgAbsMag;
  65. };
  66. DeepSkyObject* DSODatabase::getDSO(const uint32 n) const
  67. {
  68.     return *(DSOs + n);
  69. }
  70. uint32 DSODatabase::size() const
  71. {
  72.     return nDSOs;
  73. }
  74. #endif // _DSODB_H_