Co-locate the two cockpit-pod projects into a single repository:
- Console/ : TeslaConsole, the net48 WinForms operator console (decompiled
reconstruction) plus its differential + catalog test suite.
- Launcher/ : TeslaLauncher, the net6 pod-side Service + Agent rewrite.
Adds a combined TeslaSuite.sln, root README documenting the shared wire
contract (and its current duplication, the main follow-up), and a root
.gitignore. Histories were not preserved per request; this is a fresh start
from the current working state of both projects.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
141 lines
3.8 KiB
C#
141 lines
3.8 KiB
C#
using System;
|
|
using System.Drawing;
|
|
using System.Drawing.Drawing2D;
|
|
using System.Drawing.Text;
|
|
using System.IO;
|
|
using System.Text;
|
|
|
|
namespace TeslaConsole;
|
|
|
|
public class PlasmaBitmaps
|
|
{
|
|
public const string DefaultFontFamily = "Microsoft Sans Serif";
|
|
|
|
private static bool sEnableCustomBitmaps;
|
|
|
|
public static bool EnableCustomBitmaps
|
|
{
|
|
get
|
|
{
|
|
return sEnableCustomBitmaps;
|
|
}
|
|
set
|
|
{
|
|
sEnableCustomBitmaps = value;
|
|
}
|
|
}
|
|
|
|
public static void GenerateBitmaps(out Bitmap large, out Bitmap small, string str)
|
|
{
|
|
GenerateBitmaps(out large, out small, "Microsoft Sans Serif", str);
|
|
}
|
|
|
|
public static void GenerateBitmaps(out Bitmap large, out Bitmap small, string fontName, string str)
|
|
{
|
|
large = GenerateBitmap(128, 32, fontName, str);
|
|
small = GenerateBitmap(64, 16, fontName, str);
|
|
}
|
|
|
|
public static Bitmap GenerateBitmap(int width, int height, string str)
|
|
{
|
|
return GenerateBitmap(width, height, "Microsoft Sans Serif", str);
|
|
}
|
|
|
|
public static Bitmap GenerateBitmap(int width, int height, string fontName, string str)
|
|
{
|
|
if (sEnableCustomBitmaps)
|
|
{
|
|
string text = Path.Combine(Program.GetCommonAppDataDirectory(), $"Plasma Images\\{str}_{width}x{height}.bmp");
|
|
if (File.Exists(text))
|
|
{
|
|
try
|
|
{
|
|
Bitmap bitmap = (Bitmap)Image.FromFile(text);
|
|
if (bitmap.Width == width && bitmap.Height == height)
|
|
{
|
|
return bitmap;
|
|
}
|
|
bitmap.Dispose();
|
|
}
|
|
catch
|
|
{
|
|
}
|
|
}
|
|
}
|
|
Bitmap bitmap2 = new Bitmap(width, height);
|
|
using Graphics graphics = Graphics.FromImage(bitmap2);
|
|
graphics.SmoothingMode = SmoothingMode.None;
|
|
graphics.CompositingQuality = CompositingQuality.AssumeLinear;
|
|
graphics.InterpolationMode = InterpolationMode.NearestNeighbor;
|
|
graphics.TextRenderingHint = TextRenderingHint.SingleBitPerPixelGridFit;
|
|
graphics.Clear(Color.Black);
|
|
int num = 24;
|
|
while (true)
|
|
{
|
|
using Font font = new Font(fontName, num);
|
|
SizeF sizeF = graphics.MeasureString(str, font);
|
|
if (sizeF.Width <= (float)bitmap2.Width && sizeF.Height <= (float)bitmap2.Height)
|
|
{
|
|
Rectangle rectangle = new Rectangle(0, 0, bitmap2.Width, bitmap2.Height);
|
|
StringFormat stringFormat = new StringFormat();
|
|
stringFormat.Alignment = StringAlignment.Center;
|
|
stringFormat.LineAlignment = StringAlignment.Center;
|
|
graphics.DrawString(str, font, Brushes.White, rectangle, stringFormat);
|
|
return bitmap2;
|
|
}
|
|
num = ((num <= 2) ? (num / 2) : (num - 2));
|
|
}
|
|
}
|
|
|
|
public static void GenerateStrings(out string large, out string small, string str)
|
|
{
|
|
GenerateStrings(out large, out small, "Microsoft Sans Serif", str);
|
|
}
|
|
|
|
public static void GenerateStrings(out string large, out string small, string fontName, string str)
|
|
{
|
|
large = GenerateString(128, 32, fontName, str);
|
|
small = GenerateString(64, 16, fontName, str);
|
|
}
|
|
|
|
public static string GenerateString(int width, int height, string str)
|
|
{
|
|
return GenerateString(width, height, "Microsoft Sans Serif", str);
|
|
}
|
|
|
|
public static string GenerateString(int width, int height, string fontName, string str)
|
|
{
|
|
using Bitmap bitmap = GenerateBitmap(width, height, fontName, str);
|
|
return ConvertBitmap(bitmap);
|
|
}
|
|
|
|
public static string ConvertBitmap(Bitmap bitmap)
|
|
{
|
|
if (bitmap.Width % 8 != 0 || bitmap.Height % 8 != 0)
|
|
{
|
|
throw new ArgumentOutOfRangeException("bitmap");
|
|
}
|
|
StringBuilder stringBuilder = new StringBuilder();
|
|
for (int i = 0; i < bitmap.Height; i++)
|
|
{
|
|
stringBuilder.Append("bitmap=");
|
|
for (int j = 0; j < bitmap.Width / 8; j++)
|
|
{
|
|
byte b = 0;
|
|
for (int k = 0; k < 8; k++)
|
|
{
|
|
if (bitmap.GetPixel(j * 8 + k, i).GetBrightness() >= 0.5f)
|
|
{
|
|
b = (byte)(b | (byte)(128 >> k));
|
|
}
|
|
}
|
|
stringBuilder.Append(b.ToString("X2"));
|
|
}
|
|
stringBuilder.Append("\n");
|
|
}
|
|
stringBuilder.AppendFormat("x={0}\n", bitmap.Width);
|
|
stringBuilder.AppendFormat("y={0}\n", bitmap.Height);
|
|
return stringBuilder.ToString();
|
|
}
|
|
}
|