Files
XplorePlane/XP.ImageProcessing.RoiControl/Models/ROIShape.cs
T
2026-04-14 17:12:31 +08:00

84 lines
2.2 KiB
C#

using System;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.ComponentModel;
using System.Runtime.CompilerServices;
using System.Windows;
namespace XP.ImageProcessing.RoiControl.Models
{
/// <summary>
/// ROI形状类型
/// </summary>
public enum ROIType
{
Polygon
}
/// <summary>
/// ROI基类
/// </summary>
public abstract class ROIShape : INotifyPropertyChanged
{
private bool _isSelected;
private string _id = Guid.NewGuid().ToString();
private string _color = "Red";
public string Id
{
get => _id;
set { _id = value; OnPropertyChanged(); }
}
public bool IsSelected
{
get => _isSelected;
set { _isSelected = value; OnPropertyChanged(); }
}
public string Color
{
get => _color;
set { _color = value; OnPropertyChanged(); }
}
public abstract ROIType ROIType { get; }
public event PropertyChangedEventHandler? PropertyChanged;
public void OnPropertyChanged([CallerMemberName] string? propertyName = null)
{
PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
}
}
/// <summary>
/// 多边形ROI
/// </summary>
public class PolygonROI : ROIShape
{
private ObservableCollection<Point> _points = new ObservableCollection<Point>();
public override ROIType ROIType => ROIType.Polygon;
public ObservableCollection<Point> Points
{
get => _points;
set { _points = value; OnPropertyChanged(); }
}
/// <summary>
/// 用于JSON序列化的Points列表(不参与UI绑定)
/// </summary>
[System.Text.Json.Serialization.JsonPropertyName("PointsList")]
public List<Point> PointsList
{
get => new List<Point>(_points);
set
{
_points = new ObservableCollection<Point>(value ?? new List<Point>());
OnPropertyChanged(nameof(Points));
}
}
}
}