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); }
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); }