Files
Shi.Ji e31d3560bb 添加 MX-PD-盘古 项目文件
将 MX-PD-盘古 - new 目录下的所有文件添加到主仓库
2026-05-18 11:43:09 +08:00

85 lines
2.6 KiB
C#
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
using MainShell.Common;
using System;
using System.Collections.Generic;
using System.Windows;
namespace MainShell.Resources.CustomControl
{
/// <summary>
/// 芯片Map的数据模型用于MVVM绑定
/// </summary>
public class DieMapModel
{
public int Rows { get; private set; }
public int Columns { get; private set; }
public Point[,] Coordinates { get; private set; }
public DieState[,] States { get; private set; }
public event EventHandler MapInitialized;
public event EventHandler<(int Row, int Col, DieState State)> DieStateChanged;
public event EventHandler<IEnumerable<(int Row, int Col, DieState State)>> DieStatesChanged;
/// <summary>
/// 初始化Map图大小和坐标
/// </summary>
public void Initialize(int rows, int columns, Point[,] coordinates = null)
{
Rows = rows;
Columns = columns;
Coordinates = coordinates;
States = new DieState[rows, columns];
// 默认全部设置为NotExist或者根据需要设置
for (int r = 0; r < rows; r++)
{
for (int c = 0; c < columns; c++)
{
States[r, c] = DieState.Available;
}
}
MapInitialized?.Invoke(this, EventArgs.Empty);
}
/// <summary>
/// 更新单个芯片状态
/// </summary>
public void SetDieState(int row, int col, DieState state)
{
if (States != null && row >= 0 && row < Rows && col >= 0 && col < Columns)
{
if (States[row, col] != state)
{
States[row, col] = state;
DieStateChanged?.Invoke(this, (row, col, state));
}
}
}
/// <summary>
/// 批量更新芯片状态
/// </summary>
public void SetDieStates(IEnumerable<(int row, int col, DieState state)> updates)
{
if (States == null) return;
bool changed = false;
foreach (var update in updates)
{
if (update.row >= 0 && update.row < Rows && update.col >= 0 && update.col < Columns)
{
if (States[update.row, update.col] != update.state)
{
States[update.row, update.col] = update.state;
changed = true;
}
}
}
if (changed)
{
DieStatesChanged?.Invoke(this, updates);
}
}
}
}