Example #1
0
        internal static Vector ConvertAxesToAltAzm(Vector axes)
        {
            Vector altAzm = axes;

            switch (TelescopeHardware.AlignmentMode)
            {
            case AlignmentMode.AltAz:
                break;

            case AlignmentMode.GermanPolar:
                if (axes.Y > 90)
                {
                    axes.X += 180;
                    axes.Y  = 180 - axes.Y;
                }
                if (TelescopeHardware.Latitude < 0)
                {
                    axes.Y = -axes.Y;
                }
                var ra = TelescopeHardware.SiderealTime - axes.X / 15.0;
                altAzm = AstronomyFunctions.CalculateAltAzm(ra, axes.Y, TelescopeHardware.Latitude);
                break;

            case AlignmentMode.Polar:
                ra = TelescopeHardware.SiderealTime - axes.X / 15.0;
                if (TelescopeHardware.Latitude < 0)
                {
                    axes.Y = -axes.Y;
                }
                altAzm = AstronomyFunctions.CalculateAltAzm(ra, axes.Y, TelescopeHardware.Latitude);
                break;
            }
            return(RangeAltAzm(altAzm));
        }
Example #2
0
        /// <summary>
        /// convert a RaDec position to an axes positions.
        /// </summary>
        /// <param name="raDec"></param>
        /// <param name="preserveSop">used for sync</param>
        /// <returns></returns>
        internal static Vector ConvertRaDecToAxes(Vector raDec, bool preserveSop = false)
        {
            Vector axes = new Vector();

            switch (TelescopeHardware.AlignmentMode)
            {
            case AlignmentMode.AltAz:
                axes = AstronomyFunctions.CalculateAltAzm(raDec.X, raDec.Y, TelescopeHardware.Latitude);
                break;

            case AlignmentMode.GermanPolar:
                var sop = TelescopeHardware.SideOfPier;
                axes.X = (TelescopeHardware.SiderealTime - raDec.X) * 15.0;
                axes.Y = (TelescopeHardware.Latitude >= 0) ? raDec.Y : -raDec.Y;
                axes.X = RangeAzm(axes.X);
                if (axes.X > 180.0 || axes.X < 0)
                {
                    // adjust the targets to be through the pole
                    axes.X += 180;
                    axes.Y  = 180 - axes.Y;
                }
                var newsop = (axes.Y <= 90 && axes.Y >= -90) ?
                             PointingState.Normal : PointingState.ThroughThePole;

                if (preserveSop && newsop != sop)
                {
                    if (TelescopeHardware.NoSyncPastMeridian)
                    {
                        throw new InvalidOperationException("Sync is not allowed when the mount has tracked past the meridian");
                    }

                    axes.X -= 180;
                    axes.Y  = 180 - axes.Y;
                }
                break;

            case AlignmentMode.Polar:
                axes.X = (TelescopeHardware.SiderealTime - raDec.X) * 15.0;
                axes.Y = (TelescopeHardware.Latitude >= 0) ? raDec.Y : -raDec.Y;
                break;
            }
            return(RangeAxes(axes));
        }