private static void LoadImageResources()
        {
            if (_hsiBackground == null)
            {
                _hsiBackground = ImageMaskPair.CreateFromFiles(
                    IMAGES_FOLDER_NAME + Path.DirectorySeparatorChar + HSI_BACKGROUND_IMAGE_FILENAME, IMAGES_FOLDER_NAME + Path.DirectorySeparatorChar + HSI_BACKGROUND_MASK_FILENAME);
            }
            if (_hsiBearingToBeaconNeedle == null)
            {
                _hsiBearingToBeaconNeedle = ImageMaskPair.CreateFromFiles(
                    IMAGES_FOLDER_NAME + Path.DirectorySeparatorChar + HSI_BEARING_TO_BEACON_NEEDLE_IMAGE_FILENAME,
                    IMAGES_FOLDER_NAME + Path.DirectorySeparatorChar + HSI_BEARING_TO_BEACON_NEEDLE_MASK_FILENAME);
                _hsiBearingToBeaconNeedle.Use1BitAlpha = true;
            }
            if (_hsiCDIFlag == null)
            {
                _hsiCDIFlag = ImageMaskPair.CreateFromFiles(
                    IMAGES_FOLDER_NAME + Path.DirectorySeparatorChar + HSI_CDI_FLAG_IMAGE_FILENAME, IMAGES_FOLDER_NAME + Path.DirectorySeparatorChar + HSI_CDI_FLAG_MASK_FILENAME);
                _hsiCDIFlag.Use1BitAlpha = true;
            }
            if (_compassRose == null)
            {
                _compassRose = ImageMaskPair.CreateFromFiles(
                    IMAGES_FOLDER_NAME + Path.DirectorySeparatorChar + HSI_COMPASS_ROSE_IMAGE_FILENAME, IMAGES_FOLDER_NAME + Path.DirectorySeparatorChar + HSI_COMPASS_ROSE_MASK_FILENAME);
            }
            if (_hsiCourseDeviationIndicator == null)
            {
                _hsiCourseDeviationIndicator = ImageMaskPair.CreateFromFiles(
                    IMAGES_FOLDER_NAME + Path.DirectorySeparatorChar + HSI_COURSE_DEVIATION_INDICATOR_IMAGE_FILENAME,
                    IMAGES_FOLDER_NAME + Path.DirectorySeparatorChar + HSI_COURSE_DEVIATION_INDICATOR_MASK_FILENAME);
                _hsiCourseDeviationIndicator.Use1BitAlpha = true;
            }
            if (_hsiHeadingBug == null)
            {
                _hsiHeadingBug = ImageMaskPair.CreateFromFiles(
                    IMAGES_FOLDER_NAME + Path.DirectorySeparatorChar + HSI_HEADING_BUG_IMAGE_FILENAME, IMAGES_FOLDER_NAME + Path.DirectorySeparatorChar + HSI_HEADING_BUG_MASK_FILENAME);
                _hsiHeadingBug.Use1BitAlpha = true;
            }
            if (_hsiInnerWheel == null)
            {
                _hsiInnerWheel = ImageMaskPair.CreateFromFiles(
                    IMAGES_FOLDER_NAME + Path.DirectorySeparatorChar + HSI_INNER_WHEEL_IMAGE_FILENAME, IMAGES_FOLDER_NAME + Path.DirectorySeparatorChar + HSI_INNER_WHEEL_MASK_FILENAME);
            }
            if (_airplaneSymbol == null)
            {
                _airplaneSymbol = ImageMaskPair.CreateFromFiles(
                    IMAGES_FOLDER_NAME + Path.DirectorySeparatorChar + HSI_AIRPLANE_SYMBOL_IMAGE_FILENAME, IMAGES_FOLDER_NAME + Path.DirectorySeparatorChar + HSI_AIRPLANE_SYMBOL_MASK_FILENAME);
                _airplaneSymbol.Use1BitAlpha = true;
            }
            if (_hsiRangeFlag == null)
            {
                _hsiRangeFlag = ImageMaskPair.CreateFromFiles(
                    IMAGES_FOLDER_NAME + Path.DirectorySeparatorChar + HSI_RANGE_FLAG_IMAGE_FILENAME, IMAGES_FOLDER_NAME + Path.DirectorySeparatorChar + HSI_RANGE_FLAG_MASK_FILENAME);
                _hsiRangeFlag.Use1BitAlpha = true;
            }
            if (_toFlag == null)
            {
                _toFlag = ImageMaskPair.CreateFromFiles(
                    IMAGES_FOLDER_NAME + Path.DirectorySeparatorChar + HSI_TO_FLAG_IMAGE_FILENAME, IMAGES_FOLDER_NAME + Path.DirectorySeparatorChar + HSI_TO_FLAG_MASK_FILENAME);
                _toFlag.Use1BitAlpha = true;
            }
            if (_fromFlag == null)
            {
                _fromFlag = ImageMaskPair.CreateFromFiles(
                    IMAGES_FOLDER_NAME + Path.DirectorySeparatorChar + HSI_FROM_FLAG_IMAGE_FILENAME, IMAGES_FOLDER_NAME + Path.DirectorySeparatorChar + HSI_FROM_FLAG_MASK_FILENAME);
                _fromFlag.Use1BitAlpha = true;
            }
            if (_hsiOffFlag == null)
            {
                _hsiOffFlag = ImageMaskPair.CreateFromFiles(
                    IMAGES_FOLDER_NAME + Path.DirectorySeparatorChar + HSI_OFF_FLAG_IMAGE_FILENAME, IMAGES_FOLDER_NAME + Path.DirectorySeparatorChar + HSI_OFF_FLAG_MASK_FILENAME);
            }

            if (_rangeFont == null)
            {
                _rangeFont = new FontGraphic(IMAGES_FOLDER_NAME + Path.DirectorySeparatorChar + HSI_RANGE_FONT_FILENAME);
            }
            _imagesLoaded = true;
        }
        internal static void DrawDesiredCourse(Graphics destinationGraphics, ref GraphicsState basicState, InstrumentState instrumentState, FontGraphic rangeFontGraphic)
        {
            GraphicsUtil.RestoreGraphicsState(destinationGraphics, ref basicState);
            var desiredCourseString        = $"{instrumentState.DesiredCourseDegrees:000}";
            var desiredCourseHundreds      = desiredCourseString[0];
            var desiredCourseTens          = desiredCourseString[1];
            var desiredCourseOnes          = desiredCourseString[2];
            var desiredCourseHundredsImage = rangeFontGraphic.GetCharImage(desiredCourseHundreds);
            var desiredCourseTensImage     = rangeFontGraphic.GetCharImage(desiredCourseTens);
            var desiredCourseOnesImage     = rangeFontGraphic.GetCharImage(desiredCourseOnes);

            var       currentX      = 182;
            const int y             = 45;
            const int spacingPixels = -5;

            destinationGraphics.DrawImageFast(desiredCourseHundredsImage, new Point(currentX, y));
            currentX += desiredCourseHundredsImage.Width + spacingPixels;
            destinationGraphics.DrawImageFast(desiredCourseTensImage, new Point(currentX, y));
            currentX += desiredCourseTensImage.Width + spacingPixels;
            destinationGraphics.DrawImageFast(desiredCourseOnesImage, new Point(currentX, y));

            GraphicsUtil.RestoreGraphicsState(destinationGraphics, ref basicState);
        }
