/// <summary> /// Renders constellation borders on the map /// </summary> private void RenderBorders(IMapContext map) { PointF p1, p2; CrdsHorizontal h1, h2; var borders = constellationsCalc.ConstBorders; bool isGround = settings.Get <bool>("Ground"); double coeff = map.DiagonalCoefficient(); Pen penBorder = new Pen(map.GetColor("ColorConstBorders")); foreach (var block in borders) { for (int i = 0; i < block.Count - 1; i++) { h1 = block.ElementAt(i).Horizontal; h2 = block.ElementAt(i + 1).Horizontal; if ((!isGround || h1.Altitude >= 0 || h2.Altitude >= 0) && Angle.Separation(map.Center, h1) < 90 * coeff && Angle.Separation(map.Center, h2) < 90 * coeff) { p1 = map.Project(h1); p2 = map.Project(h2); var points = map.SegmentScreenIntersection(p1, p2); if (points.Length == 2) { map.Graphics.DrawLine(penBorder, points[0], points[1]); } } } } }
public override void Render(IMapContext map) { Graphics g = map.Graphics; var allStars = starsCalc.Stars; bool isGround = settings.Get <bool>("Ground"); if (settings.Get <bool>("ConstLines")) { PointF p1, p2; CrdsHorizontal h1, h2; penConLine.Brush = new SolidBrush(map.GetColor("ColorConstLines")); foreach (var line in sky.ConstellationLines) { h1 = allStars.ElementAt(line.Item1).Horizontal; h2 = allStars.ElementAt(line.Item2).Horizontal; if ((!isGround || h1.Altitude > 0 || h2.Altitude > 0) && Angle.Separation(map.Center, h1) < 90 && Angle.Separation(map.Center, h2) < 90) { p1 = map.Project(h1); p2 = map.Project(h2); var points = map.SegmentScreenIntersection(p1, p2); if (points.Length == 2) { g.DrawLine(penConLine, points[0], points[1]); } } } } if (settings.Get <bool>("Stars") && !(map.Schema == ColorSchema.Day && map.DayLightFactor == 1)) { var stars = allStars.Where(s => s != null && Angle.Separation(map.Center, s.Horizontal) < map.ViewAngle); if (isGround) { stars = stars.Where(s => s.Horizontal.Altitude >= 0); } foreach (var star in stars) { float diam = map.GetPointSize(star.Mag); if ((int)diam > 0) { PointF p = map.Project(star.Horizontal); if (!map.IsOutOfScreen(p)) { if (map.Schema == ColorSchema.White) { g.FillEllipse(Brushes.White, p.X - diam / 2 - 1, p.Y - diam / 2 - 1, diam + 2, diam + 2); } g.FillEllipse(new SolidBrush(GetColor(map, star.Color)), p.X - diam / 2, p.Y - diam / 2, diam, diam); map.AddDrawnObject(star); } } } if (settings.Get <bool>("StarsLabels") && map.ViewAngle <= limitAllNames) { brushStarNames = new SolidBrush(map.GetColor("ColorStarsLabels")); foreach (var star in stars) { float diam = map.GetPointSize(star.Mag); if ((int)diam > 0) { PointF p = map.Project(star.Horizontal); if (!map.IsOutOfScreen(p)) { DrawStarName(map, p, star, diam); } } } } } }