diff --git a/WeldingComponents/LASA/GUI/Page/MainPage.cs b/WeldingComponents/LASA/GUI/Page/MainPage.cs index aaa47b5..c8bb8c0 100644 --- a/WeldingComponents/LASA/GUI/Page/MainPage.cs +++ b/WeldingComponents/LASA/GUI/Page/MainPage.cs @@ -498,9 +498,27 @@ namespace GUI } public List LoadScoutField() { + // [기존 보존 2026-06-19] selectedIndexNo(GUI 캐시) 기반. 하위 호환용으로 남겨둠. return DB.RecipeFieldScan.Instance.GetPageFieldScan( DB.RecipeFieldScan.Instance.GetAutoPageName(selectedIndexNo)); } + // [추가 2026-06-19] 페이지 인덱스를 명시 지정해 스카우트 필드 로드 (시퀀스 PageIndex 주입용) + public List LoadScoutField(int pageIndex) + { + return DB.RecipeFieldScan.Instance.GetPageFieldScan( + DB.RecipeFieldScan.Instance.GetAutoPageName(pageIndex)); + } + // [추가 2026-06-19] 현재 화면에 표시 중인 페이지 인덱스(라이브). 콤보박스 우선, 없으면 ActiveLayer.No. + // 로드 키를 stale 캐시(selectedIndexNo) 대신 라이브 값으로 얻기 위함. + public int GetCurrentPageIndex() + { + int idx = toolStripComboBoxPage.SelectedIndex; + if (idx < 0) { + var active = ScannerCanvasCtrlTeaching?.Model?.ActiveLayer; + idx = active != null ? active.No : 0; + } + return idx; + } void SaveAndLoadFieldScanFromLasaDb(string inputStr = null) { string fullpath = inputStr == null ? DB.Dao.SystemRecipe.WorkRecipeFile : inputStr; diff --git a/WeldingComponents/WeldingCommon/Sequences/Main/SeqScoutNormal.cs b/WeldingComponents/WeldingCommon/Sequences/Main/SeqScoutNormal.cs index 591c8fb..e3208f5 100644 --- a/WeldingComponents/WeldingCommon/Sequences/Main/SeqScoutNormal.cs +++ b/WeldingComponents/WeldingCommon/Sequences/Main/SeqScoutNormal.cs @@ -148,7 +148,13 @@ namespace WeldingCommon.Sequences //CamConfig의 PosIndex 순서로 ScoutNoList를 파싱해서 사용하도록 함 //_ChildBufRowCols = _CamConfig.ChildImage.ChildBufRowCols; var mainPage = CommonHelper.GetMainPage(); - _ChildBufRowCols = mainPage.LoadScoutField(); + // [기존 2026-06-19 주석처리] GUI 전역 상태(selectedIndexNo)에 의존 → 페이지 정합성 버그 + //_ChildBufRowCols = mainPage.LoadScoutField(); + // [변경 2026-06-19] InitParam 으로 전달된 페이지 인덱스로 명시 로드 + // 폴백: 해당 페이지가 없으면(인덱스 초과 등) selectedIndexNo 기반 로드, 그래도 null이면 빈 리스트로 NRE 방지. + _ChildBufRowCols = mainPage.LoadScoutField(_InitParam.PageIndex) + ?? mainPage.LoadScoutField() + ?? new List(); _ScoutNoList = GenerateSortedScoutNoList(_ChildBufRowCols); _ScoutNo = 0; @@ -375,6 +381,10 @@ namespace WeldingCommon.Sequences public bool IsRealTimeScout { get; set; } public ScoutSeqParams ScoutSeqParams { get; set; } + // [추가 2026-06-19] 스카우트 필드를 불러올 페이지 인덱스(0-base). + // 기존: SeqScoutNormal 이 MainPage.selectedIndexNo(GUI 전역 상태)에만 의존 → 페이지 이동/자동운전 시 stale. + // 변경: 호출부가 "현재 처리/표시 중인 페이지 번호"를 명시 주입. + public int PageIndex { get; set; } = 0; } public class SeqScoutNormal_OutParam : OutParam diff --git a/WeldingComponents/WeldingCommon/Views/Recipes/UCScannerObjectTeachingControlBoxViewModel.cs b/WeldingComponents/WeldingCommon/Views/Recipes/UCScannerObjectTeachingControlBoxViewModel.cs index a4a5be5..0233159 100644 --- a/WeldingComponents/WeldingCommon/Views/Recipes/UCScannerObjectTeachingControlBoxViewModel.cs +++ b/WeldingComponents/WeldingCommon/Views/Recipes/UCScannerObjectTeachingControlBoxViewModel.cs @@ -251,6 +251,8 @@ namespace WeldingCommon.Views var param = new SeqScoutNormal_InitParam() { IsRealTimeScout = false, ScoutSeqParams = scoutSeqParams, + // [추가 2026-06-19] 현재 표시 중인 페이지의 스카우트 필드를 사용하도록 명시 주입 + PageIndex = CommonHelper.GetMainPage().GetCurrentPageIndex(), }; PopupSequenceDiagram(ref _WinSequenceDiagramScoutNormal, CommonSequenceIds.SeqScoutNormal, param); diff --git a/WeldingComponents/WeldingCommon/Views/Test/UCTestSequenceViewModel.cs b/WeldingComponents/WeldingCommon/Views/Test/UCTestSequenceViewModel.cs index 69e6fcc..98fba38 100644 --- a/WeldingComponents/WeldingCommon/Views/Test/UCTestSequenceViewModel.cs +++ b/WeldingComponents/WeldingCommon/Views/Test/UCTestSequenceViewModel.cs @@ -361,6 +361,8 @@ namespace WeldingCommon.Views var param = new SeqScoutNormal_InitParam() { IsRealTimeScout = false, ScoutSeqParams = new ScoutSeqParams(VisionRecipeManager.GetFovInfos()[0], eDisplayType.Machine_B), + // [추가 2026-06-19] 현재 표시 중인 페이지 인덱스 주입 + PageIndex = CommonHelper.GetMainPage().GetCurrentPageIndex(), }; IsSequenceRunning_SeqScoutNormal = true;