181 lines
6.7 KiB
C#
181 lines
6.7 KiB
C#
using Aurora;
|
|
using System;
|
|
using System.Collections.Generic;
|
|
using System.Linq;
|
|
using System.Text;
|
|
using System.Threading.Tasks;
|
|
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.Shapes;
|
|
using VisionCommon;
|
|
using VisionCommonUI;
|
|
using VisionUI;
|
|
|
|
namespace WeldingCommon.Views
|
|
{
|
|
/// <summary>
|
|
/// Interaction logic for WDSelectScoutField.xaml
|
|
/// </summary>
|
|
public partial class WDSelectScoutField : Window
|
|
{
|
|
public WDSelectScoutField(IAuroraEnvironment aurora)
|
|
{
|
|
InitializeComponent();
|
|
|
|
var viewmodel = new WDSelectScoutFieldViewModel(aurora);
|
|
DataContext = viewmodel;
|
|
viewmodel.RequestClose += () => Close();
|
|
}
|
|
|
|
// 마우스 드래그 시작 위치
|
|
public class RectangleAdorner : Adorner
|
|
{
|
|
private Point? mStartPoint;
|
|
private Point? mEndPoint;
|
|
private readonly Pen mPen;
|
|
|
|
public RectangleAdorner(UIElement adornedElement) : base(adornedElement)
|
|
{
|
|
mPen = new Pen(Brushes.Red, 1) {
|
|
DashStyle = DashStyles.Dash
|
|
};
|
|
}
|
|
|
|
public void Start(Point startPoint)
|
|
{
|
|
this.mStartPoint = startPoint;
|
|
this.InvalidateVisual();
|
|
}
|
|
|
|
public void Update(Point endPoint)
|
|
{
|
|
this.mEndPoint = endPoint;
|
|
this.InvalidateVisual();
|
|
}
|
|
|
|
public void Stop()
|
|
{
|
|
this.mStartPoint = null;
|
|
this.mEndPoint = null;
|
|
this.InvalidateVisual();
|
|
}
|
|
|
|
protected override void OnRender(DrawingContext drawingContext)
|
|
{
|
|
if (this.mStartPoint.HasValue && this.mEndPoint.HasValue) {
|
|
var rect = new Rect(this.mStartPoint.Value, this.mEndPoint.Value);
|
|
drawingContext.DrawRectangle(null, mPen, rect);
|
|
}
|
|
}
|
|
}
|
|
|
|
// 마우스 드래그 시작 위치
|
|
Point? _DragStart = null;
|
|
|
|
// ListBox에서 마우스 이벤트 처리
|
|
private void ListBox_PreviewMouseLeftButtonDown(object sender, MouseButtonEventArgs e)
|
|
{
|
|
var listBox = (ListBox)sender;
|
|
var adornerLayer = AdornerLayer.GetAdornerLayer(listBox);
|
|
var adorner = new RectangleAdorner(listBox);
|
|
adornerLayer.Add(adorner);
|
|
adorner.Start(e.GetPosition(listBox));
|
|
|
|
_DragStart = e.GetPosition(listBox);
|
|
|
|
foreach (var item in listBox.Items) {
|
|
var listBoxItem = (ListBoxItem)listBox.ItemContainerGenerator.ContainerFromItem(item);
|
|
var itemRect = VisualTreeHelper.GetDescendantBounds(listBoxItem);
|
|
var itemBounds = listBoxItem.TransformToAncestor(listBox).TransformBounds(itemRect);
|
|
|
|
if (itemBounds.Contains(_DragStart.Value)) {
|
|
listBoxItem.IsSelected = !listBoxItem.IsSelected;
|
|
}
|
|
}
|
|
}
|
|
|
|
private void ListBox_PreviewMouseMove(object sender, MouseEventArgs e)
|
|
{
|
|
if (e.LeftButton == MouseButtonState.Pressed && _DragStart != null) {
|
|
var listBox = (ListBox)sender;
|
|
var adornerLayer = AdornerLayer.GetAdornerLayer(listBox);
|
|
var adorner = (RectangleAdorner)adornerLayer.GetAdorners(listBox)[0];
|
|
adorner.Update(e.GetPosition(listBox));
|
|
}
|
|
}
|
|
|
|
private void ListBox_PreviewMouseLeftButtonUp(object sender, MouseButtonEventArgs e)
|
|
{
|
|
var listBox = (ListBox)sender;
|
|
var adornerLayer = AdornerLayer.GetAdornerLayer(listBox);
|
|
var adorner = (RectangleAdorner)adornerLayer.GetAdorners(listBox)[0];
|
|
adornerLayer.Remove(adorner);
|
|
|
|
if (_DragStart != null) {
|
|
var dragEnd = e.GetPosition(listBox);
|
|
|
|
// 사각형 영역 계산
|
|
var rect = new Rect(_DragStart.Value, dragEnd);
|
|
|
|
foreach (var item in listBox.Items) {
|
|
var listBoxItem = (ListBoxItem)listBox.ItemContainerGenerator.ContainerFromItem(item);
|
|
var itemRect = VisualTreeHelper.GetDescendantBounds(listBoxItem);
|
|
var itemBounds = listBoxItem.TransformToAncestor(listBox).TransformBounds(itemRect);
|
|
|
|
// 원래 코드
|
|
//if (itemBounds.Contains(rect)) {
|
|
// listBoxItem.IsSelected = !listBoxItem.IsSelected;
|
|
//}
|
|
//else if (rect.IntersectsWith(itemBounds)) {
|
|
// listBoxItem.IsSelected = true;
|
|
//}
|
|
|
|
if (rect.IntersectsWith(itemBounds)) {
|
|
listBoxItem.IsSelected = !listBoxItem.IsSelected;
|
|
}
|
|
}
|
|
}
|
|
_DragStart = null;
|
|
}
|
|
|
|
private void Button_Click_EditPosIdx(object sender, RoutedEventArgs e) {
|
|
var fovInfo = VisionRecipeManager.GetFovInfos().FirstOrDefault();
|
|
var cameraDisplay = CameraDisplayManager.GetDisplay(fovInfo, eDisplayType.Machine_B);
|
|
VisionCommonUI.ChildImageSettingWindow.Instance?.Show(fovInfo, cameraDisplay);
|
|
}
|
|
|
|
private void Button_Click_SelectAll(object sender, RoutedEventArgs e) {
|
|
foreach (var item in ListBox.Items) {
|
|
var listBoxItem = (ListBoxItem)ListBox.ItemContainerGenerator.ContainerFromItem(item);
|
|
listBoxItem.IsSelected = true;
|
|
}
|
|
}
|
|
|
|
private void Button_Click_DeSelectAll(object sender, RoutedEventArgs e) {
|
|
foreach (var item in ListBox.Items) {
|
|
var listBoxItem = (ListBoxItem)ListBox.ItemContainerGenerator.ContainerFromItem(item);
|
|
listBoxItem.IsSelected = false;
|
|
}
|
|
}
|
|
|
|
private void Button_Click_Invert(object sender, RoutedEventArgs e) {
|
|
foreach (var item in ListBox.Items) {
|
|
var listBoxItem = (ListBoxItem)ListBox.ItemContainerGenerator.ContainerFromItem(item);
|
|
listBoxItem.IsSelected = !listBoxItem.IsSelected;
|
|
}
|
|
}
|
|
|
|
private void Button_Click_Save(object sender, RoutedEventArgs e) {
|
|
(this.DataContext as WDSelectScoutFieldViewModel).PerformCmdSave();
|
|
if (VisionCommonUI.ChildImageSettingWindow.Instance.IsActive) {
|
|
VisionCommonUI.ChildImageSettingWindow.Instance.Close();
|
|
}
|
|
}
|
|
}
|
|
}
|