Files
HawkeyeVision/Plugins/LindtLeerformPlugin/LeerformSettings.cs
EugeneTes 4bd117af47 plugin system docs
custom buttons for plugins
calibration functions for Leeform
2026-03-30 16:15:47 +02:00

66 lines
2.2 KiB
C#

using System.Text.Json;
using System.Text.Json.Serialization;
using Inspectron.Settings;
using LindtLeerformPlugin.Models;
using VisionBuilder.UI.Common;
namespace LindtLeerformPlugin;
public class LeerformSettings : ISettings
{
public string CameraName { get; }
public LeerformSettings(string cameraName)
{
CameraName = cameraName;
}
public CalibrationData? CalibrationData { get; set; }
public int CheckerboardRows { get; set; } = 6;
public int CheckerboardCols { get; set; } = 9;
public string CalibrationImageDirectory { get; set; } = "CalibrationImages";
public void RegisterSettings(InspectronSettings settings)
{
settings.RegisterSimple(this, () => CalibrationData!, $"{CameraName}/Leerform", nameof(CalibrationData));
settings.RegisterSimple(this, () => CheckerboardRows, $"{CameraName}/Leerform", nameof(CheckerboardRows));
settings.RegisterSimple(this, () => CheckerboardCols, $"{CameraName}/Leerform", nameof(CheckerboardCols));
settings.RegisterSimple(this, () => CalibrationImageDirectory, $"{CameraName}/Leerform", nameof(CalibrationImageDirectory));
}
}
public class CalibrationDataConverter : ITypeConverter
{
private static readonly JsonSerializerOptions JsonOptions = new()
{
PropertyNameCaseInsensitive = true,
Converters = { new JsonStringEnumConverter() }
};
public object ConvertFrom(object value)
{
if (value is string json)
{
if (string.IsNullOrWhiteSpace(json) || json == "null")
return null!;
return JsonSerializer.Deserialize<CalibrationData>(json, JsonOptions)
?? throw new InvalidOperationException("Failed to deserialize CalibrationData from JSON.");
}
throw new InvalidOperationException("Value must be a JSON string.");
}
public object ConvertTo(object value, Type destinationType)
{
if (value is CalibrationData data)
{
return JsonSerializer.Serialize(data, JsonOptions);
}
if (value == null)
{
return "null";
}
throw new InvalidOperationException("Value must be a CalibrationData.");
}
}