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

OpenGL

开发平台:

Visual C++

  1. // skygrid.h
  2. //
  3. // Celestial longitude/latitude grids.
  4. //
  5. // Copyright (C) 2008, the Celestia Development Team
  6. // Initial version by Chris Laurel, <claurel@gmail.com>
  7. //
  8. // This program is free software; you can redistribute it and/or
  9. // modify it under the terms of the GNU General Public License
  10. // as published by the Free Software Foundation; either version 2
  11. // of the License, or (at your option) any later version.
  12. #ifndef _CELENGINE_SKYGRID_H_
  13. #define _CELENGINE_SKYGRID_H_
  14. #include <string>
  15. #include <celutil/color.h>
  16. #include <celmath/quaternion.h>
  17. class Renderer;
  18. class Observer;
  19. class SkyGrid
  20. {
  21. public:
  22.     enum LongitudeUnits
  23.     {
  24.         LongitudeDegrees,
  25.         LongitudeHours,
  26.     };
  27.     enum LongitudeDirection
  28.     {
  29.         IncreasingCounterclockwise,
  30.         IncreasingClockwise,
  31.     };
  32.     
  33.     SkyGrid();
  34.     ~SkyGrid();
  35.     void render(Renderer& renderer,
  36.                 const Observer& observer,
  37.                 int windowWidth,
  38.                 int windowHeight);
  39.     Quatd orientation() const
  40.     {
  41.         return m_orientation;
  42.     }
  43.     void setOrientation(const Quatd& orientation)
  44.     {
  45.         m_orientation = orientation;
  46.     }
  47.     Color lineColor() const
  48.     {
  49.         return m_lineColor;
  50.     }
  51.     void setLineColor(Color lineColor)
  52.     {
  53.         m_lineColor = lineColor;
  54.     }
  55.     Color labelColor() const
  56.     {
  57.         return m_labelColor;
  58.     }
  59.     void setLabelColor(Color labelColor)
  60.     {
  61.         m_labelColor = labelColor;
  62.     }
  63.     //! Get the units of longitude (hours or degrees)
  64.     LongitudeUnits longitudeUnits() const
  65.     {
  66.         return m_longitudeUnits;
  67.     }
  68.     //! Set whether longitude is measured in hours or degrees
  69.     void setLongitudeUnits(LongitudeUnits longitudeUnits)
  70.     {
  71.         m_longitudeUnits = longitudeUnits;
  72.     }
  73.     
  74.     //! Get the direction of increasing longitude
  75.     LongitudeDirection longitudeDirection() const
  76.     {
  77.         return m_longitudeDirection;
  78.     }
  79.     
  80.     //! Set the direction of increasing longitude (clockwise or counterclockwise)
  81.     void setLongitudeDirection(LongitudeDirection longitudeDirection)
  82.     {
  83.         m_longitudeDirection = longitudeDirection;
  84.     }
  85. private:
  86.     std::string latitudeLabel(int latitude, int latitudeStep) const;
  87.     std::string longitudeLabel(int longitude, int longitudeStep) const;
  88.     int parallelSpacing(double idealSpacing) const;
  89.     int meridianSpacing(double idealSpacing) const;
  90. private:
  91.     Quatd m_orientation;
  92.     Color m_lineColor;
  93.     Color m_labelColor;
  94.     LongitudeUnits m_longitudeUnits;
  95.     LongitudeDirection m_longitudeDirection;
  96. };
  97. #endif // _CELENGINE_PLANETGRID_H_