feat: 레시피 Scout Normal 줄에 Field 버튼 추가 (3열 [Field]-[Run]-[Stop])

- UCScannerObjectTeachingControlBox.xaml: Scout Normal 실행 줄을 2열에서 3열로
  재구성, 너비 1*/1.3*/1*로 Run 강조. Run Scout Normal 버튼을 Run으로 변경,
  1열에 Field 버튼 신규 추가.
- VM: 매뉴얼 화면과 동일한 WDSelectScoutField 팝업을 띄우는
  CMD_ShowSelectFieldWindow 이식. 저장은 팝업 VM에서 자체 처리하므로
  비전 이벤트 구독(SAVE_CHILD_IMAGE_SETTING)은 제외.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
노도연 2026-06-23 18:23:10 +09:00
parent 4ed35cb94a
commit 357702399c
2 changed files with 35 additions and 3 deletions

View File

@ -67,11 +67,13 @@
<Grid Grid.Row="3" Grid.Column="0" Grid.ColumnSpan="2" Height="50" Margin="0 5 0 0" Visibility="{Binding IsSelectedScoutNormal, Converter={StaticResource convTrueVisible}}"> <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> <Grid.ColumnDefinitions>
<ColumnDefinition Width="2*"></ColumnDefinition> <ColumnDefinition Width="1*"></ColumnDefinition>
<ColumnDefinition Width="1.3*"></ColumnDefinition>
<ColumnDefinition Width="1*"></ColumnDefinition> <ColumnDefinition Width="1*"></ColumnDefinition>
</Grid.ColumnDefinitions> </Grid.ColumnDefinitions>
<Button Grid.Column="0" Margin="3" HorizontalAlignment="Stretch" VerticalAlignment="Stretch" Height="auto" FontWeight="Bold" Style="{StaticResource StButtonAccentPurple}" Command="{Binding CMD_RunScoutNormal}" Content="Run Scout Normal" IsEnabled="{Binding IsSequenceRunning_ScoutNormal, Converter={StaticResource convReverse}}"/> <Button Grid.Column="0" Margin="3" HorizontalAlignment="Stretch" VerticalAlignment="Stretch" Height="auto" FontWeight="Bold" Style="{StaticResource StButtonAccentPurple}" Command="{Binding CMD_ShowSelectFieldWindow}" Content="Field"/>
<Button Grid.Column="1" Margin="3" HorizontalAlignment="Stretch" VerticalAlignment="Stretch" Height="auto" FontWeight="Bold" Style="{StaticResource StButtonAccentPurple}" Command="{Binding CMD_StopScoutNormal}" Content="Stop" IsEnabled="{Binding IsSequenceRunning_ScoutNormal}"/> <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 Grid.Row="4" Grid.Column="0" Grid.ColumnSpan="2" Height="50" Margin="0" Visibility="{Binding IsSelectedScoutNormal, Converter={StaticResource convFalseVisible}}"> <Grid Grid.Row="4" Grid.Column="0" Grid.ColumnSpan="2" Height="50" Margin="0" Visibility="{Binding IsSelectedScoutNormal, Converter={StaticResource convFalseVisible}}">

View File

@ -45,6 +45,7 @@ namespace WeldingCommon.Views
public ICommand CMD_LaserReadyCheck { get; } public ICommand CMD_LaserReadyCheck { get; }
public ICommand CMD_ImportObjectFromDXF { get; } public ICommand CMD_ImportObjectFromDXF { get; }
public ICommand CMD_ToggleScannerCamView { get; } public ICommand CMD_ToggleScannerCamView { get; }
public ICommand CMD_ShowSelectFieldWindow { get; }
private readonly IAuroraEnvironment _Aurora; private readonly IAuroraEnvironment _Aurora;
private SystemParameter _SystemParameter; private SystemParameter _SystemParameter;
@ -106,6 +107,9 @@ namespace WeldingCommon.Views
// 레시피 화면에서 토글로 띄우는 스캐너 카메라 + 모션 창 (재사용을 위해 Hide/Show) // 레시피 화면에서 토글로 띄우는 스캐너 카메라 + 모션 창 (재사용을 위해 Hide/Show)
private WDScannerCamMotion _ScannerCamWindow; private WDScannerCamMotion _ScannerCamWindow;
// Scout Field 선택 팝업 (매뉴얼 화면과 동일한 창을 레시피 화면에서도 사용)
private WDSelectScoutField _SelectFieldWindow;
private WinSequenceDiagram _WinSequenceDiagramScoutNormal; private WinSequenceDiagram _WinSequenceDiagramScoutNormal;
private WinSequenceDiagram _WinSequenceDiagramScoutFlyingVision; private WinSequenceDiagram _WinSequenceDiagramScoutFlyingVision;
private WinSequenceDiagram _WinSequenceDiagramTeachingRun; private WinSequenceDiagram _WinSequenceDiagramTeachingRun;
@ -144,6 +148,7 @@ namespace WeldingCommon.Views
CMD_LaserReadyCheck = new DelegateCommand(PerformCmdLaserReadyCheck); CMD_LaserReadyCheck = new DelegateCommand(PerformCmdLaserReadyCheck);
CMD_ImportObjectFromDXF = new DelegateCommand(PerformCmdImportObjectFromDXF); CMD_ImportObjectFromDXF = new DelegateCommand(PerformCmdImportObjectFromDXF);
CMD_ToggleScannerCamView = new DelegateCommand(PerformCmdToggleScannerCamView); CMD_ToggleScannerCamView = new DelegateCommand(PerformCmdToggleScannerCamView);
CMD_ShowSelectFieldWindow = new DelegateCommand(PerformCmdShowSelectFieldWindow, CanShowSelectFieldWindow);
_Aurora.EventObservable.AsObservable(AuroraSysEvent.SYS_SETTING_CHANGED) _Aurora.EventObservable.AsObservable(AuroraSysEvent.SYS_SETTING_CHANGED)
.ObserveOnDispatcher() .ObserveOnDispatcher()
@ -532,6 +537,31 @@ namespace WeldingCommon.Views
} }
} }
private bool CanShowSelectFieldWindow(object o) => _SelectFieldWindow == null;
private void PerformCmdShowSelectFieldWindow(object o)
{
// 매뉴얼 화면과 동일한 Scout Field 선택 팝업을 띄움. 저장은 팝업 VM(PerformCmdSave)에서 자체 처리.
try {
Application.Current.Dispatcher.Invoke(
new Action(() => {
if (_SelectFieldWindow != null) {
_SelectFieldWindow.Close();
_SelectFieldWindow = null;
}
_SelectFieldWindow = new WDSelectScoutField(_Aurora) {
Owner = Application.Current.MainWindow
};
_SelectFieldWindow.Closed += (sender, _) => { _SelectFieldWindow = null; };
_SelectFieldWindow.Show();
}));
}
catch (Exception ex) {
Log.E($"[PerformCmdShowSelectFieldWindow] 실패: {ex.Message}");
}
}
private void PerformCmdImportObjectFromDXF(object obj) private void PerformCmdImportObjectFromDXF(object obj)
{ {
System.Windows.Forms.FileDialog dlg = new System.Windows.Forms.OpenFileDialog(); System.Windows.Forms.FileDialog dlg = new System.Windows.Forms.OpenFileDialog();