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

OpenGL

开发平台:

Visual C++

  1. // timelinephase.h
  2. //
  3. // Object timeline phase
  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_TIMELINEPHASE_H_
  13. #define _CELENGINE_TIMELINEPHASE_H_
  14. class ReferenceFrame;
  15. class Orbit;
  16. class RotationModel;
  17. class FrameTree;
  18. class Universe;
  19. class Body;
  20. class TimelinePhase
  21. {
  22. public:
  23.     int addRef() const;
  24.     int release() const;
  25.     Body* body() const
  26.     {
  27.         return m_body;
  28.     }
  29.     double startTime() const
  30.     {
  31.         return m_startTime;
  32.     }
  33.     double endTime() const
  34.     {
  35.         return m_endTime;
  36.     }
  37.     ReferenceFrame* orbitFrame() const
  38.     {
  39.         return m_orbitFrame;
  40.     }
  41.     Orbit* orbit() const
  42.     {
  43.         return m_orbit;
  44.     }
  45.     ReferenceFrame* bodyFrame() const
  46.     {
  47.         return m_bodyFrame;
  48.     }
  49.     RotationModel* rotationModel() const
  50.     {
  51.         return m_rotationModel;
  52.     }
  53.     /*! Get the frame tree that contains this phase (always the tree associated
  54.      *  with the center of the orbit frame.)
  55.      */
  56.     FrameTree* getFrameTree() const
  57.     {
  58.         return m_owner;
  59.     }
  60.     /*! Check whether the specified time t lies within this phase. True if
  61.      *  startTime <= t < endTime
  62.      */
  63.     bool includes(double t) const
  64.     {
  65.         return m_startTime <= t && t < m_endTime;
  66.     }
  67.     static TimelinePhase* CreateTimelinePhase(Universe& universe,
  68.                                               Body* body,
  69.                                               double startTime,
  70.                                               double endTime,
  71.                                               ReferenceFrame& orbitFrame,
  72.                                               Orbit& orbit,
  73.                                               ReferenceFrame& bodyFrame,
  74.                                               RotationModel& rotationModel);
  75. private:
  76.     // Private constructor; phases can only created with the
  77.     // createTimelinePhase factory method.
  78.     TimelinePhase(Body* _body,
  79.                   double _startTime,
  80.                   double _endTime,
  81.                   ReferenceFrame* _orbitFrame,
  82.                   Orbit* _orbit,
  83.                   ReferenceFrame* _bodyFrame,
  84.                   RotationModel* _rotationModel,
  85.                   FrameTree* _owner);
  86.     // Private copy constructor and assignment operator; should never be used.
  87.     TimelinePhase(const TimelinePhase& phase);
  88.     TimelinePhase& operator=(const TimelinePhase& phase);
  89.     // TimelinePhases are refCounted; use release() instead.
  90.     ~TimelinePhase();
  91. private:
  92.     Body* m_body;
  93.     double m_startTime;
  94.     double m_endTime;
  95.     ReferenceFrame* m_orbitFrame;
  96.     Orbit* m_orbit;
  97.     ReferenceFrame* m_bodyFrame;
  98.     RotationModel* m_rotationModel;
  99.     FrameTree* m_owner;
  100.     mutable int refCount;
  101. };
  102. #endif // _CELENGINE_TIMELINEPHASE_H_