175 lines
7.6 KiB
C#
175 lines
7.6 KiB
C#
using Aurora;
|
|
using Aurora.Api;
|
|
using System;
|
|
using System.Windows;
|
|
using System.Windows.Controls;
|
|
using System.Collections.Generic;
|
|
using VisionCommon;
|
|
using VisionLight;
|
|
using VisionCommonUI;
|
|
using VisionCommonUI.Resources;
|
|
|
|
namespace VisionUI.Pattern {
|
|
/// <summary>
|
|
/// 패턴 리스트 뷰
|
|
/// PatternListView.xaml behind code
|
|
/// </summary>
|
|
public partial class PatternListView : UserControl {
|
|
private Logger _Logger = new Logger(typeof(PatternListView).Name);
|
|
private FovInfo _FovInfo;
|
|
private FovRecipe _FovRecipe;
|
|
private ContextMenu _ContextMenu_Root = new ContextMenu();
|
|
|
|
/// <summary>
|
|
/// 생성자
|
|
/// </summary>
|
|
/// <param name="fovInfo">fov 정보</param>
|
|
public PatternListView(FovInfo fovInfo) {
|
|
_FovInfo = fovInfo;
|
|
_FovRecipe = VisionRecipeManager.GetFovRecipe(fovInfo);
|
|
|
|
InitializeComponent();
|
|
AddContextMenu();
|
|
}
|
|
|
|
private void AddContextMenu() {
|
|
AddContextMenu_CopyPattern();
|
|
}
|
|
|
|
private void AddContextMenu_CopyPattern() {
|
|
// Copy Pattern
|
|
var menuItem_Copy = new MenuItem();
|
|
menuItem_Copy.Header = StrTokens.Copy;
|
|
|
|
// Unit
|
|
foreach (UnitInfo unitInfo in VisionRecipeManager.GetUnitInfos()) {
|
|
var menuItem_Unit = new MenuItem() {
|
|
Header = unitInfo.UnitName
|
|
};
|
|
// SubSys
|
|
foreach (SubSysInfo subSysInfo in VisionRecipeManager.GetSubSysInfos(unitInfo)) {
|
|
var menuItem_SubSys = new MenuItem() {
|
|
Header = subSysInfo.SubSysName
|
|
};
|
|
// Fov
|
|
foreach (FovInfo fovInfo in VisionRecipeManager.GetFovInfos(subSysInfo)) {
|
|
if (_FovInfo.Equals(fovInfo)) {
|
|
continue;
|
|
}
|
|
var menuItem_Fov = new MenuItem() {
|
|
Header = fovInfo.FovName,
|
|
CommandParameter = fovInfo
|
|
};
|
|
menuItem_Fov.Click += MenuItem_Fov_Click;
|
|
menuItem_SubSys.Items.Add(menuItem_Fov);
|
|
}
|
|
menuItem_Unit.Items.Add(menuItem_SubSys);
|
|
}
|
|
menuItem_Copy.Items.Add(menuItem_Unit);
|
|
}
|
|
|
|
_ContextMenu_Root.Items.Add(menuItem_Copy);
|
|
lbPatternList.ContextMenu = _ContextMenu_Root;
|
|
}
|
|
|
|
/// <summary>
|
|
/// 현재 선택된 패턴을 다른 FOV로 복사
|
|
/// </summary>
|
|
private void MenuItem_Fov_Click(object sender, RoutedEventArgs e) {
|
|
try {
|
|
var patternId = lbPatternList.SelectedIndex;
|
|
var menuItem_Fov = sender as MenuItem;
|
|
var srcFovInfo = _FovInfo;
|
|
var srcFovRecipe = _FovRecipe;
|
|
var dstFovInfo = menuItem_Fov.CommandParameter as FovInfo;
|
|
var dstFovRecipe = VisionRecipeManager.GetFovRecipe(dstFovInfo);
|
|
|
|
PatternAgentBase srcPatternAgent = null;
|
|
PatternAgentBase dstPatternAgent = null;
|
|
PatternInfo dstPatternInfo = null;
|
|
PatternInfo srcPatternInfo = null;
|
|
|
|
if (VisionSettingManager.VisionSetting.UseCamPattern) {
|
|
srcPatternAgent = CamPatternAgentManager.GetAgent(srcFovRecipe.CamRecipe.CamId);
|
|
srcPatternInfo = srcPatternAgent.GetPatternInfo(srcFovInfo, patternId);
|
|
dstPatternAgent = CamPatternAgentManager.GetAgent(dstFovRecipe.CamRecipe.CamId);
|
|
dstPatternInfo = srcPatternInfo.Clone() as PatternInfo;
|
|
var dstCamPatternInfo = dstPatternInfo as CamPatternInfo;
|
|
dstCamPatternInfo.PatternIndex = new CamPatternIndex(dstFovRecipe.CamRecipe.CamId, patternId);
|
|
}
|
|
else {
|
|
srcPatternAgent = FovPatternAgentManager.GetAgent(srcFovInfo.ToSubSysInfo());
|
|
srcPatternInfo = srcPatternAgent.GetPatternInfo(srcFovInfo, patternId);
|
|
dstPatternAgent = FovPatternAgentManager.GetAgent(dstFovInfo.ToSubSysInfo());
|
|
dstPatternInfo = srcPatternInfo.Clone() as PatternInfo;
|
|
var dstFovPatternInfo = dstPatternInfo as FovPatternInfo;
|
|
dstFovPatternInfo.PatternIndex = new FovPatternIndex(dstFovInfo.ToSubSysInfo(), dstFovInfo.FovId, patternId);
|
|
}
|
|
|
|
var result = MessageBoxResult.None;
|
|
if (dstPatternAgent.IsPatternExist(dstFovInfo, patternId)) {
|
|
result = MessageBoxUtil.ShowMessageBoxQuestion(string.Format(
|
|
StrTokens.MSG_Q_DeleteAndCopyPattern, patternId, dstFovInfo.FovName, dstFovInfo.SubSysName));
|
|
|
|
if (result == MessageBoxResult.Yes) {
|
|
dstPatternAgent.Remove(dstPatternInfo);
|
|
}
|
|
}
|
|
if (result != MessageBoxResult.No) {
|
|
CopyPatterns(srcPatternAgent, dstPatternAgent, srcPatternInfo, dstPatternInfo, dstFovRecipe);
|
|
}
|
|
}
|
|
catch (Exception ex) {
|
|
_Logger.FuncE(ex.Message);
|
|
}
|
|
}
|
|
|
|
private void ResetLightInfo(PatternInfo dstPatternInfo, FovRecipe dstFovRecipe) {
|
|
for (int i = 0; i < dstPatternInfo.LightInfo.LightParams.Count; i++) {
|
|
List<LightConfigInfo> lightConfigInfos = LightHub.Instance.GetLightConfigInfo(dstFovRecipe.CamRecipe.CamId);
|
|
if (lightConfigInfos?.Count > i) {
|
|
LightParam lightParam = dstPatternInfo.LightInfo.LightParams[i];
|
|
if (lightParam.LightId != lightConfigInfos[i].LightId) {
|
|
// 복사될 FOV의 조명 디바이스가 다를 경우, 해당 FOV의 조명 ID를 Set해준다.
|
|
lightParam.LightId = lightConfigInfos[i].LightId;
|
|
lightParam.Ch = lightConfigInfos[i].ChConfig.Ch;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
/// <summary>
|
|
/// 선택된 소스 패턴의 메인/서브 패턴들을 모두 복사한다.
|
|
/// </summary>
|
|
private void CopyPatterns(
|
|
PatternAgentBase srcPatternAgent, PatternAgentBase dstPatternAgent,
|
|
PatternInfo srcPatternInfo, PatternInfo dstPatternInfo,
|
|
FovRecipe dstFovRecipe) {
|
|
|
|
var srcPatternInfos = srcPatternAgent.GetMainSubPatterns(srcPatternInfo);
|
|
for (int i = 0; i < srcPatternInfos.Count; i++) {
|
|
var curSrcPatternInfo = srcPatternInfos[i];
|
|
var curDstPatternInfo = dstPatternInfo.Clone() as PatternInfo;
|
|
curDstPatternInfo.GetPatternIndex().PatternSubId = i;
|
|
|
|
srcPatternAgent.CopyPattern(curSrcPatternInfo, curDstPatternInfo);
|
|
dstPatternAgent.LoadPatterns();
|
|
ResetLightInfo(curDstPatternInfo, dstFovRecipe);
|
|
dstPatternAgent.Save(curDstPatternInfo);
|
|
}
|
|
|
|
MessageBoxUtil.ShowMessageBoxOk(StrTokens.MSG_O_CopyCompleted);
|
|
}
|
|
|
|
private void uc_IsVisibleChanged(object sender, DependencyPropertyChangedEventArgs e) {
|
|
bool isVisible = (bool)e.NewValue;
|
|
if (isVisible == true) {
|
|
UpdateVisionRecipes();
|
|
}
|
|
}
|
|
|
|
private void UpdateVisionRecipes() {
|
|
_FovRecipe = VisionRecipeManager.GetFovRecipe(_FovInfo);
|
|
}
|
|
}
|
|
} |