LGES-OC5-PtoP-Welder/WeldingComponents/WeldingCommon/Views/Recipes/UCScannerObjectTeachingControlBox.xaml
to3796zw 041c15550c feat: 레시피별 Front/Down 레이저 인터락 추가
Use Interlock ON 시 ① 안전구역 게이트(기존) 유지 + ② 레시피별 방향 차단(신규). Recipe 폴더의 Recipe_Laser_Interlock.json(Front/Down 0/1)에 저장하고, 경로는 FieldHelper.json과 동일 소스(DB.Dao.SystemRecipe.WorkRecipeFile) 사용. Auto/Manual 양쪽 적용(Manual은 ①+② 신규), VM 체크박스는 레시피 전환 시 Background 우선순위 재로드로 stale 방지.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-25 22:30:57 +09:00

194 lines
16 KiB
XML

<UserControl x:Class="WeldingCommon.Views.UCScannerObjectTeachingControlBox"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:local="clr-namespace:WeldingCommon.Views"
xmlns:behavior="http://schemas.microsoft.com/xaml/behaviors"
xmlns:view="clr-namespace:Aurora.View;assembly=Aurora"
xmlns:mah="http://metro.mahapps.com/winfx/xaml/controls"
xmlns:aurorauicomponent="clr-namespace:AuroraUIComponent;assembly=AuroraUIComponent"
xmlns:usercontrols="clr-namespace:AuroraUIComponent.UserControls;assembly=AuroraUIComponent"
d:DataContext="{d:DesignInstance Type=local:UCScannerObjectTeachingControlBoxViewModel}"
mc:Ignorable="d"
d:DesignHeight="800" d:DesignWidth="300" x:Name="uc">
<UserControl.Resources>
<view:BoolConverter x:Key="convStatusColor" TrueValue="ForestGreen" FalseValue="#3E3E42"/>
<view:BoolConverter x:Key="convSelectedScoutType" TrueValue="Scout Normal" FalseValue="Scout Flying Vision" />
<view:BoolConverter x:Key="convTrueVisible" TrueValue="Visible" FalseValue="Collapsed"/>
<view:BoolConverter x:Key="convFalseVisible" TrueValue="Collapsed" FalseValue="Visible"/>
</UserControl.Resources>
<behavior:Interaction.Triggers>
<behavior:PropertyChangedTrigger Binding="{Binding IsVisible, ElementName=uc}">
<behavior:InvokeCommandAction Command="{Binding CMD_VisibleChanged}" CommandParameter="{Binding IsVisible, ElementName=uc}"/>
</behavior:PropertyChangedTrigger>
</behavior:Interaction.Triggers>
<Grid>
<GroupBox Header="Control">
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="auto"></RowDefinition>
<RowDefinition Height="auto"></RowDefinition>
<RowDefinition Height="auto"></RowDefinition>
<RowDefinition Height="auto"></RowDefinition>
</Grid.RowDefinitions>
<GroupBox Header="Scout Image" Grid.Row="0" Margin="0 3 0 0" Style="{StaticResource StGroupBox2nd}">
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="auto"></RowDefinition>
<RowDefinition Height="auto"></RowDefinition>
<RowDefinition Height="auto"></RowDefinition>
<RowDefinition Height="auto"></RowDefinition>
<RowDefinition Height="auto"></RowDefinition>
<RowDefinition Height="1*"></RowDefinition>
</Grid.RowDefinitions>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="1*"></ColumnDefinition>
<ColumnDefinition Width="1*"></ColumnDefinition>
</Grid.ColumnDefinitions>
<Border Grid.Row="0" Grid.Column="0" MinHeight="30">
<TextBlock Margin="10 0" FontSize="12" Foreground="#FFBBBBBB" FontWeight="Bold" Text="Selected Type" VerticalAlignment="Center" HorizontalAlignment="Right"/>
</Border>
<Border Grid.Row="0" Grid.Column="1" BorderThickness="1" BorderBrush="Gray">
<TextBlock Margin="10 0" FontSize="12" Foreground="#FFBBBBBB" FontWeight="Bold" Text="{Binding IsSelectedScoutNormal, Converter={StaticResource convSelectedScoutType}}" VerticalAlignment="Center" HorizontalAlignment="Left"/>
</Border>
<!-- Row 1 : Same Row Sleep -->
<Border Grid.Row="1" Grid.Column="0" MinHeight="30" Visibility="{Binding IsSelectedScoutNormal, Converter={StaticResource convTrueVisible}}">
<TextBlock Margin="10 0" FontSize="12" Foreground="#FFBBBBBB" FontWeight="Bold" Text="SameRow Sleep(ms)" VerticalAlignment="Center" HorizontalAlignment="Right"/>
</Border>
<TextBox Grid.Row="1" Grid.Column="1" Margin="10 3" VerticalAlignment="Center" Visibility="{Binding IsSelectedScoutNormal, Converter={StaticResource convTrueVisible}}" Text="{Binding ScoutSameRowSleepMs, UpdateSourceTrigger=PropertyChanged}"/>
<!-- Row 2 : Row Change Sleep -->
<Border Grid.Row="2" Grid.Column="0" MinHeight="30" Visibility="{Binding IsSelectedScoutNormal, Converter={StaticResource convTrueVisible}}">
<TextBlock Margin="10 0" FontSize="12" Foreground="#FFBBBBBB" FontWeight="Bold" Text="RowChange Sleep(ms)" VerticalAlignment="Center" HorizontalAlignment="Right"/>
</Border>
<TextBox Grid.Row="2" Grid.Column="1" Margin="10 3" VerticalAlignment="Center" Visibility="{Binding IsSelectedScoutNormal, Converter={StaticResource convTrueVisible}}" Text="{Binding ScoutRowChangeSleepMs, UpdateSourceTrigger=PropertyChanged}"/>
<Grid Grid.Row="3" Grid.Column="0" Grid.ColumnSpan="2" Height="50" Margin="0 5 0 0" Visibility="{Binding IsSelectedScoutNormal, Converter={StaticResource convTrueVisible}}">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="1*"></ColumnDefinition>
<ColumnDefinition Width="1.3*"></ColumnDefinition>
<ColumnDefinition Width="1*"></ColumnDefinition>
</Grid.ColumnDefinitions>
<Button Grid.Column="0" Margin="3" HorizontalAlignment="Stretch" VerticalAlignment="Stretch" Height="auto" FontWeight="Bold" Style="{StaticResource StButtonAccentBlue}" Command="{Binding CMD_ShowSelectFieldWindow}">
<StackPanel Orientation="Horizontal">
<Image Width="20" Height="20" Margin="5 0 5 0" Source="../../Resource/slash.jpg"/>
<TextBlock Text="Field"/>
</StackPanel>
</Button>
<Button Grid.Column="1" Margin="3" HorizontalAlignment="Stretch" VerticalAlignment="Stretch" Height="auto" FontWeight="Bold" Style="{StaticResource StButtonAccentPurple}" Command="{Binding CMD_RunScoutNormal}" Content="Run" IsEnabled="{Binding IsSequenceRunning_ScoutNormal, Converter={StaticResource convReverse}}"/>
<Button Grid.Column="2" Margin="3" HorizontalAlignment="Stretch" VerticalAlignment="Stretch" Height="auto" FontWeight="Bold" Style="{StaticResource StButtonAccentPurple}" Command="{Binding CMD_StopScoutNormal}" Content="Stop" IsEnabled="{Binding IsSequenceRunning_ScoutNormal}"/>
</Grid>
<Grid Grid.Row="4" Grid.Column="0" Grid.ColumnSpan="2" Height="50" Margin="0" Visibility="{Binding IsSelectedScoutNormal, Converter={StaticResource convFalseVisible}}">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="2*"></ColumnDefinition>
<ColumnDefinition Width="1*"></ColumnDefinition>
</Grid.ColumnDefinitions>
<Button Grid.Column="0" Margin="3" HorizontalAlignment="Stretch" VerticalAlignment="Stretch" Height="auto" FontWeight="Bold" Style="{StaticResource StButtonAccentPurple}" Command="{Binding CMD_RunScoutFlyingVision}" Content="Run Flying Vision" IsEnabled="{Binding IsSequenceRunning_ScoutFlyingVision, Converter={StaticResource convReverse}}"/>
<Button Grid.Column="1" Margin="3" HorizontalAlignment="Stretch" VerticalAlignment="Stretch" Height="auto" FontWeight="Bold" Style="{StaticResource StButtonAccentPurple}" Command="{Binding CMD_StopScoutFlyingVision}" Content="Stop" IsEnabled="{Binding IsSequenceRunning_ScoutFlyingVision}"/>
</Grid>
</Grid>
</GroupBox>
<GroupBox Header="Laser Shot" Grid.Row="1" Margin="0 5 0 0" Style="{StaticResource StGroupBox2nd}">
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="auto"></RowDefinition>
<RowDefinition Height="auto"></RowDefinition>
<RowDefinition Height="auto"></RowDefinition>
<RowDefinition Height="auto"></RowDefinition>
</Grid.RowDefinitions>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="1*"></ColumnDefinition>
<ColumnDefinition Width="1*"></ColumnDefinition>
</Grid.ColumnDefinitions>
<GroupBox Header="Laser Control" Grid.Row="0" Grid.Column="0" Grid.ColumnSpan="2" Margin="0 3 0 0" Style="{StaticResource StGroupBox4th}">
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="1*"></ColumnDefinition>
<ColumnDefinition Width="1*"></ColumnDefinition>
</Grid.ColumnDefinitions>
<Grid.RowDefinitions>
<RowDefinition Height="auto"></RowDefinition>
<RowDefinition Height="auto"></RowDefinition>
<RowDefinition Height="auto"></RowDefinition>
<RowDefinition Height="auto"></RowDefinition>
</Grid.RowDefinitions>
<Border Grid.Row="0" Grid.Column="0" MinHeight="30">
<TextBlock Margin="10 0" FontSize="12" Foreground="#FFBBBBBB" FontWeight="Bold" Text="Guid Beam Status" VerticalAlignment="Center" HorizontalAlignment="Right"/>
</Border>
<Border Grid.Row="0" Grid.Column="1" BorderThickness="1" BorderBrush="Gray">
<TextBlock Margin="10 0" FontSize="12" Foreground="#FFBBBBBB" FontWeight="Bold" Text="{Binding IsGuidBeam}" Background="{Binding IsGuidBeam, Converter={StaticResource convStatusColor}}" VerticalAlignment="Center" HorizontalAlignment="Left"/>
</Border>
<Button Grid.Row="1" Grid.Column="0" Grid.ColumnSpan="2" Margin="5 1 0 0" Command="{Binding CMD_LaserGuideBeam}" HorizontalAlignment="Stretch" VerticalAlignment="Stretch" Height="auto" Style="{StaticResource StButtonAccentBlue}">
<StackPanel Orientation="Horizontal">
<Image Width="20" Height="10" Margin="5 0 5 0" Source="../../Resource/guide.png"/>
<TextBlock Text="Guid Beam"/>
</StackPanel>
</Button>
<Border Grid.Row="2" Grid.Column="0" MinHeight="30" Margin="0 10 0 0">
<TextBlock Margin="10 0" FontSize="12" Foreground="#FFBBBBBB" FontWeight="Bold" Text="Laser Ready Status" VerticalAlignment="Center" HorizontalAlignment="Right"/>
</Border>
<Border Grid.Row="2" Grid.Column="1" BorderThickness="1" BorderBrush="Gray" Margin="0 10 0 0">
<TextBlock Margin="10 0" FontSize="12" Foreground="#FFBBBBBB" FontWeight="Bold" Text="{Binding IsLaserReady}" Background="{Binding IsLaserReady, Converter={StaticResource convStatusColor}}" VerticalAlignment="Center" HorizontalAlignment="Left"/>
</Border>
<Button Grid.Row="3" Grid.Column="0" Grid.ColumnSpan="2" Margin="5 1 0 0" Command="{Binding CMD_LaserReadyCheck}" HorizontalAlignment="Stretch" VerticalAlignment="Stretch" Height="auto" Style="{StaticResource StButtonAccentBlue}">
<StackPanel Orientation="Horizontal">
<Image Width="20" Height="10" Margin="5 0 5 0" Source="../../Resource/ready.png"/>
<TextBlock Text="Laser Ready"/>
</StackPanel>
</Button>
</Grid>
</GroupBox>
<GroupBox Header="Object Select" Grid.Row="1" Grid.Column="0" Grid.ColumnSpan="2" Margin="0 3 0 0" Style="{StaticResource StGroupBox4th}">
<mah:ToggleSwitch Grid.Column="0" HorizontalAlignment="Center" FontSize="12" FontWeight="Bold"
IsOn="{Binding IsObjectSelectAll}"
OffContent="Selected Object"
OnContent="All Object"/>
</GroupBox>
<Grid Grid.Row="2" Grid.Column="0" Grid.ColumnSpan="2" Margin="0 5 0 0" Height="50">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="2*"></ColumnDefinition>
<ColumnDefinition Width="1*"></ColumnDefinition>
</Grid.ColumnDefinitions>
<Button Margin="3" HorizontalAlignment="Stretch" VerticalAlignment="Stretch" Height="auto" FontWeight="Bold" Style="{StaticResource StButtonAccentPurple}" Command="{Binding CMD_RunTeachingRun}" Content="Run Welding" IsEnabled="{Binding IsSequenceRunning_TeachingRun, Converter={StaticResource convReverse}}"/>
<Button Grid.Column="1" Margin="3" HorizontalAlignment="Stretch" VerticalAlignment="Stretch" Height="auto" FontWeight="Bold" Style="{StaticResource StButtonAccentPurple}" Command="{Binding CMD_StopTeachingRun}" Content="Stop" IsEnabled="{Binding IsSequenceRunning_TeachingRun}"/>
</Grid>
<GroupBox Header="Laser Interlock" Grid.Row="3" Grid.Column="0" Grid.ColumnSpan="2" Margin="0 5 0 0" Style="{StaticResource StGroupBox4th}">
<StackPanel>
<CheckBox Margin="6 4" FontSize="12" FontWeight="Bold" Foreground="#FFBBBBBB"
Content="FRONT INTERLOCK" IsChecked="{Binding IsFrontInterlock}"/>
<CheckBox Margin="6 4" FontSize="12" FontWeight="Bold" Foreground="#FFBBBBBB"
Content="DOWN INTERLOCK" IsChecked="{Binding IsDownInterlock}"/>
</StackPanel>
</GroupBox>
</Grid>
</GroupBox>
<Button Grid.Row="2" Margin="0 5 0 0" HorizontalAlignment="Right" Padding="8 3" Command="{Binding CMD_ToggleScannerCamView}" Style="{StaticResource StButtonAccentBlue}">
<StackPanel Orientation="Horizontal">
<Image Width="20" Height="10" Margin="5 0 5 0" Source="../../Resource/guide.png"/>
<TextBlock Text="Scanner Cam"/>
</StackPanel>
</Button>
<GroupBox Header="Import Object From DXF" Grid.Row="3" Margin="0 5 0 0" Style="{StaticResource StGroupBox2nd}">
<Button Margin="5" Command="{Binding CMD_ImportObjectFromDXF}" HorizontalAlignment="Stretch" VerticalAlignment="Stretch" Height="auto" Style="{StaticResource StButtonAccentBlue}">
<StackPanel Orientation="Horizontal">
<Image Width="20" Height="10" Margin="5 0 5 0" Source="../../Resource/dxf.png"/>
<TextBlock Text="Select Import File"/>
</StackPanel>
</Button>
</GroupBox>
</Grid>
</GroupBox>
</Grid>
</UserControl>