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

OpenGL

开发平台:

Visual C++

  1. // frametree.h
  2. //
  3. // Reference frame tree.
  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_FRAMETREE_H_
  13. #define _CELENGINE_FRAMETREE_H_
  14. #include <vector>
  15. class Star;
  16. class Body;
  17. class ReferenceFrame;
  18. class TimelinePhase;
  19. class FrameTree
  20. {
  21. public:
  22.     FrameTree(Star*);
  23.     FrameTree(Body*);
  24.     ~FrameTree();
  25.     /*! Return the star that this tree is associated with; it will be
  26.      *  NULL for frame trees associated with solar system bodies.
  27.      */
  28.     Star* getStar() const
  29.     {
  30.         return starParent;
  31.     }
  32.     ReferenceFrame* getDefaultReferenceFrame() const;
  33.     void addChild(TimelinePhase* phase);
  34.     void removeChild(TimelinePhase* phase);
  35.     TimelinePhase* getChild(unsigned int n) const;
  36.     unsigned int childCount() const;
  37.     void markChanged();
  38.     void markUpdated();
  39.     void recomputeBoundingSphere();
  40.     bool isRoot() const
  41.     {
  42.         return bodyParent == NULL;
  43.     }
  44.     bool updateRequired() const
  45.     {
  46.         return m_changed;
  47.     }
  48.     /*! Get the radius of a sphere large enough to contain all
  49.      *  objects in the tree.
  50.      */
  51.     double boundingSphereRadius() const
  52.     {
  53.         return m_boundingSphereRadius;
  54.     }
  55.     /*! Get the radius of the largest body in the tree.
  56.      */
  57.     double maxChildRadius() const
  58.     {
  59.         return m_maxChildRadius;
  60.     }
  61.     /*! Return whether any of the children of this frame
  62.      *  are secondary illuminators.
  63.      */
  64.     bool containsSecondaryIlluminators() const
  65.     {
  66.         return m_containsSecondaryIlluminators;
  67.     }
  68.     /*! Return a bitmask with the classifications of all children
  69.      *  in this tree.
  70.      */
  71.     int childClassMask() const
  72.     {
  73.         return m_childClassMask;
  74.     }
  75. private:
  76.     Star* starParent;
  77.     Body* bodyParent;
  78.     std::vector<TimelinePhase*> children;
  79.     double m_boundingSphereRadius;
  80.     double m_maxChildRadius;
  81.     bool m_containsSecondaryIlluminators;
  82.     bool m_changed;
  83.     int m_childClassMask;
  84.     ReferenceFrame* defaultFrame;
  85. };
  86. #endif // _CELENGINE_FRAMETREE_H_