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

OpenGL

开发平台:

Visual C++

  1. // selection.h
  2. // 
  3. // Copyright (C) 2001, Chris Laurel <claurel@shatters.net>
  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_SELECTION_H_
  10. #define _CELENGINE_SELECTION_H_
  11. #include <string>
  12. #include <celengine/star.h>
  13. #include <celengine/body.h>
  14. #include <celengine/deepskyobj.h>
  15. #include <celengine/location.h>
  16. #include <celengine/univcoord.h>
  17. class Selection
  18. {
  19.  public:
  20.     enum Type {
  21.         Type_Nil,
  22.         Type_Star,
  23.         Type_Body,
  24.         Type_DeepSky,
  25.         Type_Location,
  26.     };
  27.  public:
  28.     Selection() : type(Type_Nil), obj(NULL) {};
  29.     Selection(Star* star) : type(Type_Star), obj(star) { checkNull(); };
  30.     Selection(Body* body) : type(Type_Body), obj(body) { checkNull(); };
  31.     Selection(DeepSkyObject* deepsky) : type(Type_DeepSky), obj(deepsky) {checkNull(); };
  32.     Selection(Location* location) : type(Type_Location), obj(location) { checkNull(); };
  33.     Selection(const Selection& sel) : type(sel.type), obj(sel.obj) {};
  34.     ~Selection() {};
  35.     bool empty() const { return type == Type_Nil; }
  36.     double radius() const;
  37.     UniversalCoord getPosition(double t) const;
  38. Vec3d getVelocity(double t) const;
  39.     std::string getName(bool i18n = false) const;
  40.     Selection parent() const;
  41.     bool isVisible() const;
  42.     Star* star() const
  43.     {
  44.         return type == Type_Star ? static_cast<Star*>(obj) : NULL;
  45.     }
  46.     Body* body() const
  47.     {
  48.         return type == Type_Body ? static_cast<Body*>(obj) : NULL;
  49.     }
  50.     DeepSkyObject* deepsky() const
  51.     {
  52.         return type == Type_DeepSky ? static_cast<DeepSkyObject*>(obj) : NULL;
  53.     }
  54.     Location* location() const
  55.     {
  56.         return type == Type_Location ? static_cast<Location*>(obj) : NULL;
  57.     }
  58.     Type getType() const { return type; }
  59.     // private:
  60.     Type type;
  61.     void* obj;
  62.     void checkNull() { if (obj == NULL) type = Type_Nil; }
  63. };
  64. inline bool operator==(const Selection& s0, const Selection& s1)
  65. {
  66.     return s0.type == s1.type && s0.obj == s1.obj;
  67. }
  68. inline bool operator!=(const Selection& s0, const Selection& s1)
  69. {
  70.     return s0.type != s1.type || s0.obj != s1.obj;
  71. }
  72. #endif // _CELENGINE_SELECTION_H_