Example #3
0
        internal static void DrawRangeToBeacon(Graphics destinationGraphics, ref GraphicsState basicState, InstrumentState instrumentState, FontGraphic rangeFontGraphic)
        {
            GraphicsUtil.RestoreGraphicsState(destinationGraphics, ref basicState);
            var distanceToBeacon = instrumentState.DistanceToBeaconNauticalMiles;

            if (distanceToBeacon > 999.9)
            {
                distanceToBeacon = 999.9f;
            }
            var distanceToBeaconString        = $"{distanceToBeacon:000.0}";
            var distanceToBeaconHundreds      = distanceToBeaconString[0];
            var distanceToBeaconTens          = distanceToBeaconString[1];
            var distanceToBeaconOnes          = distanceToBeaconString[2];
            var distanceToBeaconHundredsImage = rangeFontGraphic.GetCharImage(distanceToBeaconHundreds);
            var distanceToBeaconTensImage     = rangeFontGraphic.GetCharImage(distanceToBeaconTens);
            var distanceToBeaconOnesImage     = rangeFontGraphic.GetCharImage(distanceToBeaconOnes);

            var       currentX      = 29;
            const int y             = 45;
            const int spacingPixels = -5;

            destinationGraphics.DrawImageFast(distanceToBeaconHundredsImage, new Point(currentX, y));
            currentX += distanceToBeaconHundredsImage.Width + spacingPixels;
            destinationGraphics.DrawImageFast(distanceToBeaconTensImage, new Point(currentX, y));
            currentX += distanceToBeaconTensImage.Width + spacingPixels;
            destinationGraphics.DrawImageFast(distanceToBeaconOnesImage, new Point(currentX, y));
            GraphicsUtil.RestoreGraphicsState(destinationGraphics, ref basicState);
        }