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

OpenGL

开发平台:

Visual C++

  1. /***************************************************************************
  2.                           url.h  -  description
  3.                              -------------------
  4.     begin                : Wed Aug 7 2002
  5.     copyright            : (C) 2002 by chris
  6.     email                : chris@tux.teyssier.org
  7.  ***************************************************************************/
  8. /***************************************************************************
  9.  *                                                                         *
  10.  *   This program is free software; you can redistribute it and/or modify  *
  11.  *   it under the terms of the GNU General Public License as published by  *
  12.  *   the Free Software Foundation; either version 2 of the License, or     *
  13.  *   (at your option) any later version.                                   *
  14.  *                                                                         *
  15.  ***************************************************************************/
  16. #ifndef _URL_H_
  17. #define _URL_H_
  18. #include <string>
  19. #include <map>
  20. #include "celestiacore.h"
  21. #include "celengine/astro.h"
  22. class CelestiaCore;
  23. class CelestiaState;
  24. class Url
  25. {
  26. public:
  27.     enum UrlType
  28.     {
  29.         Absolute = 0,
  30.         Relative = 1,
  31.         Settings = 2,
  32.     };
  33.     /*! The TimeSource specifies what the time will be set to when the user
  34.      *  activates the URL.
  35.      *  - UseUrlTime indicates that the simulation time should be set to whatever
  36.      *    value was stored in the URL.
  37.      *  - UseSimulationTime means that the simulation time at activation is not
  38.      *    changed.
  39.      *  - UseSystemTime means that the simulation time will be set to whatever the
  40.      *    current system time is when the URL is activated.
  41.      */
  42.     enum TimeSource
  43.     {
  44.         UseUrlTime        = 0,
  45.         UseSimulationTime = 1,
  46.         UseSystemTime     = 2,
  47.         TimeSourceCount   = 3,
  48.     };
  49.     
  50.     Url();
  51.     
  52.     // parses str
  53.     Url(const std::string& str, CelestiaCore *core);
  54.     // current url of appCore
  55.     Url(CelestiaCore* appCore, UrlType type = Absolute);
  56.     Url(const CelestiaState& appState,
  57.         unsigned int version = CurrentVersion,
  58.         TimeSource _timeSource = UseUrlTime);
  59.     ~Url();
  60.     std::string getAsString() const;
  61.     std::string getName() const;
  62.     void goTo();
  63.     static const unsigned int CurrentVersion;
  64.     static std::string decodeString(const std::string& str);
  65.     static std::string encodeString(const std::string& str);
  66.     
  67. private:
  68.     void initVersion2(std::map<std::string, std::string>& params, const std::string& timeString);
  69.     void initVersion3(std::map<std::string, std::string>& params, const std::string& timeString);
  70.     
  71. private:
  72.     std::string urlStr;
  73.     std::string name;
  74.     std::string modeStr;
  75.     std::string body1;
  76.     std::string body2;
  77.     std::string selectedStr;
  78.     std::string trackedStr;
  79.     CelestiaCore *appCore;
  80.     ObserverFrame ref;
  81.     Selection selected;
  82.     Selection tracked;
  83.     ObserverFrame::CoordinateSystem mode;
  84.     int nbBodies;
  85.     float fieldOfView;
  86.     float timeScale;
  87.     int renderFlags;
  88.     int labelMode;
  89.     bool lightTimeDelay;
  90.     bool pauseState;
  91.     std::map<std::string, std::string> parseUrlParams(const std::string& url) const;
  92.     std::string getCoordSysName(ObserverFrame::CoordinateSystem mode) const;
  93.     std::string getBodyShortName(const std::string& body) const;
  94.     std::string getEncodedObjectName(const Selection& selection);
  95.     bool fromString;
  96.     UrlType type;
  97.     TimeSource timeSource;
  98.     unsigned int version;
  99.     
  100.     void evalName();
  101.     
  102.     // Variables specific to Global Urls
  103.     UniversalCoord coord;
  104.     astro::Date date;
  105.     Quatf orientation;
  106.     
  107.     // Variables specific to Relative Urls
  108.     double distance, longitude, latitude;
  109. };
  110. /*! The CelestiaState class holds the current observer position, orientation,
  111.  *  frame, time, and render settings. It is designed to be serialized as a cel
  112.  *  URL, thus strings are stored for bodies instead of Selections.
  113.  *
  114.  *  Some information is *not* stored in cel URLs, including the current
  115.  *  lists of reference marks and markers. Such lists can be arbitrarily long,
  116.  *  and thus not practical to store in a URL.
  117.  */
  118. class CelestiaState
  119. {
  120. public:
  121.     CelestiaState();
  122.     
  123.     bool loadState(std::map<std::string, std::string>& params);
  124.     void saveState(std::map<std::string, std::string>& params);
  125.     void captureState(CelestiaCore* appCore);
  126.     
  127.     // Observer frame, position, and orientation. For multiview, there needs
  128.     // be one instance of these parameters per view saved.
  129.     ObserverFrame::CoordinateSystem coordSys;
  130.     string refBodyName;
  131.     string targetBodyName;
  132.     string trackedBodyName;
  133.     UniversalCoord observerPosition;
  134.     Quatf observerOrientation;
  135.     float fieldOfView;
  136.     
  137.     // Time parameters
  138.     double tdb;
  139.     float timeScale;
  140.     bool pauseState;
  141.     bool lightTimeDelay;
  142.     
  143.     string selectedBodyName;
  144.     
  145.     int labelMode;
  146.     int renderFlags;
  147. };
  148. #endif