Press n or j to go to the next uncovered block, b, p or k for the previous block.
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 | import type { Types as CoreTypes } from '@cornerstonejs/core';
export type FlipValue = 'toggle' | boolean;
export type RotationMode = 'apply' | 'set';
export interface VolumeLightingOptions {
shade?: boolean;
ambient?: number;
diffuse?: number;
specular?: number;
}
export interface WindowLevelParams {
windowWidth: number;
windowCenter: number;
/** Legacy volume target; resolved by the caller. Ignored on native (active binding). */
volumeId?: string;
/** Native per-binding target (e.g. the PT overlay in a fusion); ignored on legacy. */
displaySetInstanceUID?: string;
}
export interface ColormapParams {
colormap: Record<string, unknown>;
/** Used by the legacy orthographic branch to resolve the volumeId; ignored on native. */
displaySetInstanceUID?: string;
}
/**
* Per-viewport interaction/appearance operations, extracted out of commandsModule so
* command bodies stay thin (migration plan §4.3). This mirrors the IViewportBackend
* family (LegacyViewportBackend / NextViewportBackend): there is one implementation per
* lane and each uses its lane's cornerstone APIs DIRECTLY (legacy getCamera/setProperties/
* getViewPresentation vs native getViewState/setDisplaySetPresentation/getViewReference).
*
* DISPATCH: unlike IViewportBackend (selected once by the appConfig flag because it owns
* per-session mount lifecycle), operations are routed PER VIEWPORT via the dispatcher in
* viewportOperations.ts (isNextViewport(viewport) ? next : legacy). The viewport is
* already created and self-describing, and a session can hold a mix of legacy and native
* viewports; per-viewport routing is the runtime truth.
*
* RENDER: no method calls viewport.render(). The caller renders, matching today's
* per-command render timing (e.g. setViewportColormap renders only when immediate).
*
* VIEWPORT RESOLUTION: never done here — the command owns "which viewport".
*/
export interface IViewportOperations {
// ---- camera / view-state ----
/** Toggle (default) or set horizontal flip. */
flipHorizontal(viewport: CoreTypes.IViewport, newValue?: FlipValue): void;
/** Toggle (default) or set vertical flip. */
flipVertical(viewport: CoreTypes.IViewport, newValue?: FlipValue): void;
/** Rotate: mode 'apply' = relative, mode 'set' = absolute (with flip-parity correction). */
rotate(viewport: CoreTypes.IViewport, rotation: number, mode?: RotationMode): void;
/** Reset properties + camera/view-state to defaults (slice/navigation preserved on native). */
reset(viewport: CoreTypes.IViewport): void;
/** Zoom by direction: >0 in, <0 out, 0 = fit-to-window (reset). */
scaleBy(viewport: CoreTypes.IViewport, direction: number): void;
/** Read the view-plane normal in a lane-appropriate way. */
getViewPlaneNormal(viewport: CoreTypes.IViewport): CoreTypes.Point3 | undefined;
/**
* In-plane re-center (+ zoom-to-fit) of a measurement AFTER the caller's setViewReference
* slice jump. Returns true when it re-centered (caller should render), false when the
* measurement was already visible or in-plane centering is unsupported on the lane.
*/
centerOnMeasurement(viewport: CoreTypes.IViewport, measurement: Record<string, unknown>): boolean;
// ---- appearance / properties ----
/** Toggle invert. */
invert(viewport: CoreTypes.IViewport): void;
/** Apply a VOI window/level. */
setWindowLevel(viewport: CoreTypes.IViewport, params: WindowLevelParams): void;
/** Apply a colormap. */
setColormap(viewport: CoreTypes.IViewport, params: ColormapParams): void;
// ---- 3D volume rendering (CS-14: native unsupported yet) ----
/** VR preset. */
setPreset(viewport: CoreTypes.IViewport, preset: string): void;
/** VR sample distance / samples-per-ray quality. */
setVolumeRenderingQuality(viewport: CoreTypes.IViewport, volumeQuality: number): void;
/** Shift scalar-opacity transfer-function points. */
shiftVolumeOpacityPoints(viewport: CoreTypes.IViewport, shift: number): void;
/** VR lighting (shade/ambient/diffuse/specular). */
setVolumeLighting(viewport: CoreTypes.IViewport, options: VolumeLightingOptions): void;
}
|