MCPcopy Create free account
hub / github.com/CruiserOne/Astrolog / FBmpDrawMap

Function FBmpDrawMap

xdevice.cpp:671–883  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

669// world in the appropriate projection for various Astrolog charts.
670
671flag FBmpDrawMap()
672{
673 Bitmap *bmp = &gi.bmp;
674 int nScl = 1, yWin2, xc, yc, zc, x1, x2, y1, y2, xi, yi, n, n2;
675 real deg = Mod(rDegMax - gs.rRot), lonS, latS, rxc, ryc, rzc,
676 lon, lat, lat0, rT, rLen, sint, cost, sina, cosa;
677 KV kv;
678 flag fDoEclipse = fFalse;
679
680 // Do nothing if not drawing bitmaps, or if the Earth bitmap fails to load.
681 if (!gi.fBmp || (gi.fFile && gs.ft != ftBmp))
682 return fFalse;
683 if (gi.bmpWorld.rgb == NULL && !FLoadBmp(BITMAP_EARTH, &gi.bmpWorld, fFalse))
684 return fFalse;
685 yWin2 = gs.yWin;
686 if (gs.fText && fMap)
687 yWin2 -= (yFont2*gi.nScaleText + 2)*gi.nScaleT;
688#ifdef WINANY
689 if (!gi.fFile) {
690 if (!FAllocateBmp(&wi.bmpWin, gs.xWin, yWin2))
691 return fFalse;
692 bmp = &wi.bmpWin;
693 }
694#endif
695 if (gs.fMollweide && us.fEclipse &&
696 NCheckEclipseSolar(oEar, oMoo, oSun, NULL) > etNone)
697 fDoEclipse = fTrue;
698
699 // Compute center coordinates and horizontal map dimensions.
700 xc = (gs.xWin >> 1) - !FOdd(gs.xWin); yc = (gs.yWin >> 1) - !FOdd(gs.yWin);
701 zc = Max(xc, yc);
702 rxc = (real)xc; ryc = (real)yc; rzc = (real)zc;
703 x1 = (int)((real)gi.bmpWorld.x * deg / rDegMax);
704 x2 = (int)((real)gs.xWin * deg / rDegMax);
705
706 // Draw map on a -XW rectangular world map.
707 if (gi.nMode == gAstroGraph || (gi.nMode == gWorldMap && !gs.fMollweide)) {
708 if (x1 == 0 || x2 == 0)
709 BmpCopyBlock(&gi.bmpWorld, 0, 0, gi.bmpWorld.x-1, gi.bmpWorld.y-1,
710 bmp, 0, 0, gs.xWin-1, yWin2-1);
711 else {
712 BmpCopyBlock(&gi.bmpWorld, 0, 0, x1-1, gi.bmpWorld.y-1,
713 bmp, gs.xWin-x2-1, 0, gs.xWin-1, yWin2-1);
714 BmpCopyBlock(&gi.bmpWorld, x1, 0, gi.bmpWorld.x-1, gi.bmpWorld.y-1,
715 bmp, 0, 0, gs.xWin-x2, yWin2-1);
716 }
717
718 // Draw map on a -XW0 Mollweide projection world map.
719 } else if (gi.nMode == gWorldMap && gs.fMollweide) {
720 if (!FBmpDrawBack(bmp))
721 BmpSetAll(bmp, KvFromKi(gi.kiOff));
722 for (y2 = 0; y2 < yWin2; y2++) {
723 y1 = y2 * gi.bmpWorld.y / yWin2;
724 rT = RMollweide((real)y2 * rDegHalf / (real)yWin2 - rDegQuad);
725 n = (gs.xWin - (int)(rT * (real)gs.xWin / rDegHalf)) >> 1;
726 if (x1 == 0 || x2 == 0)
727 BmpCopyBlock(&gi.bmpWorld, 0, y1, gi.bmpWorld.x-1, y1,
728 bmp, n, y2, gs.xWin-1-n, y2);

Callers 1

xcharts0.cppFile · 0.85

Calls 14

ModFunction · 0.85
FLoadBmpFunction · 0.85
FAllocateBmpFunction · 0.85
NCheckEclipseSolarFunction · 0.85
BmpCopyBlockFunction · 0.85
FBmpDrawBackFunction · 0.85
BmpSetAllFunction · 0.85
_GetXYFunction · 0.85
BmpDarkenKvFunction · 0.85
BmpSetXYFunction · 0.85
CoorXformFastFunction · 0.85
SwissHouseFunction · 0.85

Tested by

no test coverage detected