2026-06-05 13:44:39 +09:00

102 lines
4.0 KiB
C#

using Aurora;
using Aurora.Api;
using Aurora.View;
using VisionCommon;
using MilPattern;
using System;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Linq;
using System.Reactive.Linq;
using System.Windows;
using System.Windows.Input;
using VisionSequence.Pattern;
using VisionCommonUI;
using System.Windows.Controls;
using VisionCommonUI.Resources;
namespace MilUI {
public class FovPatternListViewModel : PatternListViewModelBase {
private SubSysInfo _SubSysInfo;
private FovInfo _FovInfo;
private FovRecipe _FovRecipe;
private CameraView _CameraView;
private readonly Logger _logger = new Logger("PatternListVM");
public FovPatternListViewModel(
FovInfo fovInfo, CameraView cameraView) : base(fovInfo, PatternConstants.FOV_PATTERN_COUNT) {
_SubSysInfo = fovInfo.ToSubSysInfo();
_FovInfo = fovInfo;
_FovRecipe = VisionRecipeManager.GetFovRecipe(fovInfo);
_CameraView = cameraView;
_patternAgent = FovPatternAgentManager.GetAgent(fovInfo.ToSubSysInfo());
InitPatternList(0);
}
public override PatternInfo CreateDefaultPatternInfo(int patternId) {
return new FovPatternInfo() {
PatternIndex = new FovPatternIndex(_FovInfo, _FovRecipe.FovName, patternId),
PatternType = ePatternType.None,
MilSystemId = FovPatternAgent.GetMilSystemId(_FovRecipe.CamRecipe.CamId),
LightInfo = GetDefaultLightInfo()
};
}
public override void StartGrabFindSeq(PatternInfo patternInfo) {
var manualFixtureProcSeq = ManualGrabFindSeqManager.GetSeq(_FovInfo);
if (manualFixtureProcSeq == null) {
_logger.FuncE("manualFixtureProcSeq is null.");
}
else if (manualFixtureProcSeq.RunState == SequenceRunState.Running) {
_logger.FuncE("manualFixtureProcSeq is running.");
}
else if (manualFixtureProcSeq.RunState == SequenceRunState.Idle) {
GrabFindSeqUtil.Clear(_SubSysInfo);
var fixtureSeqParam = new GrabFindProcSeqParams(
_FovInfo, patternInfo, eDisplayType.Pattern, seqMode: eSeqMode.Manual);
manualFixtureProcSeq.Start(fixtureSeqParam);
}
else {
_logger.FuncE("manualFixtureProcSeq is not idle.");
}
}
public override void StartFindSeq(PatternInfo patternInfo) {
var manualFindSeq = VisionEnv.AuroraEnv.SequenceEntry[VisionKeys.ManualFindSeqKey];
if (manualFindSeq != null && manualFindSeq.RunState == SequenceRunState.Idle) {
var CameraDisplay = _CameraView.GetDisplay();
CameraDisplay.ClearMeasureGraphics();
var image = CameraDisplay.GetImage();
if (image == null) {
MessageBoxUtil.ShowMessageBoxError(StrTokens.MSG_E_ImageNotReady);
return;
}
var findSeqParam = new FindSeqParams(
image, _FovInfo, patternInfo, eDisplayType.Pattern, seqMode: eSeqMode.Manual);
manualFindSeq.Start(findSeqParam);
}
}
public override void RegisterPatternWindow() {
_window = new RegisterPatternWindow(_patternAgent, Patterns[SelectedPatternIndex].Clone() as PatternInfo);
}
public override void CreatePatternSettingWindow() {
_window = CreatePatternSettingWindow(
_patternAgent, Patterns[SelectedPatternIndex].Clone() as PatternInfo, _CameraView.GetDisplay());
}
private Window CreatePatternSettingWindow(
PatternAgentBase patternAgent, PatternInfo patternInfo, CameraDisplay milCameraDisplay) {
return PatternViewUtil.CreatePatternSettingWindow(
patternAgent, Patterns[SelectedPatternIndex].Clone() as PatternInfo, milCameraDisplay, _FovInfo);
}
}
}