230 lines
8.1 KiB
C#
230 lines
8.1 KiB
C#
using AuroraUIComponent.Util;
|
|
using System;
|
|
using System.Linq;
|
|
using System.Windows;
|
|
using System.Windows.Controls;
|
|
using System.Windows.Data;
|
|
using System.Windows.Documents;
|
|
using System.Windows.Input;
|
|
using System.Windows.Media;
|
|
using System.Windows.Media.Imaging;
|
|
using System.Windows.Navigation;
|
|
using System.Windows.Shapes;
|
|
using VisionCommon;
|
|
using VisionUI.Pattern;
|
|
using VisionUI;
|
|
using static WeldingCommon.Views.UCManualRCCOperationViewModel;
|
|
using VisionUI.Camera;
|
|
|
|
namespace WeldingCommon.Views
|
|
{
|
|
/// <summary>
|
|
/// Interaction logic for UCManualRCCOperation.xaml
|
|
/// </summary>
|
|
public partial class UCManualRCCOperation : UserControl
|
|
{
|
|
private UCManualRCCOperationViewModel _ViewModel;
|
|
|
|
private System.Windows.Point _StartPoint;
|
|
private System.Windows.Point _OriginPoint;
|
|
private double _InitialScaleX;
|
|
private double _InitialScaleY;
|
|
private FovInfo _FovInfo;
|
|
private UserControl _CameraView;
|
|
|
|
|
|
public UCManualRCCOperation(UCManualRCCOperationViewModel viewModel)
|
|
{
|
|
InitializeComponent();
|
|
|
|
_ViewModel = viewModel;
|
|
DataContext = _ViewModel;
|
|
|
|
ImageControl.MouseWheel += ImageCanvas_MouseWheel;
|
|
ImageControl.MouseLeftButtonDown += ImageCanvas_MouseLeftButtonDown;
|
|
ImageControl.MouseLeftButtonUp += ImageCanvas_MouseLeftButtonUp;
|
|
ImageControl.MouseMove += ImageCanvas_MouseMove;
|
|
|
|
_FovInfo = VisionRecipeManager.GetFovInfos().FirstOrDefault();
|
|
|
|
CreateRCCCameraView();
|
|
// Store the initial scale of the image
|
|
this.Loaded += (s, e) => {
|
|
var transformGroup = (TransformGroup)ImageControl.RenderTransform;
|
|
var scaleTransform = (ScaleTransform)transformGroup.Children[0];
|
|
_InitialScaleX = scaleTransform.ScaleX;
|
|
_InitialScaleY = scaleTransform.ScaleY;
|
|
};
|
|
}
|
|
|
|
private void CreateRCCCameraView()
|
|
{
|
|
if (gridRCCCameraView.Children.Count == 0)
|
|
{
|
|
var fovInfo = VisionRecipeManager.GetFovInfos().FirstOrDefault();
|
|
if (fovInfo != null)
|
|
{
|
|
// 패턴을 찾는 공정이 있으므로 eDisplayType을 반드시 Pattern으로 해야 한다.
|
|
_CameraView = IpViewManager.CreateCameraView(fovInfo, eDisplayType.Pattern);
|
|
gridRCCCameraView.Children.Add(_CameraView);
|
|
}
|
|
}
|
|
}
|
|
private void ImageCanvas_MouseWheel(object sender, MouseWheelEventArgs e)
|
|
{
|
|
var position = e.GetPosition(ImageControl);
|
|
var transformGroup = (TransformGroup)ImageControl.RenderTransform;
|
|
var scaleTransform = (ScaleTransform)transformGroup.Children[0];
|
|
var translateTransform = (TranslateTransform)transformGroup.Children[1];
|
|
|
|
double zoom = e.Delta > 0 ? 0.5 : -0.5;
|
|
double newScaleX = scaleTransform.ScaleX + zoom;
|
|
double newScaleY = scaleTransform.ScaleY + zoom;
|
|
|
|
// Ensure the new scale is not smaller than the initial scale
|
|
if (newScaleX < _InitialScaleX || newScaleY < _InitialScaleY)
|
|
{
|
|
newScaleX = _InitialScaleX;
|
|
newScaleY = _InitialScaleY;
|
|
}
|
|
|
|
// Calculate the new position of the image to keep the zoom centered on the mouse pointer
|
|
double offsetX = position.X - (position.X * newScaleX / scaleTransform.ScaleX);
|
|
double offsetY = position.Y - (position.Y * newScaleY / scaleTransform.ScaleY);
|
|
|
|
scaleTransform.ScaleX = newScaleX;
|
|
scaleTransform.ScaleY = newScaleY;
|
|
|
|
translateTransform.X -= offsetX;
|
|
translateTransform.Y -= offsetY;
|
|
}
|
|
|
|
private void ImageCanvas_MouseLeftButtonDown(object sender, MouseButtonEventArgs e)
|
|
{
|
|
if (e.ButtonState == MouseButtonState.Pressed)
|
|
{
|
|
_StartPoint = e.GetPosition(this);
|
|
_OriginPoint = new System.Windows.Point(ImageTranslateTransform.X, ImageTranslateTransform.Y);
|
|
ImageControl.Cursor = Cursors.Hand;
|
|
ImageControl.CaptureMouse();
|
|
}
|
|
}
|
|
|
|
private void ImageCanvas_MouseLeftButtonUp(object sender, MouseButtonEventArgs e)
|
|
{
|
|
ImageControl.ReleaseMouseCapture();
|
|
ImageControl.Cursor = Cursors.Arrow;
|
|
}
|
|
|
|
private void ImageCanvas_MouseMove(object sender, MouseEventArgs e)
|
|
{
|
|
if (ImageControl.IsMouseCaptured)
|
|
{
|
|
Vector v = _StartPoint - e.GetPosition(this);
|
|
ImageTranslateTransform.X = _OriginPoint.X - v.X;
|
|
ImageTranslateTransform.Y = _OriginPoint.Y - v.Y;
|
|
}
|
|
}
|
|
|
|
#region Grid ContourCorrectionInfoList
|
|
private void PasteCommand_Executed_ContourCorrectionInfoList(object sender, ExecutedRoutedEventArgs e)
|
|
{
|
|
//if (GridEditorContourCorrectionInfoList.PasteFromClipboard(null)) {
|
|
// GridEditorContourCorrectionInfoList.CommitEdit();
|
|
// GridEditorContourCorrectionInfoList.Items.Refresh();
|
|
//}
|
|
}
|
|
|
|
|
|
private void UserControl_IsVisibleChanged(object sender, DependencyPropertyChangedEventArgs e)
|
|
{
|
|
bool isVisible = (bool)e.NewValue;
|
|
if (isVisible == true)
|
|
{
|
|
CreatePatternListView();
|
|
}
|
|
else
|
|
{
|
|
CameraUcManager.Instance.StopLiveAll();
|
|
Dispose();
|
|
}
|
|
}
|
|
|
|
private void Dispose()
|
|
{
|
|
foreach (var child in gridPatternListView.Children)
|
|
{
|
|
if (child is PatternListView patternListView)
|
|
{
|
|
patternListView = null;
|
|
}
|
|
}
|
|
gridPatternListView.Children.Clear();
|
|
}
|
|
private void GridEditorContourCorrectionInfoList_SelectedCellsChanged(object sender, SelectedCellsChangedEventArgs e)
|
|
{
|
|
if (_ViewModel != null)
|
|
{
|
|
foreach (var item in e.RemovedCells)
|
|
{
|
|
if (item.Item is ContourCorrectionInfo)
|
|
{
|
|
_ViewModel.SelectedContourCorrectionInfoList.Remove(item.Item as ContourCorrectionInfo);
|
|
}
|
|
}
|
|
foreach (var item in e.AddedCells)
|
|
{
|
|
if (item.Item is ContourCorrectionInfo)
|
|
{
|
|
var newItem = item.Item as ContourCorrectionInfo;
|
|
if (!_ViewModel.SelectedContourCorrectionInfoList.Contains(newItem))
|
|
{
|
|
_ViewModel.SelectedContourCorrectionInfoList.Add(newItem);
|
|
}
|
|
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
private void GridEditorContourCorrectionInfoList_IsVisibleChanged(object sender, DependencyPropertyChangedEventArgs e)
|
|
{
|
|
if (!IsVisible)
|
|
{
|
|
_ViewModel.SelectedContourCorrectionInfoList.Clear();
|
|
//GridEditorContourCorrectionInfoList.UnselectAllCells();
|
|
}
|
|
else
|
|
{
|
|
|
|
}
|
|
}
|
|
|
|
private void CreatePatternListView()
|
|
{
|
|
var patterrnListView = new PatternListView(_FovInfo);
|
|
var patternSettingViewModel = IpViewManager.CreatePatternListViewModel(_FovInfo, _CameraView);
|
|
|
|
patterrnListView.DataContext = patternSettingViewModel;
|
|
gridPatternListView.Children.Add(patterrnListView);
|
|
}
|
|
private void GridEditorContourCorrectionInfoList_KeyDown(object sender, KeyEventArgs e)
|
|
{
|
|
if (e.Key == Key.Escape)
|
|
{
|
|
if (sender is DataGrid dg)
|
|
{
|
|
dg.SelectedItem = null;
|
|
}
|
|
if (sender is System.Windows.Controls.ListBox lb)
|
|
{
|
|
lb.SelectedItem = null;
|
|
}
|
|
}
|
|
}
|
|
#endregion
|
|
|
|
|
|
}
|
|
}
|