#ifndef OPTIONS_H #define OPTIONS_H #include #include #include #include "body.h" class PlanetProperties; class Options { public: static Options* getInstance(); Options(); ~Options(); void parseArgs(int argc, char **argv); const std::vector & ArcFiles() const { return(arcFiles_); }; void ArcSpacing(const double a) { arcSpacing_ = a; }; double ArcSpacing() const { return(arcSpacing_); }; const std::string & Background() const { return(background_); }; double BaseMagnitude() const { return(baseMag_); }; bool CenterSelected() const { return(centerSelected_); }; void CenterX(const double x) { centerX_ = x; }; void CenterY(const double y) { centerY_ = y; }; double CenterX() const { return(centerX_); }; double CenterY() const { return(centerY_); }; const std::string & ConfigFile() const { return(configFile_); }; const unsigned char * Color() const { return(color_); }; const std::string & DateFormat() const { return(dateFormat_); }; int DisplayMode() const { return(displayMode_); }; bool DrawLabel() const { return(drawLabel_); }; bool DrawUTCLabel() const { return(drawUTCLabel_); }; const std::string & DynamicOrigin() const { return(dynamicOrigin_); }; double FieldOfView() const { return(fov_); }; void FieldOfView(const double f) { fov_ = f; }; const std::string & Font() const { return(font_); }; int FontSize() const { return(fontSize_); }; bool Fork() const { return(fork_); }; int FOVMode() const { return(fovMode_); }; double Glare() const { return(glare_); }; double GRSLon() const { return(grsLon_); }; bool GRSSet() const { return(grsSet_); }; unsigned long Hibernate() const { return(hibernate_); }; unsigned long IdleWait() const { return(idleWait_); }; bool InterpolateOriginFile() const { return(interpolateOriginFile_); }; const std::string & JPLFile() const { return(jplFile_); }; int JPEGQuality() const { return(quality_); }; double JulianDay() const { return(julianDay_); }; int LabelMask() const { return(labelMask_); }; int LabelX() const { return(labelX_); }; int LabelY() const { return(labelY_); }; const std::string & LabelString() const { return(labelString_); }; double Latitude() const { return(latitude_); }; void Latitude(const double b) { latitude_ = b; }; bool LightTime() const { return(lightTime_); }; void LocalTime(const double l) { localTime_ = l; }; double LogMagnitudeStep() const { return(logMagStep_); }; double Longitude() const { return(longitude_); }; void Longitude(const double l) { longitude_ = l; }; bool MakeCloudMaps() const { return(makeCloudMaps_); }; const std::vector & MarkerFiles() const { return(markerFiles_); }; const std::string & MarkerBounds() const { return(markerBounds_); }; int North() const { return(north_); }; int NumTimes() const { return(numTimes_); }; void NumTimes(const int n) { numTimes_ = n; }; bool OppositeSide() const { return(oppositeSide_); }; int OriginMode() const; body getOrigin() const { return(origin_); }; const std::string & OriginFile() const { return(originFile_); }; int OriginID() const { return(originID_); }; const std::string & OutputBase() const { return(outputBase_); }; const std::string & OutputExtension() const { return(outputExt_); }; int OutputStartIndex() const { return(outputStartIndex_); }; bool Pango() const { return(pango_); }; body PathRelativeTo() const { return(pathRelativeTo_); }; int PathRelativeToID() const { return(pathRelativeToID_); }; const std::string & PostCommand() const { return(post_command_); }; const std::string & PrevCommand() const { return(prev_command_); }; bool PrintEphemeris() const { return(printEphemeris_); }; int Projection() const { return(projection_); }; void Projection(const int p) { projection_ = p; }; int ProjectionMode() const { return(projectionMode_); }; const std::vector & ProjectionParameters() const { return(projectionParameters_); }; void AddProjectionParameter(double p) { projectionParameters_.push_back(p); }; double Radius() const { return(radius_); }; void Radius(const double r) { radius_ = r; }; double Range() const { return(range_); }; void Range(const double r) { range_ = r; }; double Rotate() const { return(rotate_); }; void Rotate(const double r) { rotate_ = rotate0_ + r; }; const std::vector & getSearchDir() const { return(searchdir); }; bool SaveDesktopFile() const { return(saveDesktopFile_); }; const std::vector & SpiceEphemeris() const { return(spiceEphemeris_); }; const std::vector & SpiceFiles() const { return(spiceFiles_); }; double StarFreq() const { return(starFreq_); }; const std::string & getStarMap() const { return(star_map); }; double SunLat() const { return(sunLat_); }; void SunLat(const double b) { sunLat_ = b; }; double SunLon() const { return(sunLon_); }; void SunLon(const double l) { sunLon_ = l; }; int TargetID() const { return(targetID_); }; int TargetMode() const { return(targetMode_); }; double getTimeWarp() const { return(timewarp); }; time_t TVSec() const { return(tv_sec); }; bool TransPNG() const { return(transpng_); }; bool Transparency() const { return(transparency_); }; std::string TmpDir() const { return(tmpDir_); }; bool UniversalTime() const { return(universalTime_); }; int Verbosity() const { return(verbosity_); }; bool VirtualRoot() const { return(virtual_root); }; int getWait() const { return(wait); }; int getWindowX() const { return(windowX_); }; int getWindowY() const { return(windowY_); }; const std::string & WindowTitle() const { return(windowTitle_); }; unsigned long XID() const { return(xid_); }; bool GeometrySelected() const { return(geometrySelected_); }; int GeometryMask() const { return(geometryMask_); }; int getWidth() const { return((int) width); }; int getHeight() const { return((int) height); }; body getPrimary() const { return(primary_); }; void setTarget(PlanetProperties *planetProperties[]); void setOrigin(PlanetProperties *planetProperties[]); void getOrigin(double &X, double &Y, double &Z); void setOrigin(const double X, const double Y, const double Z); body getTarget() const { return(target_); }; void getTarget(double &X, double &Y, double &Z); void setTarget(const double X, const double Y, const double Z); bool UseCurrentTime() const { return(useCurrentTime_); }; void incrementTime(const double sec); void setTime(const double jd); private: static Options *instance_; std::vector arcFiles_; double arcSpacing_; std::string background_; double baseMag_; // a star of this magnitude has a pixel // brightness of 1 bool centerSelected_; double centerX_, centerY_; unsigned char color_[3]; std::string configFile_; std::string dateFormat_; int displayMode_; bool drawLabel_; bool drawUTCLabel_; std::string dynamicOrigin_; std::string font_; int fontSize_; bool fork_; double fov_; // field of view int fovMode_; int geometryMask_; bool geometrySelected_; double glare_; double grsLon_; bool grsSet_; unsigned long hibernate_; unsigned long idleWait_; bool interpolateOriginFile_; std::string jplFile_; double julianDay_; int labelMask_; int labelX_; int labelY_; std::string labelString_; double latitude_; bool lightTime_; double localTime_; double logMagStep_; // log (base 10) of brightness increase for // each step in magnitude (default 0.4) double longitude_; bool makeCloudMaps_; std::string markerBounds_; std::vector markerFiles_; int north_; // BODY, GALACTIC, ORBIT, or TERRESTRIAL int numTimes_; bool oppositeSide_; body origin_; std::string originFile_; int originID_; // for NAIF or NORAD bodies int originMode_; // BODY, LBR, RANDOM, MAJOR, // SYSTEM, ABOVE, BELOW bool originSet_; // True if origin position has been set std::string outputBase_; std::string outputExt_; int outputStartIndex_; // start numbering output files with this // index double oX_, oY_, oZ_; // heliocentric rectangular coordinates of // the observer bool pango_; body pathRelativeTo_; int pathRelativeToID_; std::string post_command_; // command to run after xplanet renders std::string prev_command_; // command to run before xplanet renders body primary_; bool printEphemeris_; int projection_; // type of map projection int projectionMode_; // type of map projection std::vector projectionParameters_; // extra parameters // used for projection int quality_; // For JPEG images double radius_; // radius of the body, as a fraction of the // height of the display bool random_; bool rangeSpecified_; // if the -range option is used double range_; // distance from the body, in units of its radius double rotate_; // rotate0 plus any increments double rotate0_; // rotation angle specified on command line bool saveDesktopFile_; std::vector spiceEphemeris_; std::vector spiceFiles_; double starFreq_; std::string star_map; double sunLat_, sunLon_; // these aren't options and shouldn't // be here, but it's a convenient way // to put them in the label body target_; int targetID_; // for NAIF or NORAD bodies int targetMode_; // BODY, RANDOM, MAJOR bool targetSet_; // True if target position has been set double timewarp; // multiplication factor for the passage of time std::string tmpDir_; bool transparency_; bool transpng_; double tX_, tY_, tZ_; // heliocentric rectangular coordinates of // the target bool universalTime_; bool useCurrentTime_; int verbosity_; bool virtual_root; int wait; // time (in seconds) to wait between updates unsigned int width, height; int windowX_, windowY_; std::string windowTitle_; unsigned long xid_; std::vector searchdir; // check these directories for files time_t tv_sec; // UNIX time (seconds from 00:00:00 UTC on // January 1, 1970) void showHelp(); }; #endif