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

OpenGL

开发平台:

Visual C++

  1. // axisarrow.h
  2. //
  3. // Copyright (C) 2007, Celestia Development Team
  4. //
  5. // This program is free software; you can redistribute it and/or
  6. // modify it under the terms of the GNU General Public License
  7. // as published by the Free Software Foundation; either version 2
  8. // of the License, or (at your option) any later version.
  9. #ifndef _CELENGINE_AXISARROW_H_
  10. #define _CELENGINE_AXISARROW_H_
  11. #include <celutil/color.h>
  12. #include <celmath/quaternion.h>
  13. #include <celengine/referencemark.h>
  14. #include <celengine/selection.h>
  15. class Body;
  16. class ArrowReferenceMark : public ReferenceMark
  17. {
  18.  public:
  19.     ArrowReferenceMark(const Body& _body);
  20.     void setSize(float _size);
  21.     void setColor(Color _color);
  22.     void render(Renderer* renderer, const Point3f& position, float discSize, double tdb) const;
  23.     float boundingSphereRadius() const
  24.     {
  25.         return size;
  26.     }
  27.     bool isOpaque() const
  28.     {
  29.         return opacity == 1.0f;
  30.     }
  31.     virtual Vec3d getDirection(double tdb) const = 0;
  32.  protected:
  33.     const Body& body;
  34.  private:
  35.     float size;
  36.     Color color;
  37.     float opacity;
  38. };
  39. class AxesReferenceMark : public ReferenceMark
  40. {
  41.  public:
  42.     AxesReferenceMark(const Body& _body);
  43.     void setSize(float _size);
  44.     void setOpacity(float _opacity);
  45.     void render(Renderer* renderer, const Point3f& position, float discSize, double tdb) const;
  46.     float boundingSphereRadius() const
  47.     {
  48.         return size;
  49.     }
  50.     bool isOpaque() const
  51.     {
  52.         return opacity == 1.0f;
  53.     }
  54.     virtual Quatd getOrientation(double tdb) const = 0;
  55.  protected:
  56.     const Body& body;
  57.  private:
  58.     float size;
  59.     float opacity;
  60. };
  61. class BodyAxisArrows : public AxesReferenceMark
  62. {
  63. public:
  64.     BodyAxisArrows(const Body& _body);
  65.     Quatd getOrientation(double tdb) const;
  66. };
  67. class FrameAxisArrows : public AxesReferenceMark
  68. {
  69. public:
  70.     FrameAxisArrows(const Body& _body);
  71.     Quatd getOrientation(double tdb) const;
  72. };
  73. class SunDirectionArrow : public ArrowReferenceMark
  74. {
  75. public:
  76.     SunDirectionArrow(const Body& _body);
  77.     Vec3d getDirection(double tdb) const;
  78. };
  79. class VelocityVectorArrow : public ArrowReferenceMark
  80. {
  81. public:
  82.     VelocityVectorArrow(const Body& _body);
  83.     Vec3d getDirection(double tdb) const;
  84. };
  85. class SpinVectorArrow : public ArrowReferenceMark
  86. {
  87. public:
  88.     SpinVectorArrow(const Body& _body);
  89.     Vec3d getDirection(double tdb) const;
  90. };
  91. /*! The body-to-body direction arrow points from the center of
  92.  *  the primary body toward a target object.
  93.  */
  94. class BodyToBodyDirectionArrow : public ArrowReferenceMark
  95. {
  96. public:
  97.     BodyToBodyDirectionArrow(const Body& _body, const Selection& _target);
  98.     Vec3d getDirection(double tdb) const;
  99. private:
  100.     Selection target;
  101. };
  102. #endif // _CELENGINE_AXISARROW_H_