示例#1
0
        public void CalculatePoints(ViewportFoV viewport)
        {
            this.currentViewport = viewport;
            DetermineStepSizes();

            RAPoints.Clear();
            DecPoints.Clear();

            var raMin = nfmod(viewport.CalcRAMin - viewport.CalcRAMin % currentRAStep - currentRAStep, 360);
            var raMax = nfmod(viewport.CalcRAMax - viewport.CalcRAMax % currentRAStep + currentRAStep, 360);

            if (viewport.HFoVDeg == 360)
            {
                raMin = 0;
                raMax = 360 - currentRAStep;
            }

            if (raMin > raMax)
            {
                for (double ra = 0; ra <= raMax; ra += currentRAStep)
                {
                    CalculateRAPoints(ra);
                }
                for (double ra = raMin; ra < 360; ra += currentRAStep)
                {
                    CalculateRAPoints(ra);
                }
            }
            else
            {
                for (double ra = raMin; ra <= raMax; ra += currentRAStep)
                {
                    CalculateRAPoints(ra);
                }
            }

            var currentMinDec = Math.Max(-MAXDEC, Math.Min(viewport.CalcTopDec, viewport.CalcBottomDec));
            var currentMaxDec = Math.Min(MAXDEC, Math.Max(viewport.CalcTopDec, viewport.CalcBottomDec));

            if (currentMaxDec > 0)
            {
                var start = Math.Max(0, Math.Max(0, currentMinDec) % currentDecStep - currentDecStep);
                for (double dec = start; dec <= currentMaxDec; dec += currentDecStep)
                {
                    CalculateDecPoints(dec);
                }
            }

            if (currentMinDec < 0)
            {
                var start = Math.Min(0, Math.Min(0, currentMinDec) % currentDecStep + currentDecStep);
                for (double dec = start; dec >= currentMinDec; dec -= currentDecStep)
                {
                    CalculateDecPoints(dec);
                }
            }
        }
示例#2
0
        public void CalculatePoints(ViewportFoV viewport)
        {
            // calculate the lines based on fov height and current dec to avoid projection issues
            // atan gnomoric projection cannot project properly over 90deg, it will result in the same results as prior
            // and dec lines will overlap each other

            var(raStep, decStep, raStart, raStop, decStart, decStop) = CalculateStepsAndStartStopValues(viewport);

            var pointsByDecDict = new Dictionary <double, FrameLine>();

            // if raStep is 30 and decStep is 1 just
            bool raIsClosed = RoundToHigherValue(viewport.AbsCalcTopDec, decStep) >= MAXDEC;

            for (double ra = Math.Min(raStart, raStop);
                 ra <= Math.Max(raStop, raStart);
                 ra += raStep)
            {
                List <PointF> raPointCollection = new List <PointF>();

                for (double dec = Math.Min(decStart, decStop);
                     dec <= Math.Max(decStart, decStop);
                     dec += decStep)
                {
                    var point  = new Coordinates(ra, dec, Epoch.J2000, Coordinates.RAType.Degrees).XYProjection(viewport);
                    var pointf = new PointF((float)point.X, (float)point.Y);
                    if (!pointsByDecDict.ContainsKey(dec))
                    {
                        pointsByDecDict.Add(dec, new FrameLine()
                        {
                            Closed = raIsClosed, Collection = new List <PointF> {
                                pointf
                            }, StrokeThickness = dec == 0 ? 3 : 1
                        });
                    }
                    else
                    {
                        pointsByDecDict[dec].Collection.Add(pointf);
                    }

                    raPointCollection.Add(pointf);
                }

                // those are the vertical lines
                RAPoints.Add(new FrameLine {
                    StrokeThickness = (ra == 0 || ra == 180) ? 3 : 1,
                    Closed          = false,
                    Collection      = raPointCollection
                });
            }

            // those are actually the circles
            foreach (KeyValuePair <double, FrameLine> item in pointsByDecDict)
            {
                DecPoints.Add(item.Value);
            }
        }
示例#3
0
        /// <summary>
        /// Calculate the lines spanning from pole to pole
        /// </summary>
        /// <param name="viewport"></param>
        /// <param name="ra"></param>
        private void CalculateRAPoints(double ra)
        {
            var         list             = new List <PointF>();
            var         thickness        = 1;
            Coordinates prevCoordinate   = null;
            bool        atLeastOneInside = false;

            foreach (var coordinate in raCoordinateMatrix[ra])
            {
                if (currentViewport.ContainsCoordinates(coordinate))
                {
                    atLeastOneInside = true;
                    if (prevCoordinate != null)
                    {
                        list.Add(Project(prevCoordinate));
                        prevCoordinate = null;
                    }

                    if (coordinate.RADegrees == 0 || coordinate.RADegrees == 180)
                    {
                        thickness = 3;
                    }
                    list.Add(Project(coordinate));
                }
                else
                {
                    if (atLeastOneInside)
                    {
                        list.Add(Project(coordinate));
                        break;
                    }
                    else
                    {
                        prevCoordinate = coordinate;
                    }
                }
            }
            RAPoints.Add(new FrameLine()
            {
                Collection = list, StrokeThickness = thickness, Closed = false, Angle = Angle.ByDegree(ra)
            });
        }