public void GotoTarget(bool noZoom, bool instant, CameraParameters cameraParams, IImageSet studyImageSet, IImageSet backgroundImageSet) { tracking = false; trackingObject = null; targetStudyImageset = studyImageSet; targetBackgroundImageset = backgroundImageSet; if (noZoom) { cameraParams.Zoom = viewCamera.Zoom; cameraParams.Angle = viewCamera.Angle; cameraParams.Rotation = viewCamera.Rotation; } else { if (cameraParams.Zoom == -1) { if (Space) { cameraParams.Zoom = 1.40625; } else { cameraParams.Zoom = 0.09F; } } } if (instant || (Math.Abs(ViewLat - cameraParams.Lat) < .000000000001 && Math.Abs(ViewLong - cameraParams.Lng) < .000000000001 && Math.Abs(ZoomFactor - cameraParams.Zoom) < .000000000001)) { mover = null; viewCamera = targetViewCamera = cameraParams; if (Space && Settings.Active.GalacticMode) { double[] gPoint = Coordinates.J2000toGalactic(viewCamera.RA * 15, viewCamera.Dec); targetAlt = alt = gPoint[1]; targetAz = az = gPoint[0]; } else if (Space && Settings.Active.LocalHorizonMode) { Coordinates currentAltAz = Coordinates.EquitorialToHorizon(Coordinates.FromRaDec(viewCamera.RA, viewCamera.Dec), SpaceTimeController.Location, SpaceTimeController.Now); targetAlt = alt = currentAltAz.Alt; targetAz = az = currentAltAz.Az; } mover_Midpoint(this, new EventArgs()); } else { if (TourPlayer.Playing) { mover = new ViewMoverSlew(this.viewCamera, cameraParams); } else { mover = new ViewMoverSlew(this.viewCamera, cameraParams, 1.2); } mover.Midpoint += new EventHandler(mover_Midpoint); } }
public void UpdateMover(IViewMover mover) { CameraParameters newCam = mover.CurrentPosition; if (viewCamera.Opacity != newCam.Opacity) { if (contextPanel != null) { contextPanel.studyOpacity.Value = (int)newCam.Opacity; } } viewCamera = targetViewCamera = newCam; if (Space && Settings.Active.GalacticMode) { double[] gPoint = Coordinates.J2000toGalactic(newCam.RA * 15, newCam.Dec); targetAlt = alt = gPoint[1]; targetAz = az = gPoint[0]; } else if (Space && Settings.Active.LocalHorizonMode) { Coordinates currentAltAz = Coordinates.EquitorialToHorizon(Coordinates.FromRaDec(newCam.RA, newCam.Dec), SpaceTimeController.Location, SpaceTimeController.Now); targetAlt = alt = currentAltAz.Alt; targetAz = az = currentAltAz.Az; } if (mover.Complete) { targetViewCamera = viewCamera = newCam; Earth3d.MainWindow.Mover = null; //Todo Notify interested parties that move is complete NotifyMoveComplete(); } }
public void GotoTarget(IPlace place, bool noZoom, bool instant, bool trackObject) { if (place == null) { return; } if ((trackObject && SolarSystemMode) ) { if ((place.Classification == Classification.SolarSystem && place.Type != ImageSetType.SolarSystem) || (place.Classification == Classification.Star) || (place.Classification == Classification.Galaxy) && place.Distance > 0) { SolarSystemObjects target = SolarSystemObjects.Undefined; if (place.Classification == Classification.Star || place.Classification == Classification.Galaxy) { target = SolarSystemObjects.Custom; } else { try { if (place.Target != SolarSystemObjects.Undefined) { target = place.Target; } else { target = (SolarSystemObjects)Enum.Parse(typeof(SolarSystemObjects), place.Name, true); } } catch { } } if (target != SolarSystemObjects.Undefined) { trackingObject = place; double jumpTime = 4; if (target == SolarSystemObjects.Custom) { jumpTime = 17; } else { jumpTime += 13 * (101 - Settings.Active.SolarSystemScale) / 100; } if (instant) { jumpTime = 1; } CameraParameters camTo = viewCamera; camTo.TargetReferenceFrame = ""; camTo.Target = target; double zoom = 10; if (target == SolarSystemObjects.Custom) { if (place.Classification == Classification.Galaxy) { zoom = 1404946007758; } else { zoom = 63239.6717 * 100; } // Star or something outside of SS Vector3d vect = Coordinates.RADecTo3d(place.RA, place.Dec, place.Distance); double ecliptic = Coordinates.MeanObliquityOfEcliptic(SpaceTimeController.JNow) / 180.0 * Math.PI; vect.RotateX(ecliptic); camTo.ViewTarget = -vect; } else { camTo.ViewTarget = Planets.GetPlanet3dLocation(target, SpaceTimeController.GetJNowForFutureTime(jumpTime)); switch (target) { case SolarSystemObjects.Sun: zoom = .6; break; case SolarSystemObjects.Mercury: zoom = .0004; break; case SolarSystemObjects.Venus: zoom = .0004; break; case SolarSystemObjects.Mars: zoom = .0004; break; case SolarSystemObjects.Jupiter: zoom = .007; break; case SolarSystemObjects.Saturn: zoom = .007; break; case SolarSystemObjects.Uranus: zoom = .004; break; case SolarSystemObjects.Neptune: zoom = .004; break; case SolarSystemObjects.Pluto: zoom = .0004; break; case SolarSystemObjects.Moon: zoom = .0004; break; case SolarSystemObjects.Io: zoom = .0004; break; case SolarSystemObjects.Europa: zoom = .0004; break; case SolarSystemObjects.Ganymede: zoom = .0004; break; case SolarSystemObjects.Callisto: zoom = .0004; break; case SolarSystemObjects.Earth: zoom = .0004; break; case SolarSystemObjects.Custom: zoom = 10; break; default: break; } zoom = zoom * Settings.Active.SolarSystemScale; } CameraParameters fromParams = viewCamera; if (SolarSystemTrack == SolarSystemObjects.Custom && !string.IsNullOrEmpty(TrackingFrame)) { fromParams = CustomTrackingParams; TrackingFrame = ""; } camTo.Zoom = zoom; Vector3d toVector = camTo.ViewTarget; toVector.Subtract(fromParams.ViewTarget); if (place.Classification == Classification.Star) { toVector = -toVector; } if (toVector.Length() != 0) { Vector2d raDec = toVector.ToRaDec(); if (target == SolarSystemObjects.Custom) { camTo.Lat = -raDec.Y; } else { camTo.Lat = raDec.Y; } camTo.Lng = raDec.X * 15 - 90; } else { camTo.Lat = viewCamera.Lat; camTo.Lng = viewCamera.Lng; } if (target != SolarSystemObjects.Custom) { // replace with planet surface camTo.ViewTarget = Planets.GetPlanetTargetPoint(target, camTo.Lat, camTo.Lng, SpaceTimeController.GetJNowForFutureTime(jumpTime)); } ViewMoverKenBurnsStyle solarMover = new ViewMoverKenBurnsStyle(fromParams, camTo, jumpTime, SpaceTimeController.Now, SpaceTimeController.GetTimeForFutureTime(jumpTime), InterpolationType.EaseInOut); solarMover.FastDirectionMove = true; mover = solarMover; return; } } } Tracking = false; trackingObject = null; CameraParameters camParams = place.CamParams; if (place.Type != CurrentImageSet.DataSetType) { ZoomFactor = TargetZoom = ZoomMax; CameraRotateTarget = CameraRotate = 0; CameraAngleTarget = CameraAngle = 0; viewCamera = place.CamParams; if (place.BackgroundImageSet != null) { FadeInImageSet(GetRealImagesetFromGeneric(place.BackgroundImageSet)); } else { CurrentImageSet = GetDefaultImageset(place.Type, BandPass.Visible); } instant = true; } else if (SolarSystemMode && place.Target != SolarSystemTrack) { ZoomFactor = TargetZoom = ZoomMax; CameraRotateTarget = CameraRotate = 0; CameraAngleTarget = CameraAngle = 0; viewCamera = targetViewCamera = place.CamParams; SolarSystemTrack = place.Target; instant = true; } if (place.Classification == Classification.Constellation) { camParams.Zoom = ZoomMax; GotoTarget(false, instant, camParams, null, null); } else { SolarSystemTrack = place.Target; GotoTarget(noZoom, instant, camParams, place.StudyImageset, place.BackgroundImageSet); if (trackObject) { Tracking = true; TrackingObject = place; } } }