fix(seg): prevent viewport orientation change when loading SEG in manual grid layout (#6021)

This commit is contained in:
Ghadeer Albattarni 2026-05-19 15:59:42 -04:00 committed by GitHub
parent 1e91285c60
commit 95251ab670
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
6 changed files with 67 additions and 1 deletions

View File

@ -76,7 +76,7 @@ function getUpdatedViewportsForSegmentation({
isHangingProtocolLayout
);
if (updatedViewports == null) {
if (updatedViewports == null || !isHangingProtocolLayout) {
return updatedViewports;
}

View File

@ -7,6 +7,7 @@ import {
visitStudy,
waitForViewportsRendered,
waitForViewportRenderCycle,
expect,
} from './utils';
test.beforeEach(async ({ page }) => {
@ -64,3 +65,54 @@ test.describe('3D four up SEG hydration', async () => {
});
});
});
test.describe('3D four up to 3x2 layout SEG hydration', () => {
test.beforeEach(async ({ page }) => {
const studyInstanceUID = '1.3.6.1.4.1.14519.5.2.1.256467663913010332776401703474716742458';
const mode = 'viewer';
await visitStudy(page, studyInstanceUID, mode, 2000);
});
test('should hydrate SEG only in the target viewport and preserve other viewport orientations', async ({
page,
DOMOverlayPageObject,
leftPanelPageObject,
mainToolbarPageObject,
viewportPageObject,
}) => {
await mainToolbarPageObject.layoutSelection.threeDFourUp.click();
let viewportRenderCycle = waitForViewportRenderCycle(page);
// Switch to a manual 3x2 grid layout
await mainToolbarPageObject.layoutSelection.grid(3, 2).click();
await viewportRenderCycle;
// Activate the 3rd viewport (index 2) then load the SEG into it
await viewportPageObject.getNthLocator(2).click();
await expect(viewportPageObject.getNthLocator(2)).toHaveAttribute('data-is-active', 'true');
await leftPanelPageObject.loadSeriesByDescription('SEG');
await expect(DOMOverlayPageObject.viewport.segmentationHydration.locator).toBeVisible();
viewportRenderCycle = waitForViewportRenderCycle(page);
await DOMOverlayPageObject.viewport.segmentationHydration.yes.click();
await viewportRenderCycle;
await checkForScreenshot({
page,
locator: viewportPageObject.grid,
screenshotPath: screenShotPaths.segHydrationAfterLayoutSwitchTo3By2.afterSEGHydrated,
});
viewportRenderCycle = waitForViewportRenderCycle(page);
await mainToolbarPageObject.layoutSelection.threeDFourUp.click();
await viewportRenderCycle;
await checkForScreenshot({
page,
locator: viewportPageObject.grid,
screenshotPath: screenShotPaths.segHydrationAfterLayoutSwitchTo3By2.backTo3DFourUp,
});
});
});

View File

@ -30,6 +30,16 @@ export class MainToolbarPageObject {
return {
...layoutSelection,
grid(cols: number, rows: number) {
const button = page.getByTestId(`Layout-${cols - 1}-${rows - 1}`);
return {
button,
async click() {
await layoutSelection.click();
await button.click();
},
};
},
get axialPrimary() {
const button = page.getByTestId('Axial Primary');
return {

Binary file not shown.

After

Width:  |  Height:  |  Size: 369 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 504 KiB

View File

@ -151,6 +151,10 @@ const screenShotPaths = {
threeDFourUpAfterSEG: 'threeDFourUpAfterSEG.png',
threeDFourUpAfterSegHydrated: 'threeDFourUpAfterSegHydrated.png',
},
segHydrationAfterLayoutSwitchTo3By2: {
afterSEGHydrated: 'afterSEGHydrated.png',
backTo3DFourUp: 'backTo3DFourUp.png',
},
segNoHydrationThenMPR: {
segNoHydrationPreMPR: 'segNoHydrationPreMpr.png',
segNoHydrationPostMPR: 'segNoHydrationPostMpr.png',