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

196 lines
6.9 KiB
C#

using MainShell.Common;
using MainShell.Hardware;
using MainShell.Manual.Model;
using MainShell.Process;
using MainShell.ProcessResult;
using MainShell.Recipe.Models;
using MainShell.Recipe.Models.SubstrateParameter;
using MW.WorkFlow;
using Stylet;
using StyletIoC;
using System;
using System.Collections.ObjectModel;
using System.Threading.Tasks;
namespace MainShell.Manual.ViewModel
{
public class SubstrateHeightMeasureDisplayItem : PropertyChangedBase
{
private string _pointName;
public string PointName
{
get { return _pointName; }
set { SetAndNotify(ref _pointName, value); }
}
private int _rowIndex;
public int RowIndex
{
get { return _rowIndex; }
set { SetAndNotify(ref _rowIndex, value); }
}
private int _columnIndex;
public int ColumnIndex
{
get { return _columnIndex; }
set { SetAndNotify(ref _columnIndex, value); }
}
private double _positionX;
public double PositionX
{
get { return _positionX; }
set { SetAndNotify(ref _positionX, value); }
}
private double _positionY;
public double PositionY
{
get { return _positionY; }
set { SetAndNotify(ref _positionY, value); }
}
private double? _heightValue;
public double? HeightValue
{
get { return _heightValue; }
set { SetAndNotify(ref _heightValue, value); }
}
}
public class SubstrateHeightMeasureViewModel : OperateViewModelBase
{
private readonly IEventAggregator _eventAggregator;
private readonly RecipeManager _recipeManager;
private readonly ProcessResultManager _processResultManager;
private readonly SubstrateHeightMeasureService _substrateHeightMeasureService;
private ObservableCollection<SubstrateHeightMeasureDisplayItem> _pointResults = new ObservableCollection<SubstrateHeightMeasureDisplayItem>();
public ObservableCollection<SubstrateHeightMeasureDisplayItem> PointResults
{
get { return _pointResults; }
set { SetAndNotify(ref _pointResults, value); }
}
private string _recipeName;
public string RecipeName
{
get { return _recipeName; }
set { SetAndNotify(ref _recipeName, value); }
}
private int _configuredPointCount;
public int ConfiguredPointCount
{
get { return _configuredPointCount; }
set { SetAndNotify(ref _configuredPointCount, value); }
}
private int _measuredPointCount;
public int MeasuredPointCount
{
get { return _measuredPointCount; }
set { SetAndNotify(ref _measuredPointCount, value); }
}
private SubstrateHeightMeasureMode _currentMeasureMode;
public SubstrateHeightMeasureMode CurrentMeasureMode
{
get { return _currentMeasureMode; }
set { SetAndNotify(ref _currentMeasureMode, value); }
}
public SubstrateHeightMeasureViewModel(
IEventAggregator eventAggregator,
RecipeManager recipeManager,
ProcessResultManager processResultManager,
HardwareManager hardwareManager,
SubstrateHeightMeasureService substrateHeightMeasureService)
{
_eventAggregator = eventAggregator ?? throw new ArgumentNullException(nameof(eventAggregator));
_recipeManager = recipeManager ?? throw new ArgumentNullException(nameof(recipeManager));
_processResultManager = processResultManager ?? throw new ArgumentNullException(nameof(processResultManager));
_substrateHeightMeasureService = substrateHeightMeasureService ?? throw new ArgumentNullException(nameof(substrateHeightMeasureService));
_cameraAxisViewModel = IoC.Get<Common.Display.ViewModel.CameraAxisViewModel>();
_cameraAxisViewModel.CameraAxisDevices.HardwareDeviceList = hardwareManager.CameraAxisManager.TopCameraAxisDevices;
RefreshRecipeSummary();
LoadLastMeasureResult();
}
protected override void OnViewLoaded()
{
base.OnViewLoaded();
RefreshRecipeSummary();
LoadLastMeasureResult();
}
public async Task StartProcess()
{
RefreshRecipeSummary();
WorkflowContext context = new WorkflowContext();
context[WorkflowContextKeys.EventAggregator] = _eventAggregator;
context[WorkflowContextKeys.RecipeManager] = _recipeManager;
context[WorkflowContextKeys.ProcessResultManager] = _processResultManager;
context[WorkflowContextKeys.WorkflowName] = ProcessFlowName.SubstrateHeightMeasureFlow;
WorkflowRunCompletedEventArgs result = await RunManualActivityAsync(
new SubstrateHeightMeasureActivity(ProcessFlowName.SubstrateHeightMeasureFlow, _substrateHeightMeasureService),
context);
if (!IsWorkflowCompleted(result))
{
return;
}
LoadLastMeasureResult();
}
private void RefreshRecipeSummary()
{
SubstrateRecipe currentRecipe = _recipeManager.CurrentSubstrateRecipe;
RecipeName = currentRecipe == null ? string.Empty : currentRecipe.RecipeName;
if (currentRecipe == null || currentRecipe.HeightMeasureSetting == null)
{
ConfiguredPointCount = 0;
CurrentMeasureMode = SubstrateHeightMeasureMode.StandardTeachPosition;
return;
}
ConfiguredPointCount = currentRecipe.HeightMeasureSetting.Points == null ? 0 : currentRecipe.HeightMeasureSetting.Points.Count;
CurrentMeasureMode = currentRecipe.HeightMeasureSetting.Mode;
}
private void LoadLastMeasureResult()
{
PointResults.Clear();
SubstrateHeightMeasureProcessResult processResult = _processResultManager.SubstrateHeightMeasureResult;
if (processResult == null || processResult.PointResults == null)
{
MeasuredPointCount = 0;
return;
}
foreach (SubstrateHeightMeasurePointResult pointResult in processResult.PointResults)
{
PointResults.Add(new SubstrateHeightMeasureDisplayItem
{
PointName = pointResult.PointName,
RowIndex = pointResult.RowIndex,
ColumnIndex = pointResult.ColumnIndex,
PositionX = pointResult.PositionX,
PositionY = pointResult.PositionY,
HeightValue = pointResult.HeightValue
});
}
MeasuredPointCount = PointResults.Count;
}
}
}