1// 2// Name: Save and restore display state 3// Version: 0.19.1 4// License: Public Domain 5// Authors: Matthew Gates (matthewg42) (Original author) 6// Alexander Wolf (alex-w) 7// Georg Zotti (gzotti) 8// Brian W. Mulligan (astrobit) 9// Description: Provide functions for saving and restoring state (view settings etc.) 10// for use in other scripts via the include feature. A state is 11// associated with some string identifier. This is arbitrary. You can 12// have as many states as you like subject to whatever memory 13// restrictions there are... 14// note - you can pass options to the restoreState function to get it to 15// ignore some parts of the saved state. See below for details. 16// Change Log: 17// 2009-05-09 Matthew Gates (matthewg42) 18// * First version 19// 2010-04-14 Matthew Gates (matthewg42) 20// * save language 21// 2012-02-19 Matthew Gates (matthewg42) 22// * add galactic line states 23// 2012-02-20 Matthew Gates (matthewg42) 24// * remove reference to StelSkyImageMgr.getFlagShow and StelSkyImageMgr.setFlagShow 25// 2012-07-27 Alexander Wolf (alex-w) 26// * add ecliptic j2000 grid state 27// 2014-09-10 Georg Zotti (gzotti) 28// * Update Galactic Plane to Galactic Equator 29// 2019-08-14 Brian W. Mulligan (astrobit) 30// * Fix to work under stellarium 0.19 31// * Add change log, version, and author list to header 32 33// declare a global variable to store saved state 34var savedStates = new Array(); 35 36// call this function with some string ID 37function saveState(stateName) 38{ 39 savedStates[stateName] = new Array(); 40 savedStates[stateName]["SolarSystemFlagPlanets"] = SolarSystem.getFlagPlanets(); 41 savedStates[stateName]["SolarSystemFlagHints"] = SolarSystem.getFlagHints(); 42 savedStates[stateName]["SolarSystemFlagOrbits"] = SolarSystem.getFlagOrbits(); 43 savedStates[stateName]["SolarSystemFlagMoonScale"] = SolarSystem.getFlagMoonScale(); 44 savedStates[stateName]["SolarSystemFlagTrails"] = SolarSystem.getFlagTrails(); 45 savedStates[stateName]["SolarSystemFlagLabels"] = SolarSystem.getFlagLabels(); 46 savedStates[stateName]["SolarSystemLabelsAmount"] = SolarSystem.getLabelsAmount(); 47 savedStates[stateName]["SolarSystemFlagLightTravelTime"] = SolarSystem.getFlagLightTravelTime(); 48 savedStates[stateName]["SolarSystemFlagMoonScale"] = SolarSystem.getFlagMoonScale(); 49 savedStates[stateName]["SolarSystemMoonScale"] = SolarSystem.getMoonScale(); 50 savedStates[stateName]["MeteorMgrZHR"] = SporadicMeteorMgr.getZHR(); 51 savedStates[stateName]["MeteorMgrFlagShow"] = SporadicMeteorMgr.getFlagShow(); 52 savedStates[stateName]["GridLinesMgrFlagAzimuthalGrid"] = GridLinesMgr.getFlagAzimuthalGrid(); 53 savedStates[stateName]["GridLinesMgrFlagEquatorGrid"] = GridLinesMgr.getFlagEquatorGrid(); 54 savedStates[stateName]["GridLinesMgrFlagEquatorLine"] = GridLinesMgr.getFlagEquatorLine(); 55 savedStates[stateName]["GridLinesMgrFlagEclipticLine"] = GridLinesMgr.getFlagEclipticLine(); 56 savedStates[stateName]["GridLinesMgrFlagMeridianLine"] = GridLinesMgr.getFlagMeridianLine(); 57 savedStates[stateName]["GridLinesMgrFlagEquatorJ2000Grid"] = GridLinesMgr.getFlagEquatorJ2000Grid(); 58 savedStates[stateName]["GridLinesMgrFlagEclipticJ2000Grid"] = GridLinesMgr.getFlagEclipticJ2000Grid(); 59 savedStates[stateName]["GridLinesMgrFlagGalacticGrid"] = GridLinesMgr.getFlagGalacticGrid(); 60 savedStates[stateName]["GridLinesMgrFlagGalacticEquatorLine"] = GridLinesMgr.getFlagGalacticEquatorLine(); 61 savedStates[stateName]["ConstellationMgrFlagLines"] = ConstellationMgr.getFlagLines(); 62 savedStates[stateName]["ConstellationMgrFlagLabels"] = ConstellationMgr.getFlagLabels(); 63 savedStates[stateName]["ConstellationMgrFlagBoundaries"] = ConstellationMgr.getFlagBoundaries(); 64 savedStates[stateName]["ConstellationMgrFlagArt"] = ConstellationMgr.getFlagArt(); 65 savedStates[stateName]["ConstellationMgrArtIntensity"] = ConstellationMgr.getArtIntensity(); 66 savedStates[stateName]["ConstellationMgrFlagIsolateSelected"] = ConstellationMgr.getFlagIsolateSelected(); 67 savedStates[stateName]["StarMgrFlagLabels"] = StarMgr.getFlagLabels(); 68 savedStates[stateName]["StarMgrFlagStars"] = StarMgr.getFlagStars(); 69 savedStates[stateName]["StarMgrLabelsAmount"] = StarMgr.getLabelsAmount(); 70 savedStates[stateName]["StarMgrFlagSciNames"] = StarMgr.getFlagSciNames(); 71 savedStates[stateName]["NebulaMgrFlagHints"] = NebulaMgr.getFlagHints(); 72 savedStates[stateName]["NebulaMgrFlagShow"] = NebulaMgr.getFlagShow(); 73// savedStates[stateName]["NebulaMgrFlagDisplayNoTexture"] = NebulaMgr.getFlagDisplayNoTexture(); 74 savedStates[stateName]["NebulaMgrLabelsAmount"] = NebulaMgr.getLabelsAmount(); 75 savedStates[stateName]["NebulaMgrHintsAmount"] = NebulaMgr.getHintsAmount(); 76 savedStates[stateName]["LandscapeMgrFlagCardinalsPoints"] = LandscapeMgr.getFlagCardinalsPoints(); 77 savedStates[stateName]["LandscapeMgrFlagLandscape"] = LandscapeMgr.getFlagLandscape(); 78 savedStates[stateName]["LandscapeMgrFlagAtmosphere"] = LandscapeMgr.getFlagAtmosphere(); 79 savedStates[stateName]["LandscapeMgrFlagFog"] = LandscapeMgr.getFlagFog(); 80 savedStates[stateName]["LandscapeMgrCurrentLandscapeID"] = LandscapeMgr.getCurrentLandscapeID(); 81 //savedStates[stateName]["LandscapeMgrAtmosphereBortleLightPollution"] = LandscapeMgr.getAtmosphereBortleLightPollution(); 82 savedStates[stateName]["StelSkyDrawerRelativeStarScale"] = StelSkyDrawer.getRelativeStarScale(); 83 savedStates[stateName]["StelSkyDrawerAbsoluteStarScale"] = StelSkyDrawer.getAbsoluteStarScale(); 84 savedStates[stateName]["StelSkyDrawerTwinkleAmount"] = StelSkyDrawer.getTwinkleAmount(); 85 savedStates[stateName]["StelSkyDrawerFlagTwinkle"] = StelSkyDrawer.getFlagTwinkle(); 86 //savedStates[stateName]["StelSkyDrawerFlagPointStar"] = StelSkyDrawer.getFlagPointStar(); 87 //savedStates[stateName]["StelSkyDrawerBortleScale"] = StelSkyDrawer.getBortleScale(); 88 savedStates[stateName]["StelSkyDrawerFlagLuminanceAdaptation"] = StelSkyDrawer.getFlagLuminanceAdaptation(); 89 savedStates[stateName]["MountMode"] = core.getMountMode(); 90 savedStates[stateName]["NightMode"] = core.getNightMode(); 91 savedStates[stateName]["ProjectionMode"] = core.getProjectionMode(); 92 savedStates[stateName]["SkyCulture"] = core.getSkyCulture(); 93 savedStates[stateName]["FlagGravityLabels"] = core.getFlagGravityLabels(); 94 savedStates[stateName]["DiskViewport"] = core.getDiskViewport(); 95 savedStates[stateName]["ObserverLocation"] = core.getObserverLocation(); 96 97 savedStates[stateName]["TimeIsNow"] = core.isRealTime(); 98 savedStates[stateName]["StateTime"] = core.getJDay(); 99 savedStates[stateName]["StateTimeRate"] = core.getTimeRate(); 100 savedStates[stateName]["AzimuthAngle"] = core.getViewAzimuthAngle(); 101 savedStates[stateName]["AltitudeAngle"] = core.getViewAltitudeAngle(); 102 savedStates[stateName]["RaAngle"] = core.getViewRaAngle(); 103 savedStates[stateName]["DecAngle"] = core.getViewDecAngle(); 104 105 savedStates[stateName]["AppLanguage"] = core.getAppLanguage(); 106 savedStates[stateName]["SkyLanguage"] = core.getSkyLanguage(); 107 108 core.debug("saveState() - state saved with ID: " + stateName); 109} 110 111// The options parameter is a hash of option values. Supported options: 112// "time": "ignore" do not restore the simulation time and time rate 113// "time": "force" always restore the saved time and time rate 114// "time": "smart" (default) if at saveState, the time was the same as the system 115// time and normal time rate, set this when restore is called. 116// However, if the time rate was not like this, restore 117// the time and time rate as it was when the saveState was called 118// 119// "view": true (default) restore the viewing direction and FOV. Note that this 120// will be the alt/azi direction if the saved mount mode is azimuthal, 121// else it will be the equarotial coordinates 122// "view": false Do not restore the viewing direction and FOV. 123// 124// Examples: 125// restoreState("state1"); // use "smart" time behaviour 126// restoreState("state2", {"time":"ignore"}); // don't restore the time and time rate 127// restoreState("state2", {"time":"force"}); // always restore the time and time rate 128function restoreState(stateName, options) 129{ 130 // prevent type error if there are no options... 131 if (!options) 132 { 133 options = {"a":1}; 134 } 135 136 if (!savedStates[stateName]) 137 { 138 core.debug("restoreState() - WARNING no such saved state named: " + stateName); 139 return; 140 } 141 142 SolarSystem.setFlagPlanets(savedStates[stateName]["SolarSystemFlagPlanets"]); 143 SolarSystem.setFlagHints(savedStates[stateName]["SolarSystemFlagHints"]); 144 SolarSystem.setFlagOrbits(savedStates[stateName]["SolarSystemFlagOrbits"]); 145 SolarSystem.setFlagMoonScale(savedStates[stateName]["SolarSystemFlagMoonScale"]); 146 SolarSystem.setFlagTrails(savedStates[stateName]["SolarSystemFlagTrails"]); 147 SolarSystem.setFlagLabels(savedStates[stateName]["SolarSystemFlagLabels"]); 148 SolarSystem.setLabelsAmount(savedStates[stateName]["SolarSystemLabelsAmount"]); 149 SolarSystem.setFlagLightTravelTime(savedStates[stateName]["SolarSystemFlagLightTravelTime"]); 150 SolarSystem.setFlagMoonScale(savedStates[stateName]["SolarSystemFlagMoonScale"]); 151 SolarSystem.setMoonScale(savedStates[stateName]["SolarSystemMoonScale"]); 152 SporadicMeteorMgr.setZHR(savedStates[stateName]["MeteorMgrZHR"]); 153 SporadicMeteorMgr.setFlagShow(savedStates[stateName]["MeteorMgrFlagShow"]); 154 GridLinesMgr.setFlagAzimuthalGrid(savedStates[stateName]["GridLinesMgrFlagAzimuthalGrid"]); 155 GridLinesMgr.setFlagEquatorGrid(savedStates[stateName]["GridLinesMgrFlagEquatorGrid"]); 156 GridLinesMgr.setFlagEquatorLine(savedStates[stateName]["GridLinesMgrFlagEquatorLine"]); 157 GridLinesMgr.setFlagEclipticLine(savedStates[stateName]["GridLinesMgrFlagEclipticLine"]); 158 GridLinesMgr.setFlagMeridianLine(savedStates[stateName]["GridLinesMgrFlagMeridianLine"]); 159 GridLinesMgr.setFlagEquatorJ2000Grid(savedStates[stateName]["GridLinesMgrFlagEquatorJ2000Grid"]); 160 GridLinesMgr.setFlagEclipticJ2000Grid(savedStates[stateName]["GridLinesMgrFlagEclipticJ2000Grid"]); 161 GridLinesMgr.setFlagGalacticGrid(savedStates[stateName]["GridLinesMgrFlagGalacticGrid"]); 162 GridLinesMgr.setFlagGalacticEquatorLine(savedStates[stateName]["GridLinesMgrFlagGalacticEquatorLine"]); 163 ConstellationMgr.setFlagLines(savedStates[stateName]["ConstellationMgrFlagLines"]); 164 ConstellationMgr.setFlagLabels(savedStates[stateName]["ConstellationMgrFlagLabels"]); 165 ConstellationMgr.setFlagBoundaries(savedStates[stateName]["ConstellationMgrFlagBoundaries"]); 166 ConstellationMgr.setFlagArt(savedStates[stateName]["ConstellationMgrFlagArt"]); 167 ConstellationMgr.setArtIntensity(savedStates[stateName]["ConstellationMgrArtIntensity"]); 168 ConstellationMgr.setFlagIsolateSelected(savedStates[stateName]["ConstellationMgrFlagIsolateSelected"]); 169 StarMgr.setFlagLabels(savedStates[stateName]["StarMgrFlagLabels"]); 170 StarMgr.setFlagStars(savedStates[stateName]["StarMgrFlagStars"]); 171 StarMgr.setLabelsAmount(savedStates[stateName]["StarMgrLabelsAmount"]); 172 StarMgr.setFlagSciNames(savedStates[stateName]["StarMgrFlagSciNames"]); 173 NebulaMgr.setFlagHints(savedStates[stateName]["NebulaMgrFlagHints"]); 174 NebulaMgr.setFlagShow(savedStates[stateName]["NebulaMgrFlagShow"]); 175// NebulaMgr.setFlagDisplayNoTexture(savedStates[stateName]["NebulaMgrFlagDisplayNoTexture"]); 176 NebulaMgr.setLabelsAmount(savedStates[stateName]["NebulaMgrLabelsAmount"]); 177 NebulaMgr.setHintsAmount(savedStates[stateName]["NebulaMgrHintsAmount"]); 178 LandscapeMgr.setFlagCardinalsPoints(savedStates[stateName]["LandscapeMgrFlagCardinalsPoints"]); 179 LandscapeMgr.setFlagLandscape(savedStates[stateName]["LandscapeMgrFlagLandscape"]); 180 LandscapeMgr.setFlagAtmosphere(savedStates[stateName]["LandscapeMgrFlagAtmosphere"]); 181 LandscapeMgr.setFlagFog(savedStates[stateName]["LandscapeMgrFlagFog"]); 182 LandscapeMgr.setCurrentLandscapeID(savedStates[stateName]["LandscapeMgrCurrentLandscapeID"]); 183 //LandscapeMgr.setAtmosphereBortleLightPollution(savedStates[stateName]["LandscapeMgrAtmosphereBortleLightPollution"]); 184 StelSkyDrawer.setRelativeStarScale(savedStates[stateName]["StelSkyDrawerRelativeStarScale"]); 185 StelSkyDrawer.setAbsoluteStarScale(savedStates[stateName]["StelSkyDrawerAbsoluteStarScale"]); 186 StelSkyDrawer.setTwinkleAmount(savedStates[stateName]["StelSkyDrawerTwinkleAmount"]); 187 StelSkyDrawer.setFlagTwinkle(savedStates[stateName]["StelSkyDrawerFlagTwinkle"]); 188 //StelSkyDrawer.setFlagPointStar(savedStates[stateName]["StelSkyDrawerFlagPointStar"]); 189 //StelSkyDrawer.setBortleScale(savedStates[stateName]["StelSkyDrawerBortleScale"]); 190 StelSkyDrawer.setFlagLuminanceAdaptation(savedStates[stateName]["StelSkyDrawerFlagLuminanceAdaptation"]); 191 core.setMountMode(savedStates[stateName]["MountMode"]); 192 core.setNightMode(savedStates[stateName]["NightMode"]); 193 core.setProjectionMode(savedStates[stateName]["ProjectionMode"]); 194 core.setSkyCulture(savedStates[stateName]["SkyCulture"]); 195 core.setFlagGravityLabels(savedStates[stateName]["FlagGravityLabels"]); 196 core.setDiskViewport(savedStates[stateName]["DiskViewport"]); 197 core.setObserverLocation(savedStates[stateName]["ObserverLocation"]); 198 core.setAppLanguage(savedStates[stateName]["AppLanguage"]); 199 core.setSkyLanguage(savedStates[stateName]["SkyLanguage"]); 200 201 // optional restoration options... 202 if (!options["time"]) 203 { 204 options["time"] = "smart"; 205 } 206 207 if (options["time"] == "smart") 208 { 209 if (savedStates[stateName]["TimeIsNow"]) 210 { 211 core.setRealTime(); 212 } 213 else 214 { 215 core.setJDay(savedStates[stateName]["StateTime"]); 216 core.setTimeRate(savedStates[stateName]["StateTimeRate"]); 217 } 218 } 219 else if (options["time"] == "force") 220 { 221 core.setJDay(savedStates[stateName]["StateTime"]); 222 core.setTimeRate(savedStates[stateName]["StateTimeRate"]); 223 } 224 225 if (options["view"]) 226 { 227 if (savedStates[stateName]["MountMode"] == "azimuthal") 228 { 229 core.moveToAltAzi(savedStates[stateName]["AltitudeAngle"], savedStates[stateName]["AzimuthAngle"] , 0); 230 } 231 else 232 { 233 core.moveToRaDec(savedStates[stateName]["RaAngle"], savedStates[stateName]["DecAngle"] , 0); 234 } 235 } 236 237 core.debug("restoreState() - state restored with ID: " + stateName); 238} 239 240