UNPKG

@cornerstonejs/core

Version:
82 lines (81 loc) 2.87 kB
import { ViewportType } from '../../enums/index.js'; import { planarProjectionAdapter } from './Planar/planarProjectionAdapter.js'; import { volume3DProjectionAdapter } from './Volume3D/volume3DProjectionAdapter.js'; import { videoProjectionAdapter } from './Video/videoProjectionAdapter.js'; import { ecgProjectionAdapter } from './ECG/ecgProjectionAdapter.js'; import { wsiProjectionAdapter } from './WSI/wsiProjectionAdapter.js'; function getViewportType(request) { const viewportType = request.viewportType ?? request.viewport?.type; return viewportType === undefined ? undefined : String(viewportType); } class ViewportProjectionService { constructor() { this.adapters = new Map(); } register(adapter) { this.adapters.set(adapter.id, adapter); } unregister(adapterId) { this.adapters.delete(adapterId); } getAdapter(viewport, request = {}) { const projectionRequest = { ...request, viewport, }; const viewportType = getViewportType(projectionRequest); for (const adapter of this.adapters.values()) { if (request.kind && adapter.id !== request.kind) { continue; } if (viewportType && !adapter.viewportTypes.some((type) => String(type) === viewportType)) { continue; } return adapter; } } get(viewport, request = {}) { const adapter = this.getAdapter(viewport, request); return adapter?.getSnapshot({ ...request, viewport, }); } getPresentation(viewport, request = {}) { const adapter = this.getAdapter(viewport, request); const snapshot = adapter?.getSnapshot({ ...request, viewport, }); if (!snapshot) { return; } return adapter.getPresentation(snapshot, request.selector); } withPresentation(viewport, presentation, request = {}, options) { const adapter = this.getAdapter(viewport, request); const snapshot = adapter?.getSnapshot({ ...request, viewport, }); if (!snapshot) { return; } return adapter.withPresentation(snapshot, presentation, options); } getRegisteredAdapters() { return Array.from(this.adapters.values()); } clear() { this.adapters.clear(); } } const viewportProjection = new ViewportProjectionService(); viewportProjection.register(planarProjectionAdapter); viewportProjection.register(volume3DProjectionAdapter); viewportProjection.register(videoProjectionAdapter); viewportProjection.register(ecgProjectionAdapter); viewportProjection.register(wsiProjectionAdapter); export { ViewportProjectionService, viewportProjection };